From 688d0497758388cb44afa8e8f23fac5962bb6f43 Mon Sep 17 00:00:00 2001 From: Jasper Butcher Date: Sun, 11 Jan 2026 00:04:32 +0000 Subject: [PATCH 01/49] Install bug --- src/foundry_cli/download_checkpoints.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/foundry_cli/download_checkpoints.py b/src/foundry_cli/download_checkpoints.py index ef367a1b..8a27c1b7 100644 --- a/src/foundry_cli/download_checkpoints.py +++ b/src/foundry_cli/download_checkpoints.py @@ -132,7 +132,9 @@ def install_model(model_name: str, checkpoint_dir: Path, force: bool = False) -> ) try: - download_file(checkpoint_info.url, dest_path, checkpoint_info.sha256) + download_file( + checkpoint_info.url, dest_path, checkpoint_info.sha256 + ) console.print( f"[green]✓[/green] Successfully installed {model_name} to {dest_path}" ) From ece2498c5d41afd0b814d0398f08177d2b05fe9e Mon Sep 17 00:00:00 2001 From: fdimaio Date: Mon, 5 Jan 2026 17:56:52 -0800 Subject: [PATCH 02/49] Bugfixes for confidence training --- .../experiment/rf3_run11-with-confidence.yaml | 56 +++++++++++++++++++ .../rf3_net_with_confidence_head.yaml | 1 + 2 files changed, 57 insertions(+) create mode 100644 models/rf3/configs/experiment/rf3_run11-with-confidence.yaml diff --git a/models/rf3/configs/experiment/rf3_run11-with-confidence.yaml b/models/rf3/configs/experiment/rf3_run11-with-confidence.yaml new file mode 100644 index 00000000..9738564c --- /dev/null +++ b/models/rf3/configs/experiment/rf3_run11-with-confidence.yaml @@ -0,0 +1,56 @@ +# @package _global_ + +name: rf3-with-confidence +project: rf3 + +tags: + # list of tags to add to the run ( & on wandb to easily find & filter runs) + - full + +defaults: + - override /datasets: pdb_only + - override /model: rf3_with_confidence + - override /trainer: rf3_with_confidence + +ckpt_config: + _target_: foundry.utils.weights.CheckpointConfig + path: null + reset_optimizer: true + +model: + lr_scheduler: + base_lr: 0.9e-3 # 1/2 of original learning rate (1.8e-3) + +# load confidence features +# remove within_20_closest_chains from loaders +datasets: + run_confidence_head: true + train: + pdb: + sub_datasets: + pn_unit: + dataset: + dataset: + filters: + # filters common across all PDB datasets + - "deposition_date < '2024-01-01'" + - "resolution < 9.0" + - "num_polymer_pn_units <= 300" + - "cluster.notnull()" + - "pdb_id not in ${resolve_import:atomworks.constants,PDB_IDS_WITH_UNPHYSICAL_BONDS}" + # pn_unit specific filters + - "~(q_pn_unit_non_polymer_res_names.notnull() and q_pn_unit_non_polymer_res_names.str.contains('${resolve_import:atomworks.constants,AF3_EXCLUDED_LIGANDS_REGEX}', regex=True))" + interface: + dataset: + dataset: + filters: + # filters common across all PDB datasets + - "deposition_date < '2024-01-01'" + - "resolution < 9.0" + - "num_polymer_pn_units <= 300" + - "cluster.notnull()" + - "pdb_id not in ${resolve_import:atomworks.constants,PDB_IDS_WITH_UNPHYSICAL_BONDS}" + # interface specific filters + - "~(pn_unit_1_non_polymer_res_names.notnull() and pn_unit_1_non_polymer_res_names.str.contains('${resolve_import:atomworks.constants,AF3_EXCLUDED_LIGANDS_REGEX}', regex=True))" + - "~(pn_unit_2_non_polymer_res_names.notnull() and pn_unit_2_non_polymer_res_names.str.contains('${resolve_import:atomworks.constants,AF3_EXCLUDED_LIGANDS_REGEX}', regex=True))" + - "is_inter_molecule" diff --git a/models/rf3/configs/model/components/rf3_net_with_confidence_head.yaml b/models/rf3/configs/model/components/rf3_net_with_confidence_head.yaml index 063e6f5e..e7c0d3c0 100644 --- a/models/rf3/configs/model/components/rf3_net_with_confidence_head.yaml +++ b/models/rf3/configs/model/components/rf3_net_with_confidence_head.yaml @@ -36,6 +36,7 @@ confidence_head: d_hidden: 32 attention_pair_bias: n_head: 16 + kq_norm: true n_bins_pae: 64 n_bins_pde: 64 n_bins_plddt: 50 From 4a7aaf8793e63be61119ed4e78613c2b7979b66c Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Sun, 18 Jan 2026 15:41:00 -0800 Subject: [PATCH 03/49] feat: atom23 porting --- models/rfd3/src/rfd3/constants.py | 98 ++++++++++++++++ .../src/rfd3/transforms/conditioning_base.py | 21 +++- .../src/rfd3/transforms/design_transforms.py | 6 + models/rfd3/src/rfd3/transforms/pipelines.py | 4 +- .../rfd3/transforms/training_conditions.py | 79 ++++++++++--- .../src/rfd3/transforms/util_transforms.py | 6 +- .../rfd3/src/rfd3/transforms/virtual_atoms.py | 107 ++++++++++++------ 7 files changed, 265 insertions(+), 56 deletions(-) diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index 59c387c3..a1a6e484 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -72,6 +72,37 @@ 'GLY': (" N "," CA "," C "," O ", None, None, None, None, None, None, None, None, None, None), # gly 'UNK': (" N "," CA "," C "," O "," CB ", None, None, None, None, None, None, None, None, None), # unk 'MSK': (" N "," CA "," C "," O "," CB ", None, None, None, None, None, None, None, None, None), # mask + 'DA': (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'", + ' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' N6 ', ' N1 ', ' C2 ', ' N3 ', ' C4 ', + None), + + 'DC': (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'", + ' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' N4 ', ' C5 ', ' C6 ', + None, None, None), + + 'DG': (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'", + ' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' O6 ', ' N1 ', ' C2 ', ' N2 ', ' N3 ', ' C4 '), + + 'DT': (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'", + ' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' O4 ', ' C5 ', ' C7 ', ' C6 ', + None, None), + + 'A' : (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'", + ' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' N6 ', ' N1 ', ' C2 ', ' N3 ', ' C4 ', + None), + + 'C' : (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'", + ' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' N4 ', ' C5 ', ' C6 ', + None, None, None), + + 'G' : (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'", + ' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' O6 ', ' N1 ', ' C2 ', ' N2 ', ' N3 ', ' C4 '), + + 'U' : (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'", + ' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' O4 ', ' C5 ', ' C6 ', + None, None, None), + 'DX': (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'", None, None, None, None, None, None, None, None, None, None, None), #dna_mask + 'X': (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'", None, None, None, None, None, None, None, None, None, None, None), #rna mask } """Canonical ordering of amino acid atom names in the CCD.""" @@ -210,3 +241,70 @@ "MACROLIDE", "POLYDEOXYRIBONUCLEOTIDE/POLYRIBONUCLEOTIDE HYBRID", ] + +backbone_atomscheme_DNA = [' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'"]#, None] + +backbone_atomscheme_RNA = [' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'"] + +DNA_atoms = { + 'DA': [' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' N6 ', ' N1 ', ' C2 ', ' N3 ', ' C4 '], + 'DC': [' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' N4 ', ' C5 ', ' C6 '], + 'DG': [' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' O6 ', ' N1 ', ' C2 ', ' N2 ', ' N3 ', ' C4 '], + 'DT': [' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' O4 ', ' C5 ', ' C7 ', ' C6 ']} + +RNA_atoms = { + 'A': [' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' N6 ', ' N1 ', ' C2 ', ' N3 ', ' C4 '], + 'C': [' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' N4 ', ' C5 ', ' C6 '], + 'G': [' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' O6 ', ' N1 ', ' C2 ', ' N2 ', ' N3 ', ' C4 '], + 'U': [' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' O4 ', ' C5 ', ' C6 '] +} + +association_schemes['atom23'] = {} +for item in DNA_atoms: + association_schemes['atom23'][item] = tuple(backbone_atomscheme_DNA + DNA_atoms[item]+ [None]*(22 - len(DNA_atoms[item] + backbone_atomscheme_DNA))) +for item in RNA_atoms: + association_schemes['atom23'][item] = tuple(backbone_atomscheme_RNA + RNA_atoms[item]+ [None]*(23 - len(RNA_atoms[item] + backbone_atomscheme_RNA))) + +for item in association_schemes['dense']: + association_schemes['atom23'][item] = association_schemes['dense'][item] + +association_schemes['atom23']['DX'] = (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'", None, None, None, None, None, None, None, None, None, None, None) #rna_mask +association_schemes['atom23']['X'] = (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'", None, None, None, None, None, None, None, None, None, None, None)#rna mask + +ATOM23_ATOM_NAMES_RNA = np.array( + [item.strip() for item in backbone_atomscheme_RNA] + [f"V{i}" for i in range(23 - len(backbone_atomscheme_RNA))] +) +"""Atom23 atom names (e.g. CA, V1)""" + +ATOM23_ATOM_ELEMENTS_RNA = np.array( + ["P", "O", "O", "O", "C", "C", "O", "C","O", "C", "O", "C"] + [VIRTUAL_ATOM_ELEMENT_NAME for i in range(23 - len(backbone_atomscheme_RNA))] +) +"""Atom23 element names (e.g. C, VX)""" + +ATOM23_ATOM_NAME_TO_ELEMENT = { + name: elem for name, elem in zip(ATOM23_ATOM_NAMES_RNA, ATOM23_ATOM_ELEMENTS_RNA) +} +ATOM23_ATOM_NAMES_DNA = np.array( + [item.strip() for item in backbone_atomscheme_DNA] + [f"V{i}" for i in range(22 - len(backbone_atomscheme_DNA))] +) +"""Atom23 atom names (e.g. CA, V1)""" + +ATOM23_ATOM_ELEMENTS_DNA = np.array( + ["P", "O", "O", "O", "C", "C", "O", "C","O", "C", "C"] + [VIRTUAL_ATOM_ELEMENT_NAME for i in range(22 - len(backbone_atomscheme_DNA))] +) +"""Atom23 element names (e.g. C, VX)""" + + +"""Mapping from atom14 atom names (e.g. CA, V1) to their corresponding element names (e.g. C, VX)""" +## combining name to element mapping, should be fine +for item in ATOM14_ATOM_NAME_TO_ELEMENT: + ATOM23_ATOM_NAME_TO_ELEMENT[item] = ATOM14_ATOM_NAME_TO_ELEMENT[item] + +association_schemes_stripped = { + name: {k: strip_list(v) for k, v in scheme.items()} + for name, scheme in association_schemes.items() +} + +backbone_atoms_RNA = strip_list(backbone_atomscheme_RNA) +backbone_atoms_DNA = strip_list(backbone_atomscheme_DNA) + diff --git a/models/rfd3/src/rfd3/transforms/conditioning_base.py b/models/rfd3/src/rfd3/transforms/conditioning_base.py index 01a303c4..3a551a58 100644 --- a/models/rfd3/src/rfd3/transforms/conditioning_base.py +++ b/models/rfd3/src/rfd3/transforms/conditioning_base.py @@ -235,6 +235,7 @@ def __init__( train_conditions: dict, meta_conditioning_probabilities: dict, sequence_encoding, + association_scheme, ): if exists(train_conditions): train_conditions = hydra.utils.instantiate( @@ -243,6 +244,7 @@ def __init__( self.meta_conditioning_probabilities = meta_conditioning_probabilities self.train_conditions = train_conditions self.sequence_encoding = sequence_encoding + self.association_scheme = association_scheme def check_input(self, data: dict): assert not data["is_inference"], "This transform is only used during training!" @@ -278,6 +280,8 @@ def forward(self, data): i_cond = np.random.choice(np.arange(len(p_cond)), p=p_cond) cond = valid_conditions[i_cond] + cond.association_scheme = self.association_scheme + data["sampled_condition"] = cond data["sampled_condition_name"] = cond.name data["sampled_condition_cls"] = cond.__class__ @@ -295,6 +299,8 @@ class SampleConditioningFlags(Transform): "AssignTypes", "SampleConditioningType", ] # We use is_protein in the PPI training condition + def __init__(self, association_scheme): + self.association_scheme = association_scheme def check_input(self, data): assert not data[ @@ -317,13 +323,14 @@ class UnindexFlaggedTokens(Transform): Serves as the merge point between training / infernece conditioning pipelines """ - def __init__(self, central_atom): + def __init__(self, central_atom, association_scheme): """ Args: central_atom: The atom to use as the central atom for unindexed motifs. """ super().__init__() self.central_atom = central_atom + self.association_scheme = association_scheme def check_input(self, data: dict): check_contains_keys(data, ["atom_array"]) @@ -368,8 +375,16 @@ def expand_unindexed_motifs( token.res_id = token.res_id + max_resid token.is_C_terminus[:] = False token.is_N_terminus[:] = False - assert token.is_protein.all(), f"Cannot unindex non-protein token: {token}" - token = add_representative_atom(token, central_atom=self.central_atom) + + if association_scheme is not 'atom23': + assert token.is_protein.all(), f"Cannot unindex non-protein token: {token} unless using atom23 association scheme" + token = add_representative_atom(token, central_atom=self.central_atom) + else: + if token.is_protein.all(): + token = add_representative_atom(token, central_atom=self.central_atom) + else: + token = add_representative_atom(token, central_atom="C1'") + unindexed_tokens.append(token) # ... Remove original tokens e.g. during inference diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index 38c79979..8225bcc9 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -697,6 +697,7 @@ def __init__( token_1d_features, atom_1d_features, autofill_zeros_if_not_present_in_atomarray=False, + association_scheme='atom14' ): self.autofill = autofill_zeros_if_not_present_in_atomarray self.token_1d_features = token_1d_features @@ -752,6 +753,11 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: """ if "feats" not in data.keys(): data["feats"] = {} + + if association_scheme == 'atom23': + data['atom_array'].set_annotation('is_protein_token', data['atom_array'].is_protein) + data['atom_array'].set_annotation('is_dna_token', data['atom_array'].is_dna) + data['atom_array'].set_annotation('is_rna_token', data['atom_array'].is_rna) for feature_name, n_dims in self.token_1d_features.items(): data = self.generate_feature(feature_name, n_dims, data, "token") diff --git a/models/rfd3/src/rfd3/transforms/pipelines.py b/models/rfd3/src/rfd3/transforms/pipelines.py index 89bc7289..fff8685c 100644 --- a/models/rfd3/src/rfd3/transforms/pipelines.py +++ b/models/rfd3/src/rfd3/transforms/pipelines.py @@ -383,6 +383,7 @@ def build_atom14_base_pipeline_( train_conditions=train_conditions, meta_conditioning_probabilities=meta_conditioning_probabilities, sequence_encoding=af3_sequence_encoding, + association_scheme=association_scheme ), ), ] @@ -422,7 +423,7 @@ def build_atom14_base_pipeline_( # ... Add global token features (since number of tokens is fixed after cropping) transforms.append(AddGlobalTokenIdAnnotation()) # ... Create masks (NOTE: Modulates token count, and resets global token id if necessary) - transforms.append(TrainingRoute(SampleConditioningFlags())) + transforms.append(TrainingRoute(SampleConditioningFlags(association_scheme=association_scheme))) # Post-crop transforms transforms.append( @@ -518,6 +519,7 @@ def build_atom14_base_pipeline_( autofill_zeros_if_not_present_in_atomarray=True, token_1d_features=token_1d_features, atom_1d_features=atom_1d_features, + association_scheme=association_scheme ), AddAF3TokenBondFeatures(), AddGroundTruthSequence(sequence_encoding=af3_sequence_encoding), diff --git a/models/rfd3/src/rfd3/transforms/training_conditions.py b/models/rfd3/src/rfd3/transforms/training_conditions.py index f93e346f..8f708e0a 100644 --- a/models/rfd3/src/rfd3/transforms/training_conditions.py +++ b/models/rfd3/src/rfd3/transforms/training_conditions.py @@ -70,9 +70,11 @@ def __init__( p_fix_motif_coordinates, p_fix_motif_sequence, p_unindex_motif_tokens, + association_scheme = 'atom14', ): self.name = name self.frequency = frequency + self.association_scheme = association_scheme # Token selection self.island_sampling_kwargs = island_sampling_kwargs @@ -87,11 +89,21 @@ def __init__( self.p_fix_motif_coordinates = p_fix_motif_coordinates self.p_fix_motif_sequence = p_fix_motif_sequence self.p_unindex_motif_tokens = p_unindex_motif_tokens + + self.association_scheme = association_scheme def is_valid_for_example(self, data) -> bool: is_protein = data["atom_array"].is_protein - if not np.any(is_protein): - return False + is_dna = data["atom_array"].is_dna + is_rna = data["atom_array"].is_rna + ### updating this to allow other polymers + if self.association_scheme is not 'atom23': + if not np.any(is_protein | is_dna | is_rna): + return False + else: + if not np.any(is_protein): + return False + return True def sample_motif_tokens(self, atom_array): @@ -101,13 +113,24 @@ def sample_motif_tokens(self, atom_array): token_level_array = atom_array[get_token_starts(atom_array)] # initialize motif tokens as all non-protein tokens - is_motif_token = np.asarray(~token_level_array.is_protein, dtype=bool).copy() - n_protein_tokens = np.sum(token_level_array.is_protein) - islands_mask = sample_island_tokens( - n_protein_tokens, - **self.island_sampling_kwargs, - ) - is_motif_token[token_level_array.is_protein] = islands_mask + if self.association_scheme is 'atom23': + polymer_mask = (token_level_array.is_protein | token_level_array.is_dna | token_level_array.is_rna) + is_motif_token = np.asarray(~polymer_mask, dtype=bool).copy() + n_polymer_tokens = np.sum(polymer_mask) + islands_mask = sample_island_tokens( + n_polymer_tokens, + **self.island_sampling_kwargs, + ) + is_motif_token[polymer_mask] = islands_mask + else: + is_motif_token = np.asarray(~token_level_array.is_protein, dtype=bool).copy() + n_protein_tokens = np.sum(token_level_array.is_protein) + + slands_mask = sample_island_tokens( + _protein_tokens, + *self.island_sampling_kwargs, + + is_motif_token[token_level_array.is_protein] = islands_mask # TODO: Atoms with covalent bonds should be motif, needs FlagAndReassignCovalentModifications transform prior to this # atom_with_coval_bond = token_level_array.covale # (n_atoms, ) @@ -137,6 +160,7 @@ def sample_motif_atoms(self, atom_array): is_motif_atom = sample_motif_subgraphs( atom_array=atom_array, **self.subgraph_sampling_kwargs, + association_scheme=self.association_scheme ) # We also only want resolved atoms to be motif @@ -158,6 +182,7 @@ def sample(self, data): p_fix_motif_sequence=self.p_fix_motif_sequence, p_fix_motif_coordinates=self.p_fix_motif_coordinates, p_unindex_motif_tokens=self.p_unindex_motif_tokens, + association_scheme=self.association_scheme ) atom_array.set_annotation( @@ -177,6 +202,7 @@ class PPICondition(TrainingCondition): """Get condition indicating what is motif and what is to be diffused for protein-protein interaction training.""" name = "ppi" + association_scheme = 'atom14' def is_valid_for_example(self, data): # Extract relevant data @@ -275,6 +301,7 @@ class SubtypeCondition(TrainingCondition): """ name = "subtype" + association_scheme = 'atom14' def __init__(self, frequency: float, subtype: list[str], fix_pos: bool = False): self.frequency = frequency @@ -370,6 +397,7 @@ def sample_motif_subgraphs( hetatom_n_bond_expectation, residue_p_fix_all, hetatom_p_fix_all, + association_scheme = 'atom14' ): """ Returns a boolean mask over atoms, indicating which atoms are part of the sampled motif. @@ -402,7 +430,13 @@ def sample_motif_subgraphs( "n_bond_expectation": residue_n_bond_expectation, "p_fix_all": residue_p_fix_all, } - if not atom_array_subset.is_protein.all(): + + if association_scheme is 'atom23': + clause = atom_array_subset.is_protein.all() | atom_array_subset.is_dna.all() | atom_array_subset.is_rna.all() + else: + clause = atom_array_subset.is_potein.all() + + if not clause: args.update( { "p_seed_furthest_from_o": 0.0, @@ -431,11 +465,12 @@ def sample_conditioning_strategy( p_fix_motif_sequence, p_fix_motif_coordinates, p_unindex_motif_tokens, + association_scheme ): atom_array.set_annotation( "is_motif_atom_with_fixed_seq", sample_is_motif_atom_with_fixed_seq( - atom_array, p_fix_motif_sequence=p_fix_motif_sequence + atom_array, p_fix_motif_sequence=p_fix_motif_sequence, association_scheme=association_scheme ), ) @@ -456,7 +491,7 @@ def sample_conditioning_strategy( return atom_array -def sample_is_motif_atom_with_fixed_seq(atom_array, p_fix_motif_sequence): +def sample_is_motif_atom_with_fixed_seq(atom_array, p_fix_motif_sequence, association_scheme): """ Samples what kind of conditioning to apply to motif tokens. @@ -469,7 +504,11 @@ def sample_is_motif_atom_with_fixed_seq(atom_array, p_fix_motif_sequence): is_motif_atom_with_fixed_seq = np.zeros(atom_array.array_length(), dtype=bool) # By default reveal sequence for non-protein - is_motif_atom_with_fixed_seq = is_motif_atom_with_fixed_seq | ~atom_array.is_protein + + if association_scheme is not 'atom23': + is_motif_atom_with_fixed_seq = is_motif_atom_with_fixed_seq | ~atom_array.is_protein + + return is_motif_atom_with_fixed_seq @@ -487,7 +526,7 @@ def sample_fix_motif_coordinates(atom_array, p_fix_motif_coordinates): return is_motif_atom_with_fixed_coord -def sample_unindexed_atoms(atom_array, p_unindex_motif_tokens): +def sample_unindexed_atoms(atom_array, p_unindex_motif_tokens, association_scheme='atom14'): """ Samples which atoms in motif tokens should be flagged for unindexing. @@ -500,9 +539,15 @@ def sample_unindexed_atoms(atom_array, p_unindex_motif_tokens): is_motif_atom_unindexed = np.zeros(atom_array.array_length(), dtype=bool) # ensure non-residue atoms are not already flagged - is_motif_atom_unindexed = np.logical_and( - is_motif_atom_unindexed, atom_array.is_residue - ) + if association_scheme == 'atom23': + is_motif_atom_unindexed = np.logical_and( + is_motif_atom_unindexed, (atom_array.is_residue | atom_array.is_dna | atom_array.is_rna) + ) # is_residue refers to is_protein here + else: + is_motif_atom_unindexed = np.logical_and( + is_motif_atom_unindexed, atom_array.is_residue + ) + return is_motif_atom_unindexed diff --git a/models/rfd3/src/rfd3/transforms/util_transforms.py b/models/rfd3/src/rfd3/transforms/util_transforms.py index 024b1bf1..75d69ddf 100644 --- a/models/rfd3/src/rfd3/transforms/util_transforms.py +++ b/models/rfd3/src/rfd3/transforms/util_transforms.py @@ -252,13 +252,13 @@ def get_af3_token_representative_masks( atom_array: AtomArray, central_atom: str = "CA" ) -> np.ndarray: pyrimidine_representative_atom = is_pyrimidine(atom_array.res_name) & ( - atom_array.atom_name == "C2" + atom_array.atom_name == "C1'" ) purine_representative_atom = is_purine(atom_array.res_name) & ( - atom_array.atom_name == "C4" + atom_array.atom_name == "C1'" ) unknown_na_representative_atom = is_unknown_nucleotide(atom_array.res_name) & ( - atom_array.atom_name == "C4" + atom_array.atom_name == "C1'" ) glycine_representative_atom = is_glycine(atom_array.res_name) & ( diff --git a/models/rfd3/src/rfd3/transforms/virtual_atoms.py b/models/rfd3/src/rfd3/transforms/virtual_atoms.py index ae40b3ce..fbc8c743 100644 --- a/models/rfd3/src/rfd3/transforms/virtual_atoms.py +++ b/models/rfd3/src/rfd3/transforms/virtual_atoms.py @@ -10,8 +10,11 @@ ) from atomworks.ml.utils.token import get_token_starts from rfd3.constants import ( + ATOM23_ATOM_NAME_TO_ELEMENT, ATOM14_ATOM_NAME_TO_ELEMENT, ATOM14_ATOM_NAMES, + ATOM23_ATOM_NAMES_RNA, + ATOM23_ATOM_NAMES_DNA, VIRTUAL_ATOM_ELEMENT_NAME, association_schemes, association_schemes_stripped, @@ -28,7 +31,7 @@ from foundry.common import exists -def map_to_association_scheme(atom_names: list | str, res_name: str, scheme="atom14"): +def map_to_association_scheme(atom_names: list | str, res_name: str, scheme="atom14", ATOM_NAMES=None): """ Maps a list of names to the atom14 naming scheme for that particular name (within a specific residue) NB this function is a bit more general since it is used to handle tipatoms too. @@ -37,17 +40,17 @@ def map_to_association_scheme(atom_names: list | str, res_name: str, scheme="ato raise ValueError( f"Scheme {scheme} not found in association_schemes_stripped. Available schemes: {list(association_schemes_stripped.keys())}" ) - atom_names = ( - [str(atom_names)] if isinstance(atom_names, (str, np.str_)) else atom_names - ) + atom_names = [atom_names] if isinstance(atom_names, str) else atom_names idxs = np.array( [ association_schemes_stripped[scheme][res_name].index(name) for name in atom_names ] ) - return ATOM14_ATOM_NAMES[idxs] - + if ATOM_NAMES is None: + return ATOM14_ATOM_NAMES[idxs] + else: + return ATOM_NAMES[idxs] def map_names_to_elements( atom_names: list | str, default=VIRTUAL_ATOM_ELEMENT_NAME @@ -68,17 +71,17 @@ def generate_atom_mappings_(scheme="atom14"): atom_mapping = {} symmetry_mapping = {} - for aaa, atom14_names in ccd_ordering_atomchar.items(): - mapping = list(range(14)) + for aaa, atom_names in ccd_ordering_atomchar.items(): + mapping = list(range(len(atom_names))) scheme_names = scheme[aaa] - for ccd_index in range(len(atom14_names)): - atom14_name = atom14_names[ccd_index] - if atom14_name is not None: + for ccd_index in range(len(atom_names)): + atom_name = atom_names[ccd_index] + if atom_name is not None: assert ( - atom14_name in scheme_names - ), f"{atom14_name} not in CCD ordering for {aaa}" - scheme_index = scheme_names.index(atom14_name) + atom_name in scheme_names + ), f"{atom_name} not in CCD ordering for {aaa}" + scheme_index = scheme_names.index(atom_name) scheme_index_in_cur_mapping = mapping.index(scheme_index) mapping[ccd_index], mapping[scheme_index_in_cur_mapping] = ( mapping[scheme_index_in_cur_mapping], @@ -121,6 +124,12 @@ def permute_symmetric_atom_names_( ) -> list: # NB: Can leak GT sequence if the model receives the canconical ordering of atoms as input # With the structure-local atom attention it will not unless N_keys(n_attn_seq_neighbours) > n_atom_attn_queries. + + ## fail safe, no symmetry confusion in NA bases ## + if (atom_names[0] == "P"): + return atom_names + ################################################## + if res_name in association_map: idx_to_swap = association_map[res_name] atom_names = atom_names[idx_to_swap] @@ -171,20 +180,38 @@ def forward(self, data: dict) -> dict: token_ids = np.unique(atom_array.token_id) assert len(token_ids) == len( is_motif_atom_with_fixed_seq - ), "Token ids and token level array have different lengths!" - - # Unindexed tokens are never fully atomized, but may be assigned as atomized to have repr atoms: - is_residue = ( - token_level_array.is_protein & ~token_level_array.atomize - ) | is_motif_token_unindexed + ), "Token ids and token level array have different lengths!" + + # Unindexed tokens are never fully atomized, but may be assigned as atomized to have repr atoms: + if self.association_scheme == 'atom23': + is_residue = ( + token_level_array.is_protein & ~token_level_array.atomize + ) | is_motif_token_unindexed + + is_residue_NA = ( + (token_level_array.is_dna | token_level_array.is_rna) & ~token_level_array.atomize + ) | is_motif_token_unindexed + + # Unindexed tokens are never padded, and so are treated as residues with fixed sequence. + is_paddable = (is_residue_NA | is_residue) & ~( + is_motif_atom_with_fixed_seq | is_motif_token_unindexed + ) + is_non_paddable_residue = (is_residue_NA | is_residue) & ( + is_motif_atom_with_fixed_seq | is_motif_token_unindexed + ) + else: + is_residue = ( + token_level_array.is_protein & ~token_level_array.atomize + ) | is_motif_token_unindexed - # Unindexed tokens are never padded, and so are treated as residues with fixed sequence. - is_paddable = is_residue & ~( - is_motif_atom_with_fixed_seq | is_motif_token_unindexed - ) - is_non_paddable_residue = is_residue & ( - is_motif_atom_with_fixed_seq | is_motif_token_unindexed - ) + # Unindexed tokens are never padded, and so are treated as residues with fixed sequence. + is_paddable = is_residue & ~( + is_motif_atom_with_fixed_seq | is_motif_token_unindexed + ) + is_non_paddable_residue = is_residue & ( + is_motif_atom_with_fixed_seq | is_motif_token_unindexed + ) + # Collect virtual atoms to insert (we will insert them all at once) virtual_atoms_to_insert = [] @@ -194,8 +221,16 @@ def forward(self, data: dict) -> dict: for token_id, (start, end) in enumerate(zip(starts[:-1], starts[1:])): if is_paddable[token_id]: token = atom_array[start:end] + # First, pad with virtual atoms if needed - n_pad = self.n_atoms_per_token - len(token) + if self.association_scheme == "atom23" and atom_array[start].is_dna: + n_atoms_per_token = 22 + elif self.association_scheme == "atom23" and atom_array[start].is_rna: + n_atoms_per_token = 23 + else: + n_atoms_per_token = self.n_atoms_per_token + n_pad = n_atoms_per_token - len(token) + if n_pad > 0: mask = get_af3_token_representative_masks( token, central_atom=self.atom_to_pad_from @@ -262,18 +297,26 @@ def _fix_multidimensional_annotations_in_pad_array( for token_id, (start, end) in enumerate( zip(starts_padded[:-1], starts_padded[1:]) - ): + ): + if (atom_array_padded[start].is_dna): + ATOM_NAMES = ATOM23_ATOM_NAMES_DNA + elif (atom_array_padded[start].is_rna): + ATOM_NAMES = ATOM23_ATOM_NAMES_RNA + else: + ATOM_NAMES = ATOM14_ATOM_NAMES + if is_paddable[token_id]: # ... Permutation of atom names during training if not data["is_inference"] and exists(self.association_scheme): atom_names = permute_symmetric_atom_names_( - ATOM14_ATOM_NAMES, + ATOM_NAMES, atom_array_padded.res_name[start], association_map=self.association_map_, symmetry_map=self.symmetry_map_, ) else: - atom_names = ATOM14_ATOM_NAMES + atom_names = ATOM_NAMES + atom_array_padded.atom_name[start:end] = atom_names atom_array_padded.get_annotation("gt_atom_name")[start:end] = atom_names @@ -285,7 +328,7 @@ def _fix_multidimensional_annotations_in_pad_array( ) atom_array_padded.get_annotation("gt_atom_name")[start:end] = atom_names atom_names = map_to_association_scheme( - atom_names, res_name, scheme=self.association_scheme + atom_names, res_name, scheme=self.association_scheme, ATOM_NAMES=ATOM_NAMES ) atom_array_padded.atom_name[start:end] = atom_names else: From ebec466e4f4397b9bdc52b841ae024149f5b335a Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Tue, 20 Jan 2026 14:44:19 -0800 Subject: [PATCH 04/49] feat: atom23 inference changes and training fixes --- .../rfd3/configs/datasets/train/pdb/base.yaml | 2 +- models/rfd3/configs/experiment/rfd3na.yaml | 82 ++++++++ models/rfd3/src/rfd3/constants.py | 180 +++++++++++++++--- .../rfd3/src/rfd3/inference/input_parsing.py | 68 +++++-- .../rfd3/inference/legacy_input_parsing.py | 82 +++++++- models/rfd3/src/rfd3/trainer/rfd3.py | 11 +- models/rfd3/src/rfd3/trainer/trainer_utils.py | 32 +++- .../src/rfd3/transforms/conditioning_base.py | 11 +- .../src/rfd3/transforms/design_transforms.py | 15 +- models/rfd3/src/rfd3/transforms/pipelines.py | 12 +- .../rfd3/transforms/training_conditions.py | 81 ++++---- .../rfd3/src/rfd3/transforms/virtual_atoms.py | 48 +++-- src/foundry/utils/components.py | 18 +- 13 files changed, 528 insertions(+), 114 deletions(-) create mode 100644 models/rfd3/configs/experiment/rfd3na.yaml diff --git a/models/rfd3/configs/datasets/train/pdb/base.yaml b/models/rfd3/configs/datasets/train/pdb/base.yaml index d3f45628..9c0a8c87 100644 --- a/models/rfd3/configs/datasets/train/pdb/base.yaml +++ b/models/rfd3/configs/datasets/train/pdb/base.yaml @@ -9,6 +9,6 @@ weights: beta: 0.5 alphas: a_prot: 3.0 # 3 for AF-3 - a_nuc: 0.0 # 3 for AF-3 + a_nuc: 3.0 # 3 for AF-3 a_ligand: 1.0 # 1 for AF-3 a_loi: 5.0 # 5 for AF-3 diff --git a/models/rfd3/configs/experiment/rfd3na.yaml b/models/rfd3/configs/experiment/rfd3na.yaml new file mode 100644 index 00000000..6d807209 --- /dev/null +++ b/models/rfd3/configs/experiment/rfd3na.yaml @@ -0,0 +1,82 @@ +# @package _global_ +# Training configuration for RFD3 + +defaults: + - /debug/default + - override /model: rfd3_base + #- override /datasets: all + - override /logger: csv + #- override /logger: wandb + - _self_ + +name: train-base +tags: [print-model] +ckpt_path: null + +model: + net: + token_initializer: + token_1d_features: + ref_motif_token_type: 3 + restype: 32 + is_dna_token: 1 + is_rna_token: 1 + is_protein_token: 1 + atom_1d_features: + ref_atom_name_chars: 256 + ref_element: 128 + ref_charge: 1 + ref_mask: 1 + ref_is_motif_atom_with_fixed_coord: 1 + ref_is_motif_atom_unindexed: 1 + has_zero_occupancy: 1 + ref_pos: 3 + + # Guided features + ref_atomwise_rasa: 3 + active_donor: 1 + active_acceptor: 1 + is_atom_level_hotspot: 1 + diffusion_module: + n_recycle: 2 + use_local_token_attention: True + diffusion_transformer: + n_local_tokens: 32 + n_keys: 128 + + inference_sampler: + num_timesteps: 100 + + +datasets: + diffusion_batch_size_train: 16 + crop_size: 256 + max_atoms_in_crop: 2560 # ~10x crop size. + global_transform_args: + association_scheme: atom23 + train_conditions: + unconditional: + frequency: 2.0 + island: + frequency: 2.0 + sequence_design: + frequency: 0.5 + tipatom: + frequency: 5.0 + ppi: + frequency: 0.0 + train: + # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. + #pdb: + #probability: 0.10 + #monomer_distillation: + #probability: 0.90 + pdb: + probability: 1.0 + +trainer: + devices_per_node: 1 + limit_train_batches: 10 + limit_val_batches: 1 + validate_every_n_epochs: 5 + prevalidate: false diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index a1a6e484..529ca581 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -242,42 +242,171 @@ "POLYDEOXYRIBONUCLEOTIDE/POLYRIBONUCLEOTIDE HYBRID", ] -backbone_atomscheme_DNA = [' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'"]#, None] - -backbone_atomscheme_RNA = [' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'"] +backbone_atomscheme_DNA = [ + " P ", + " OP1", + " OP2", + " O5'", + " C5'", + " C4'", + " O4'", + " C3'", + " O3'", + " C2'", + " C1'", +] # , None] + +backbone_atomscheme_RNA = [ + " P ", + " OP1", + " OP2", + " O5'", + " C5'", + " C4'", + " O4'", + " C3'", + " O3'", + " C2'", + " O2'", + " C1'", +] DNA_atoms = { - 'DA': [' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' N6 ', ' N1 ', ' C2 ', ' N3 ', ' C4 '], - 'DC': [' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' N4 ', ' C5 ', ' C6 '], - 'DG': [' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' O6 ', ' N1 ', ' C2 ', ' N2 ', ' N3 ', ' C4 '], - 'DT': [' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' O4 ', ' C5 ', ' C7 ', ' C6 ']} + "DA": [ + " N9 ", + " C8 ", + " N7 ", + " C5 ", + " C6 ", + " N6 ", + " N1 ", + " C2 ", + " N3 ", + " C4 ", + ], + "DC": [" N1 ", " C2 ", " O2 ", " N3 ", " C4 ", " N4 ", " C5 ", " C6 "], + "DG": [ + " N9 ", + " C8 ", + " N7 ", + " C5 ", + " C6 ", + " O6 ", + " N1 ", + " C2 ", + " N2 ", + " N3 ", + " C4 ", + ], + "DT": [" N1 ", " C2 ", " O2 ", " N3 ", " C4 ", " O4 ", " C5 ", " C7 ", " C6 "], +} RNA_atoms = { - 'A': [' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' N6 ', ' N1 ', ' C2 ', ' N3 ', ' C4 '], - 'C': [' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' N4 ', ' C5 ', ' C6 '], - 'G': [' N9 ', ' C8 ', ' N7 ', ' C5 ', ' C6 ', ' O6 ', ' N1 ', ' C2 ', ' N2 ', ' N3 ', ' C4 '], - 'U': [' N1 ', ' C2 ', ' O2 ', ' N3 ', ' C4 ', ' O4 ', ' C5 ', ' C6 '] + "A": [ + " N9 ", + " C8 ", + " N7 ", + " C5 ", + " C6 ", + " N6 ", + " N1 ", + " C2 ", + " N3 ", + " C4 ", + ], + "C": [" N1 ", " C2 ", " O2 ", " N3 ", " C4 ", " N4 ", " C5 ", " C6 "], + "G": [ + " N9 ", + " C8 ", + " N7 ", + " C5 ", + " C6 ", + " O6 ", + " N1 ", + " C2 ", + " N2 ", + " N3 ", + " C4 ", + ], + "U": [" N1 ", " C2 ", " O2 ", " N3 ", " C4 ", " O4 ", " C5 ", " C6 "], } -association_schemes['atom23'] = {} +association_schemes["atom23"] = {} for item in DNA_atoms: - association_schemes['atom23'][item] = tuple(backbone_atomscheme_DNA + DNA_atoms[item]+ [None]*(22 - len(DNA_atoms[item] + backbone_atomscheme_DNA))) + association_schemes["atom23"][item] = tuple( + backbone_atomscheme_DNA + + DNA_atoms[item] + + [None] * (22 - len(DNA_atoms[item] + backbone_atomscheme_DNA)) + ) for item in RNA_atoms: - association_schemes['atom23'][item] = tuple(backbone_atomscheme_RNA + RNA_atoms[item]+ [None]*(23 - len(RNA_atoms[item] + backbone_atomscheme_RNA))) - -for item in association_schemes['dense']: - association_schemes['atom23'][item] = association_schemes['dense'][item] - -association_schemes['atom23']['DX'] = (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " C1'", None, None, None, None, None, None, None, None, None, None, None) #rna_mask -association_schemes['atom23']['X'] = (' P ', ' OP1', ' OP2', " O5'", " C5'", " C4'", " O4'", " C3'", " O3'", " C2'", " O2'", " C1'", None, None, None, None, None, None, None, None, None, None, None)#rna mask + association_schemes["atom23"][item] = tuple( + backbone_atomscheme_RNA + + RNA_atoms[item] + + [None] * (23 - len(RNA_atoms[item] + backbone_atomscheme_RNA)) + ) + +for item in association_schemes["dense"]: + association_schemes["atom23"][item] = association_schemes["dense"][item] + +association_schemes["atom23"]["DX"] = ( + " P ", + " OP1", + " OP2", + " O5'", + " C5'", + " C4'", + " O4'", + " C3'", + " O3'", + " C2'", + " C1'", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, +) # rna_mask +association_schemes["atom23"]["X"] = ( + " P ", + " OP1", + " OP2", + " O5'", + " C5'", + " C4'", + " O4'", + " C3'", + " O3'", + " C2'", + " O2'", + " C1'", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, +) # rna mask ATOM23_ATOM_NAMES_RNA = np.array( - [item.strip() for item in backbone_atomscheme_RNA] + [f"V{i}" for i in range(23 - len(backbone_atomscheme_RNA))] + [item.strip() for item in backbone_atomscheme_RNA] + + [f"V{i}" for i in range(23 - len(backbone_atomscheme_RNA))] ) """Atom23 atom names (e.g. CA, V1)""" ATOM23_ATOM_ELEMENTS_RNA = np.array( - ["P", "O", "O", "O", "C", "C", "O", "C","O", "C", "O", "C"] + [VIRTUAL_ATOM_ELEMENT_NAME for i in range(23 - len(backbone_atomscheme_RNA))] + ["P", "O", "O", "O", "C", "C", "O", "C", "O", "C", "O", "C"] + + [VIRTUAL_ATOM_ELEMENT_NAME for i in range(23 - len(backbone_atomscheme_RNA))] ) """Atom23 element names (e.g. C, VX)""" @@ -285,12 +414,14 @@ name: elem for name, elem in zip(ATOM23_ATOM_NAMES_RNA, ATOM23_ATOM_ELEMENTS_RNA) } ATOM23_ATOM_NAMES_DNA = np.array( - [item.strip() for item in backbone_atomscheme_DNA] + [f"V{i}" for i in range(22 - len(backbone_atomscheme_DNA))] + [item.strip() for item in backbone_atomscheme_DNA] + + [f"V{i}" for i in range(22 - len(backbone_atomscheme_DNA))] ) """Atom23 atom names (e.g. CA, V1)""" ATOM23_ATOM_ELEMENTS_DNA = np.array( - ["P", "O", "O", "O", "C", "C", "O", "C","O", "C", "C"] + [VIRTUAL_ATOM_ELEMENT_NAME for i in range(22 - len(backbone_atomscheme_DNA))] + ["P", "O", "O", "O", "C", "C", "O", "C", "O", "C", "C"] + + [VIRTUAL_ATOM_ELEMENT_NAME for i in range(22 - len(backbone_atomscheme_DNA))] ) """Atom23 element names (e.g. C, VX)""" @@ -307,4 +438,3 @@ backbone_atoms_RNA = strip_list(backbone_atomscheme_RNA) backbone_atoms_DNA = strip_list(backbone_atomscheme_DNA) - diff --git a/models/rfd3/src/rfd3/inference/input_parsing.py b/models/rfd3/src/rfd3/inference/input_parsing.py index d97b3be3..b3117fcc 100644 --- a/models/rfd3/src/rfd3/inference/input_parsing.py +++ b/models/rfd3/src/rfd3/inference/input_parsing.py @@ -30,9 +30,12 @@ OPTIONAL_CONDITIONING_VALUES, REQUIRED_CONDITIONING_ANNOTATION_VALUES, REQUIRED_INFERENCE_ANNOTATIONS, + backbone_atoms_DNA, + backbone_atoms_RNA, ) from rfd3.inference.legacy_input_parsing import ( create_atom_array_from_design_specification_legacy, + reorder_atoms_per_residue, ) from rfd3.inference.parsing import InputSelection from rfd3.inference.symmetry.symmetry_utils import ( @@ -67,7 +70,6 @@ logger = RankedLogger(__name__, rank_zero_only=True) - ################################################################################# # Custom infer_ori functions ################################################################################# @@ -505,6 +507,21 @@ def apply_selections(start, end): def build(self, return_metadata=False): """Main build pipeline.""" atom_array_input_annotated = copy.deepcopy(self.atom_array_input) + + ########## reorder NA atoms ########### + is_dna = np.isin(atom_array_input_annotated.res_name, ["DA", "DC", "DG", "DT"]) + is_rna = np.isin(atom_array_input_annotated.res_name, ["A", "C", "G", "U"]) + dna_array = atom_array_input_annotated[is_dna] + rna_array = atom_array_input_annotated[is_rna] + + atom_array_input_annotated[is_dna] = reorder_atoms_per_residue( + dna_array, backbone_atoms_DNA + ) + atom_array_input_annotated[is_rna] = reorder_atoms_per_residue( + rna_array, backbone_atoms_RNA + ) + ####################################### + atom_array = self._build_init(atom_array_input_annotated) # Apply post-processing @@ -894,31 +911,52 @@ def validator_context(validator_name: str, data: dict = None): raise e -def create_diffused_residues(n, additional_annotations=None): +def create_diffused_residues(n, additional_annotations=None, polymer_type="P"): + from rfd3.constants import ( + ATOM23_ATOM_NAME_TO_ELEMENT, + backbone_atoms_DNA, + backbone_atoms_RNA, + ) + if n <= 0: raise ValueError(f"Negative/null residue count ({n}) not allowed.") + if polymer_type == "P": + res_name = "ALA" + bb_len = 5 + bb_atom_names = ["N", "CA", "C", "O", "CB"] + elif polymer_type == "R": + res_name = "A" + bb_len = len(backbone_atoms_RNA) + bb_atom_names = strip_list(backbone_atoms_RNA) + elif polymer_type == "D": + res_name = "DA" + bb_len = len(backbone_atoms_DNA) + bb_atom_names = strip_list(backbone_atoms_DNA) + else: + raise ValueError( + f"invalid polymer type detected: {polymer_type}, check contig!" + ) + + bb_elements = [ATOM23_ATOM_NAME_TO_ELEMENT[item] for item in bb_atom_names] + atoms = [] [ atoms.extend( [ struc.Atom( np.array([0.0, 0.0, 0.0], dtype=np.float32), - res_name="ALA", + res_name=res_name, res_id=idx, ) - for _ in range(5) + for _ in range(bb_len) ] ) for idx in range(1, n + 1) ] array = struc.array(atoms) - array.set_annotation( - "element", np.array(["N", "C", "C", "O", "C"] * n, dtype=" AtomArray: + """ + Reorder atoms within each residue of an AtomArray. + Atoms in `desired_order` appear first (in that order), followed by all others + in original order. Faster version using get_residue_starts(). + + Parameters: + - atom_array: AtomArray to reorder. + - desired_order: List of atom names in the desired per-residue order. + + Returns: + - AtomArray with reordered atoms per residue. + """ + if len(atom_array) == 0: + return atom_array + res_starts = get_residue_starts(atom_array) + res_starts = np.append(res_starts, len(atom_array)) # add end index for slicing + reordered_chunks = [] + order_dict = {name: i for i, name in enumerate(desired_order)} + + for i in range(len(res_starts) - 1): + start, end = res_starts[i], res_starts[i + 1] + residue = atom_array[start:end] + + # Boolean masks for matching and non-matching atom names + in_order_mask = np.isin(residue.atom_name, desired_order) + not_in_order_mask = ~in_order_mask + + # Sort matching atoms by desired order + atoms_in_order = residue[in_order_mask] + sort_idx = np.argsort([order_dict[name] for name in atoms_in_order.atom_name]) + ordered_atoms = atoms_in_order[sort_idx] + + # Remaining atoms as-is + remaining_atoms = residue[not_in_order_mask] + + # Concatenate reordered residue + reordered_chunks.append(concatenate([ordered_atoms, remaining_atoms])) + return concatenate(reordered_chunks) diff --git a/models/rfd3/src/rfd3/trainer/rfd3.py b/models/rfd3/src/rfd3/trainer/rfd3.py index a7f72e6f..9735978e 100644 --- a/models/rfd3/src/rfd3/trainer/rfd3.py +++ b/models/rfd3/src/rfd3/trainer/rfd3.py @@ -428,9 +428,14 @@ def _build_predicted_atom_array_stack( # ... Delete virtual atoms and assign atom names and elements if self.cleanup_virtual_atoms: - atom_array = _cleanup_virtual_atoms_and_assign_atom_name_elements( - atom_array, association_scheme=self.association_scheme - ) + try: + atom_array = _cleanup_virtual_atoms_and_assign_atom_name_elements( + atom_array, association_scheme=self.association_scheme + ) + except Exception as e: + global_logger.warning( + f"Failed to cleanup virtual atoms from diffusion output: {e}" + ) # ... When cleaning up virtual atoms, we can also calculate native_array_metricsl metadata_dict[i]["metrics"] |= get_all_backbone_metrics( diff --git a/models/rfd3/src/rfd3/trainer/trainer_utils.py b/models/rfd3/src/rfd3/trainer/trainer_utils.py index 59f43a1c..9ee7939b 100644 --- a/models/rfd3/src/rfd3/trainer/trainer_utils.py +++ b/models/rfd3/src/rfd3/trainer/trainer_utils.py @@ -11,6 +11,8 @@ from jaxtyping import Float, Int from rfd3.constants import ( ATOM14_ATOM_NAMES, + ATOM23_ATOM_NAMES_DNA, + ATOM23_ATOM_NAMES_RNA, VIRTUAL_ATOM_ELEMENT_NAME, association_schemes, association_schemes_stripped, @@ -252,13 +254,19 @@ def _readout_seq_from_struc( continue # ... Find the index of virtual atom names in the standard atom14 names + ATOM_NAMES = ATOM14_ATOM_NAMES + if restype in STANDARD_DNA: + ATOM_NAMES = ATOM23_ATOM_NAMES_DNA + if restype in STANDARD_RNA: + ATOM_NAMES = ATOM23_ATOM_NAMES_RNA + atom_name_idx_in_atom14_scheme = np.array( [ - np.where(ATOM14_ATOM_NAMES == atom_name)[0][0] + np.where(ATOM_NAMES == atom_name)[0][0] for atom_name in cur_pred_res_atom_names ] ) # five backbone atoms + some virtual atoms, returning e.g. [0, 1, 2, 3, 4, 11, 7] - atom14_scheme_mask = np.zeros_like(ATOM14_ATOM_NAMES, dtype=bool) + atom14_scheme_mask = np.zeros_like(ATOM_NAMES, dtype=bool) atom14_scheme_mask[atom_name_idx_in_atom14_scheme] = True # ... Find the matched restype by checking if all the non-None posititons and None positions match @@ -427,12 +435,30 @@ def process_unindexed_outputs( else: join_atom = None + if join_atom is None: + pass + else: + dist = float(dists[row_ind[join_atom], col_ind[join_atom]]) + + elif not np.any( + np.isin( + token.atom_name, [item.replace(" ", "") for item in backbone_atoms_RNA] + ) + ): + if np.sum(token.atomize) == 1: + join_atom = np.where(token.atomize)[0][0] + elif "C1'" in token.atom_name: + join_atom = np.where(token.atom_name == "C1'")[0][0] + else: + join_atom = None + if join_atom is None: global_logger.warning( - f"Token {token_pdb_id} does not contain backbone atoms or CB, skipping join point distance calculation {token}." + "Skipping joint point rmsd, neither protein or NA backbone" ) else: dist = float(dists[row_ind[join_atom], col_ind[join_atom]]) + metadata["join_point_rmsd_by_token"][token_pdb_id] = dist metadata["diffused_index_map"][token_pdb_id] = f"{chain_id}{res_id}" diff --git a/models/rfd3/src/rfd3/transforms/conditioning_base.py b/models/rfd3/src/rfd3/transforms/conditioning_base.py index 3a551a58..769fcf46 100644 --- a/models/rfd3/src/rfd3/transforms/conditioning_base.py +++ b/models/rfd3/src/rfd3/transforms/conditioning_base.py @@ -281,7 +281,7 @@ def forward(self, data): cond = valid_conditions[i_cond] cond.association_scheme = self.association_scheme - + data["sampled_condition"] = cond data["sampled_condition_name"] = cond.name data["sampled_condition_cls"] = cond.__class__ @@ -299,6 +299,7 @@ class SampleConditioningFlags(Transform): "AssignTypes", "SampleConditioningType", ] # We use is_protein in the PPI training condition + def __init__(self, association_scheme): self.association_scheme = association_scheme @@ -375,13 +376,15 @@ def expand_unindexed_motifs( token.res_id = token.res_id + max_resid token.is_C_terminus[:] = False token.is_N_terminus[:] = False - - if association_scheme is not 'atom23': + + if not self.association_scheme == "atom23": assert token.is_protein.all(), f"Cannot unindex non-protein token: {token} unless using atom23 association scheme" token = add_representative_atom(token, central_atom=self.central_atom) else: if token.is_protein.all(): - token = add_representative_atom(token, central_atom=self.central_atom) + token = add_representative_atom( + token, central_atom=self.central_atom + ) else: token = add_representative_atom(token, central_atom="C1'") diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index 8225bcc9..5cc84fa9 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -697,11 +697,12 @@ def __init__( token_1d_features, atom_1d_features, autofill_zeros_if_not_present_in_atomarray=False, - association_scheme='atom14' + association_scheme="atom14", ): self.autofill = autofill_zeros_if_not_present_in_atomarray self.token_1d_features = token_1d_features self.atom_1d_features = atom_1d_features + self.association_scheme = association_scheme def check_input(self, data) -> None: check_contains_keys(data, ["atom_array"]) @@ -753,11 +754,13 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: """ if "feats" not in data.keys(): data["feats"] = {} - - if association_scheme == 'atom23': - data['atom_array'].set_annotation('is_protein_token', data['atom_array'].is_protein) - data['atom_array'].set_annotation('is_dna_token', data['atom_array'].is_dna) - data['atom_array'].set_annotation('is_rna_token', data['atom_array'].is_rna) + + if self.association_scheme == "atom23": + data["atom_array"].set_annotation( + "is_protein_token", data["atom_array"].is_protein + ) + data["atom_array"].set_annotation("is_dna_token", data["atom_array"].is_dna) + data["atom_array"].set_annotation("is_rna_token", data["atom_array"].is_rna) for feature_name, n_dims in self.token_1d_features.items(): data = self.generate_feature(feature_name, n_dims, data, "token") diff --git a/models/rfd3/src/rfd3/transforms/pipelines.py b/models/rfd3/src/rfd3/transforms/pipelines.py index fff8685c..0cd656b2 100644 --- a/models/rfd3/src/rfd3/transforms/pipelines.py +++ b/models/rfd3/src/rfd3/transforms/pipelines.py @@ -383,7 +383,7 @@ def build_atom14_base_pipeline_( train_conditions=train_conditions, meta_conditioning_probabilities=meta_conditioning_probabilities, sequence_encoding=af3_sequence_encoding, - association_scheme=association_scheme + association_scheme=association_scheme, ), ), ] @@ -423,7 +423,9 @@ def build_atom14_base_pipeline_( # ... Add global token features (since number of tokens is fixed after cropping) transforms.append(AddGlobalTokenIdAnnotation()) # ... Create masks (NOTE: Modulates token count, and resets global token id if necessary) - transforms.append(TrainingRoute(SampleConditioningFlags(association_scheme=association_scheme))) + transforms.append( + TrainingRoute(SampleConditioningFlags(association_scheme=association_scheme)) + ) # Post-crop transforms transforms.append( @@ -443,7 +445,9 @@ def build_atom14_base_pipeline_( sharding_depth=1, ), # ... Fuse inference and training conditioning assignments - UnindexFlaggedTokens(central_atom=central_atom), + UnindexFlaggedTokens( + central_atom=central_atom, association_scheme=association_scheme + ), # ... Virtual atom padding (NOTE: Last transform which modulates atom count) PadTokensWithVirtualAtoms( n_atoms_per_token=n_atoms_per_token, @@ -519,7 +523,7 @@ def build_atom14_base_pipeline_( autofill_zeros_if_not_present_in_atomarray=True, token_1d_features=token_1d_features, atom_1d_features=atom_1d_features, - association_scheme=association_scheme + association_scheme=association_scheme, ), AddAF3TokenBondFeatures(), AddGroundTruthSequence(sequence_encoding=af3_sequence_encoding), diff --git a/models/rfd3/src/rfd3/transforms/training_conditions.py b/models/rfd3/src/rfd3/transforms/training_conditions.py index 8f708e0a..6354c1f0 100644 --- a/models/rfd3/src/rfd3/transforms/training_conditions.py +++ b/models/rfd3/src/rfd3/transforms/training_conditions.py @@ -58,6 +58,8 @@ class IslandCondition(TrainingCondition): Select islands as motif and assign conditioning strategies. """ + association_scheme = "atom14" + def __init__( self, *, @@ -70,11 +72,9 @@ def __init__( p_fix_motif_coordinates, p_fix_motif_sequence, p_unindex_motif_tokens, - association_scheme = 'atom14', ): self.name = name self.frequency = frequency - self.association_scheme = association_scheme # Token selection self.island_sampling_kwargs = island_sampling_kwargs @@ -89,15 +89,13 @@ def __init__( self.p_fix_motif_coordinates = p_fix_motif_coordinates self.p_fix_motif_sequence = p_fix_motif_sequence self.p_unindex_motif_tokens = p_unindex_motif_tokens - - self.association_scheme = association_scheme def is_valid_for_example(self, data) -> bool: is_protein = data["atom_array"].is_protein is_dna = data["atom_array"].is_dna is_rna = data["atom_array"].is_rna ### updating this to allow other polymers - if self.association_scheme is not 'atom23': + if not self.association_scheme == "atom23": if not np.any(is_protein | is_dna | is_rna): return False else: @@ -113,8 +111,12 @@ def sample_motif_tokens(self, atom_array): token_level_array = atom_array[get_token_starts(atom_array)] # initialize motif tokens as all non-protein tokens - if self.association_scheme is 'atom23': - polymer_mask = (token_level_array.is_protein | token_level_array.is_dna | token_level_array.is_rna) + if self.association_scheme == "atom23": + polymer_mask = ( + token_level_array.is_protein + | token_level_array.is_dna + | token_level_array.is_rna + ) is_motif_token = np.asarray(~polymer_mask, dtype=bool).copy() n_polymer_tokens = np.sum(polymer_mask) islands_mask = sample_island_tokens( @@ -123,13 +125,15 @@ def sample_motif_tokens(self, atom_array): ) is_motif_token[polymer_mask] = islands_mask else: - is_motif_token = np.asarray(~token_level_array.is_protein, dtype=bool).copy() + is_motif_token = np.asarray( + ~token_level_array.is_protein, dtype=bool + ).copy() n_protein_tokens = np.sum(token_level_array.is_protein) - slands_mask = sample_island_tokens( - _protein_tokens, - *self.island_sampling_kwargs, - + islands_mask = sample_island_tokens( + n_protein_tokens, + **self.island_sampling_kwargs, + ) is_motif_token[token_level_array.is_protein] = islands_mask # TODO: Atoms with covalent bonds should be motif, needs FlagAndReassignCovalentModifications transform prior to this @@ -160,7 +164,7 @@ def sample_motif_atoms(self, atom_array): is_motif_atom = sample_motif_subgraphs( atom_array=atom_array, **self.subgraph_sampling_kwargs, - association_scheme=self.association_scheme + association_scheme=self.association_scheme, ) # We also only want resolved atoms to be motif @@ -182,7 +186,7 @@ def sample(self, data): p_fix_motif_sequence=self.p_fix_motif_sequence, p_fix_motif_coordinates=self.p_fix_motif_coordinates, p_unindex_motif_tokens=self.p_unindex_motif_tokens, - association_scheme=self.association_scheme + association_scheme=self.association_scheme, ) atom_array.set_annotation( @@ -202,7 +206,7 @@ class PPICondition(TrainingCondition): """Get condition indicating what is motif and what is to be diffused for protein-protein interaction training.""" name = "ppi" - association_scheme = 'atom14' + association_scheme = "atom14" def is_valid_for_example(self, data): # Extract relevant data @@ -301,7 +305,7 @@ class SubtypeCondition(TrainingCondition): """ name = "subtype" - association_scheme = 'atom14' + association_scheme = "atom14" def __init__(self, frequency: float, subtype: list[str], fix_pos: bool = False): self.frequency = frequency @@ -397,7 +401,7 @@ def sample_motif_subgraphs( hetatom_n_bond_expectation, residue_p_fix_all, hetatom_p_fix_all, - association_scheme = 'atom14' + association_scheme="atom14", ): """ Returns a boolean mask over atoms, indicating which atoms are part of the sampled motif. @@ -431,10 +435,14 @@ def sample_motif_subgraphs( "p_fix_all": residue_p_fix_all, } - if association_scheme is 'atom23': - clause = atom_array_subset.is_protein.all() | atom_array_subset.is_dna.all() | atom_array_subset.is_rna.all() + if association_scheme == "atom23": + clause = ( + atom_array_subset.is_protein.all() + | atom_array_subset.is_dna.all() + | atom_array_subset.is_rna.all() + ) else: - clause = atom_array_subset.is_potein.all() + clause = atom_array_subset.is_protein.all() if not clause: args.update( @@ -465,12 +473,14 @@ def sample_conditioning_strategy( p_fix_motif_sequence, p_fix_motif_coordinates, p_unindex_motif_tokens, - association_scheme + association_scheme, ): atom_array.set_annotation( "is_motif_atom_with_fixed_seq", sample_is_motif_atom_with_fixed_seq( - atom_array, p_fix_motif_sequence=p_fix_motif_sequence, association_scheme=association_scheme + atom_array, + p_fix_motif_sequence=p_fix_motif_sequence, + association_scheme=association_scheme, ), ) @@ -491,7 +501,9 @@ def sample_conditioning_strategy( return atom_array -def sample_is_motif_atom_with_fixed_seq(atom_array, p_fix_motif_sequence, association_scheme): +def sample_is_motif_atom_with_fixed_seq( + atom_array, p_fix_motif_sequence, association_scheme +): """ Samples what kind of conditioning to apply to motif tokens. @@ -504,10 +516,11 @@ def sample_is_motif_atom_with_fixed_seq(atom_array, p_fix_motif_sequence, associ is_motif_atom_with_fixed_seq = np.zeros(atom_array.array_length(), dtype=bool) # By default reveal sequence for non-protein - - if association_scheme is not 'atom23': - is_motif_atom_with_fixed_seq = is_motif_atom_with_fixed_seq | ~atom_array.is_protein - + + if not association_scheme == "atom23": + is_motif_atom_with_fixed_seq = ( + is_motif_atom_with_fixed_seq | ~atom_array.is_protein + ) return is_motif_atom_with_fixed_seq @@ -526,7 +539,9 @@ def sample_fix_motif_coordinates(atom_array, p_fix_motif_coordinates): return is_motif_atom_with_fixed_coord -def sample_unindexed_atoms(atom_array, p_unindex_motif_tokens, association_scheme='atom14'): +def sample_unindexed_atoms( + atom_array, p_unindex_motif_tokens, association_scheme="atom14" +): """ Samples which atoms in motif tokens should be flagged for unindexing. @@ -539,15 +554,15 @@ def sample_unindexed_atoms(atom_array, p_unindex_motif_tokens, association_schem is_motif_atom_unindexed = np.zeros(atom_array.array_length(), dtype=bool) # ensure non-residue atoms are not already flagged - if association_scheme == 'atom23': + if association_scheme == "atom23": is_motif_atom_unindexed = np.logical_and( - is_motif_atom_unindexed, (atom_array.is_residue | atom_array.is_dna | atom_array.is_rna) - ) # is_residue refers to is_protein here + is_motif_atom_unindexed, + (atom_array.is_residue | atom_array.is_dna | atom_array.is_rna), + ) # is_residue refers to is_protein here else: is_motif_atom_unindexed = np.logical_and( is_motif_atom_unindexed, atom_array.is_residue - ) - + ) return is_motif_atom_unindexed diff --git a/models/rfd3/src/rfd3/transforms/virtual_atoms.py b/models/rfd3/src/rfd3/transforms/virtual_atoms.py index fbc8c743..7d240a23 100644 --- a/models/rfd3/src/rfd3/transforms/virtual_atoms.py +++ b/models/rfd3/src/rfd3/transforms/virtual_atoms.py @@ -10,11 +10,10 @@ ) from atomworks.ml.utils.token import get_token_starts from rfd3.constants import ( - ATOM23_ATOM_NAME_TO_ELEMENT, - ATOM14_ATOM_NAME_TO_ELEMENT, ATOM14_ATOM_NAMES, - ATOM23_ATOM_NAMES_RNA, + ATOM23_ATOM_NAME_TO_ELEMENT, ATOM23_ATOM_NAMES_DNA, + ATOM23_ATOM_NAMES_RNA, VIRTUAL_ATOM_ELEMENT_NAME, association_schemes, association_schemes_stripped, @@ -31,7 +30,9 @@ from foundry.common import exists -def map_to_association_scheme(atom_names: list | str, res_name: str, scheme="atom14", ATOM_NAMES=None): +def map_to_association_scheme( + atom_names: list | str, res_name: str, scheme="atom14", ATOM_NAMES=None +): """ Maps a list of names to the atom14 naming scheme for that particular name (within a specific residue) NB this function is a bit more general since it is used to handle tipatoms too. @@ -52,6 +53,7 @@ def map_to_association_scheme(atom_names: list | str, res_name: str, scheme="ato else: return ATOM_NAMES[idxs] + def map_names_to_elements( atom_names: list | str, default=VIRTUAL_ATOM_ELEMENT_NAME ) -> np.ndarray: @@ -61,7 +63,7 @@ def map_names_to_elements( then it returns the default value """ atom_names = [atom_names] if isinstance(atom_names, str) else atom_names - elements = [ATOM14_ATOM_NAME_TO_ELEMENT.get(name, default) for name in atom_names] + elements = [ATOM23_ATOM_NAME_TO_ELEMENT.get(name, default) for name in atom_names] return np.array(elements) @@ -72,6 +74,9 @@ def generate_atom_mappings_(scheme="atom14"): symmetry_mapping = {} for aaa, atom_names in ccd_ordering_atomchar.items(): + if aaa not in scheme: + continue + mapping = list(range(len(atom_names))) scheme_names = scheme[aaa] @@ -126,10 +131,10 @@ def permute_symmetric_atom_names_( # With the structure-local atom attention it will not unless N_keys(n_attn_seq_neighbours) > n_atom_attn_queries. ## fail safe, no symmetry confusion in NA bases ## - if (atom_names[0] == "P"): + if atom_names[0] == "P": return atom_names ################################################## - + if res_name in association_map: idx_to_swap = association_map[res_name] atom_names = atom_names[idx_to_swap] @@ -180,16 +185,17 @@ def forward(self, data: dict) -> dict: token_ids = np.unique(atom_array.token_id) assert len(token_ids) == len( is_motif_atom_with_fixed_seq - ), "Token ids and token level array have different lengths!" + ), "Token ids and token level array have different lengths!" - # Unindexed tokens are never fully atomized, but may be assigned as atomized to have repr atoms: - if self.association_scheme == 'atom23': - is_residue = ( + # Unindexed tokens are never fully atomized, but may be assigned as atomized to have repr atoms: + if self.association_scheme == "atom23": + is_residue = ( token_level_array.is_protein & ~token_level_array.atomize ) | is_motif_token_unindexed - + is_residue_NA = ( - (token_level_array.is_dna | token_level_array.is_rna) & ~token_level_array.atomize + (token_level_array.is_dna | token_level_array.is_rna) + & ~token_level_array.atomize ) | is_motif_token_unindexed # Unindexed tokens are never padded, and so are treated as residues with fixed sequence. @@ -211,7 +217,6 @@ def forward(self, data: dict) -> dict: is_non_paddable_residue = is_residue & ( is_motif_atom_with_fixed_seq | is_motif_token_unindexed ) - # Collect virtual atoms to insert (we will insert them all at once) virtual_atoms_to_insert = [] @@ -221,7 +226,7 @@ def forward(self, data: dict) -> dict: for token_id, (start, end) in enumerate(zip(starts[:-1], starts[1:])): if is_paddable[token_id]: token = atom_array[start:end] - + # First, pad with virtual atoms if needed if self.association_scheme == "atom23" and atom_array[start].is_dna: n_atoms_per_token = 22 @@ -230,7 +235,7 @@ def forward(self, data: dict) -> dict: else: n_atoms_per_token = self.n_atoms_per_token n_pad = n_atoms_per_token - len(token) - + if n_pad > 0: mask = get_af3_token_representative_masks( token, central_atom=self.atom_to_pad_from @@ -297,10 +302,10 @@ def _fix_multidimensional_annotations_in_pad_array( for token_id, (start, end) in enumerate( zip(starts_padded[:-1], starts_padded[1:]) - ): - if (atom_array_padded[start].is_dna): + ): + if atom_array_padded[start].is_dna: ATOM_NAMES = ATOM23_ATOM_NAMES_DNA - elif (atom_array_padded[start].is_rna): + elif atom_array_padded[start].is_rna: ATOM_NAMES = ATOM23_ATOM_NAMES_RNA else: ATOM_NAMES = ATOM14_ATOM_NAMES @@ -328,7 +333,10 @@ def _fix_multidimensional_annotations_in_pad_array( ) atom_array_padded.get_annotation("gt_atom_name")[start:end] = atom_names atom_names = map_to_association_scheme( - atom_names, res_name, scheme=self.association_scheme, ATOM_NAMES=ATOM_NAMES + atom_names, + res_name, + scheme=self.association_scheme, + ATOM_NAMES=ATOM_NAMES, ) atom_array_padded.atom_name[start:end] = atom_names else: diff --git a/src/foundry/utils/components.py b/src/foundry/utils/components.py index 75bc87f3..0af9c7ea 100644 --- a/src/foundry/utils/components.py +++ b/src/foundry/utils/components.py @@ -96,8 +96,21 @@ def get_design_pattern_with_constraints(contig, length=None): fixed_parts = [] pos_to_put_motif = [] + suff = [] # suffixes for diffused regions P(optional),R,D + for part in contig_parts: - if any(c.isalpha() for c in part): # Detect parts containing letters as fixed + ## updating to include DNA and RNA generation + if part[-1] in ["R", "D"]: ##Detect non-fixed RNA and DNA contig part + suff.append(part[-1]) + part = part[:-1] + if "-" in part: + start, end = map(int, part.split("-")) + else: + start = end = int(part) + variable_ranges.append([start, end]) + pos_to_put_motif.append(0) + + elif any(c.isalpha() for c in part): # Detect parts containing letters as fixed pn_unit_id, pn_unit_start, pn_unit_end = extract_pn_unit_info(part) fixed_parts.append([pn_unit_id, pn_unit_start, pn_unit_end]) pos_to_put_motif.append(1) @@ -110,6 +123,7 @@ def get_design_pattern_with_constraints(contig, length=None): start = end = int(part) variable_ranges.append([start, end]) pos_to_put_motif.append(0) + suff.append("P") # adjust the total length to solely for free residues num_motif_residues = sum([i[2] - i[1] + 1 for i in fixed_parts]) @@ -167,7 +181,7 @@ def get_design_pattern_with_constraints(contig, length=None): atoms_with_motif.append(f"{pn_unit_id}{index}") elif pos_to_put_motif[idx] == 0: free_atom = num_free_atoms.pop(0) - atoms_with_motif.append(free_atom) + atoms_with_motif.append(str(free_atom) + suff.pop(0)) elif pos_to_put_motif[idx] == 2: atoms_with_motif.append("/0") From 94d9d635cd694b8e6184934d19144ef5aa8877ae Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Sun, 18 Jan 2026 15:41:00 -0800 Subject: [PATCH 05/49] feat: atom23 porting --- models/rfd3/src/rfd3/constants.py | 150 ++++++++++++++---- .../src/rfd3/transforms/conditioning_base.py | 4 +- .../src/rfd3/transforms/design_transforms.py | 6 + models/rfd3/src/rfd3/transforms/pipelines.py | 2 +- .../rfd3/transforms/training_conditions.py | 12 +- .../rfd3/src/rfd3/transforms/virtual_atoms.py | 12 +- 6 files changed, 144 insertions(+), 42 deletions(-) diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index 529ca581..78d48925 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -242,35 +242,6 @@ "POLYDEOXYRIBONUCLEOTIDE/POLYRIBONUCLEOTIDE HYBRID", ] -backbone_atomscheme_DNA = [ - " P ", - " OP1", - " OP2", - " O5'", - " C5'", - " C4'", - " O4'", - " C3'", - " O3'", - " C2'", - " C1'", -] # , None] - -backbone_atomscheme_RNA = [ - " P ", - " OP1", - " OP2", - " O5'", - " C5'", - " C4'", - " O4'", - " C3'", - " O3'", - " C2'", - " O2'", - " C1'", -] - DNA_atoms = { "DA": [ " N9 ", @@ -438,3 +409,124 @@ backbone_atoms_RNA = strip_list(backbone_atomscheme_RNA) backbone_atoms_DNA = strip_list(backbone_atomscheme_DNA) + + +# Mapping from residue type to its backbone and sidechain atoms (for convenience) +ATOM_REGION_BY_RESI = { + 'ALA': {'bb':('N','CA','C','O'), + 'sc':('CB')}, + 'ARG': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD','NE','CZ','NH1','NH2')}, + 'ASN': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','OD1','ND2')}, + 'ASP': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','OD1','OD2')}, + 'CYS': {'bb':('N','CA','C','O'), + 'sc':('CB','SG')}, + 'GLN': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD','OE1','NE2')}, + 'GLU': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD','OE1','OE2')}, + 'GLY': {'bb':('N','CA','C','O'), + 'sc':()}, + 'HIS': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','ND1','CD2','CE1','NE2')}, + 'ILE': {'bb':('N','CA','C','O'), + 'sc':('CB','CG1','CG2','CD1')}, + 'LEU': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD1','CD2')}, + 'LYS': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD','CE','NZ')}, + 'MET': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','SD','CE')}, + 'PHE': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ')}, + 'PRO': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD')}, + 'SER': {'bb':('N','CA','C','O'), + 'sc':('CB','OG')}, + 'THR': {'bb':('N','CA','C','O'), + 'sc':('CB','OG1','CG2')}, + 'TRP': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD1','CD2','CE2','CE3','NE1','CZ2','CZ3','CH2')}, + 'TYR': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ','OH')}, + 'VAL': {'bb':('N','CA','C','O'), + 'sc':('CB','CG1','CG2')}, + 'UNK': {'bb':('N','CA','C','O'), + 'sc':('CB')}, + 'MAS': {'bb':('N','CA','C','O'), + 'sc':('CB')}, + 'DA': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N6')}, + 'DC': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, + 'DG': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N2','O6')}, + 'DT': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':('N1','C2','O2','N3','C4','O4','C5','C7','C6')}, + 'DX': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':()}, + 'A': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':('N1','C2','N3','C4','C5','C6','N6','N7','C8','N9')}, + 'C': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, + 'G': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':('N1','C2','N2','N3','C4','C5','C6','O6','N7','C8','N9')}, + 'U': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':('N1','C2','O2','N3','C4','O4','C5','C6')}, + 'X': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':()}, + 'HIS_D': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','NE2','CD2','CE1','ND1')}, +} + +# Known planar sidechain atoms for each canonical residue type: +PLANAR_ATOMS_BY_RESI = { + 'ALA': [], + 'ARG': ['NH1', 'NH2', 'CZ', 'NE', 'CD'], + 'ASN': ['OD1', 'ND2', 'CG', 'CB'], + 'ASP': ['OD1', 'OD2', 'CG', 'CB'], + 'CYS': [], + 'GLN': ['OE1', 'NE2', 'CD', 'CG'], + 'GLU': ['OE1', 'OE2', 'CD', 'CG'], + 'GLY': [], + 'HIS': ['ND1', 'CE1', 'NE2', 'CD2', 'CG', 'CB'], + 'ILE': [], + 'LEU': [], + 'LYS': [], + 'MET': [], + 'PHE': ['CZ', 'CE1', 'CE2', 'CD1', 'CD2', 'CG', 'CB'], + 'PRO': [], + 'SER': [], + 'THR': [], + 'TRP': ['CH2', 'CZ3', 'CZ2', 'CE3', 'CE2', 'CD2', 'NE1', 'CD1', 'CG', 'CB'], + 'TYR': ['OH', 'CZ', 'CE1', 'CE2', 'CD1', 'CD2', 'CG', 'CB'], + 'VAL': [], + 'UNK': [], + 'MAS': [], + 'DA': ['N6', 'C6', 'N1', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], + 'DC': ['N4', 'C4', 'N3', 'O2', 'C2', 'C5', 'C6', 'N1'], + 'DG': ['O6', 'C6', 'N1', 'N2', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], + 'DT': ['O4', 'O2', 'N3', 'C4', 'C2', 'C5', 'C6', 'N1', 'C7'], + 'DX': [], + 'A': ['N6', 'C6', 'N1', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], + 'C': ['N4', 'C4', 'N3', 'O2', 'C2', 'C5', 'C6', 'N1'], + 'G': ['O6', 'C6', 'N1', 'N2', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], + 'U': ['O4', 'O2', 'N3', 'C4', 'C2', 'C5', 'C6', 'N1'], + 'X': [], + 'HIS_D': ['ND1', 'CD2', 'CE1', 'NE2', 'CG', 'CB'], + } + +# fix C/U symmetry +temp = list(association_schemes['atom23']['U']) +temp[19], temp[20] = temp[20], temp[19] +association_schemes['atom23']['U'] = tuple(temp) + +association_schemes_stripped = { + name: {k: strip_list(v) for k, v in scheme.items()} + for name, scheme in association_schemes.items() +} + +if __name__ == "__main__": + import pdb; pdb.set_trace() diff --git a/models/rfd3/src/rfd3/transforms/conditioning_base.py b/models/rfd3/src/rfd3/transforms/conditioning_base.py index 769fcf46..aec455c1 100644 --- a/models/rfd3/src/rfd3/transforms/conditioning_base.py +++ b/models/rfd3/src/rfd3/transforms/conditioning_base.py @@ -281,7 +281,7 @@ def forward(self, data): cond = valid_conditions[i_cond] cond.association_scheme = self.association_scheme - + data["sampled_condition"] = cond data["sampled_condition_name"] = cond.name data["sampled_condition_cls"] = cond.__class__ @@ -299,6 +299,8 @@ class SampleConditioningFlags(Transform): "AssignTypes", "SampleConditioningType", ] # We use is_protein in the PPI training condition + def __init__(self, association_scheme): + self.association_scheme = association_scheme def __init__(self, association_scheme): self.association_scheme = association_scheme diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index 5cc84fa9..e853322d 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -698,6 +698,7 @@ def __init__( atom_1d_features, autofill_zeros_if_not_present_in_atomarray=False, association_scheme="atom14", + association_scheme='atom14' ): self.autofill = autofill_zeros_if_not_present_in_atomarray self.token_1d_features = token_1d_features @@ -754,6 +755,11 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: """ if "feats" not in data.keys(): data["feats"] = {} + + if association_scheme == 'atom23': + data['atom_array'].set_annotation('is_protein_token', data['atom_array'].is_protein) + data['atom_array'].set_annotation('is_dna_token', data['atom_array'].is_dna) + data['atom_array'].set_annotation('is_rna_token', data['atom_array'].is_rna) if self.association_scheme == "atom23": data["atom_array"].set_annotation( diff --git a/models/rfd3/src/rfd3/transforms/pipelines.py b/models/rfd3/src/rfd3/transforms/pipelines.py index 0cd656b2..378251f6 100644 --- a/models/rfd3/src/rfd3/transforms/pipelines.py +++ b/models/rfd3/src/rfd3/transforms/pipelines.py @@ -523,7 +523,7 @@ def build_atom14_base_pipeline_( autofill_zeros_if_not_present_in_atomarray=True, token_1d_features=token_1d_features, atom_1d_features=atom_1d_features, - association_scheme=association_scheme, + association_scheme=association_scheme ), AddAF3TokenBondFeatures(), AddGroundTruthSequence(sequence_encoding=af3_sequence_encoding), diff --git a/models/rfd3/src/rfd3/transforms/training_conditions.py b/models/rfd3/src/rfd3/transforms/training_conditions.py index 6354c1f0..bfd52570 100644 --- a/models/rfd3/src/rfd3/transforms/training_conditions.py +++ b/models/rfd3/src/rfd3/transforms/training_conditions.py @@ -72,9 +72,11 @@ def __init__( p_fix_motif_coordinates, p_fix_motif_sequence, p_unindex_motif_tokens, + association_scheme = 'atom14', ): self.name = name self.frequency = frequency + self.association_scheme = association_scheme # Token selection self.island_sampling_kwargs = island_sampling_kwargs @@ -89,13 +91,15 @@ def __init__( self.p_fix_motif_coordinates = p_fix_motif_coordinates self.p_fix_motif_sequence = p_fix_motif_sequence self.p_unindex_motif_tokens = p_unindex_motif_tokens + + self.association_scheme = association_scheme def is_valid_for_example(self, data) -> bool: is_protein = data["atom_array"].is_protein is_dna = data["atom_array"].is_dna is_rna = data["atom_array"].is_rna ### updating this to allow other polymers - if not self.association_scheme == "atom23": + if self.association_scheme == "atom23": if not np.any(is_protein | is_dna | is_rna): return False else: @@ -134,6 +138,7 @@ def sample_motif_tokens(self, atom_array): n_protein_tokens, **self.island_sampling_kwargs, ) + is_motif_token[token_level_array.is_protein] = islands_mask # TODO: Atoms with covalent bonds should be motif, needs FlagAndReassignCovalentModifications transform prior to this @@ -305,7 +310,7 @@ class SubtypeCondition(TrainingCondition): """ name = "subtype" - association_scheme = "atom14" + association_scheme = 'atom14' def __init__(self, frequency: float, subtype: list[str], fix_pos: bool = False): self.frequency = frequency @@ -521,6 +526,8 @@ def sample_is_motif_atom_with_fixed_seq( is_motif_atom_with_fixed_seq = ( is_motif_atom_with_fixed_seq | ~atom_array.is_protein ) + + return is_motif_atom_with_fixed_seq @@ -564,6 +571,7 @@ def sample_unindexed_atoms( is_motif_atom_unindexed, atom_array.is_residue ) + return is_motif_atom_unindexed diff --git a/models/rfd3/src/rfd3/transforms/virtual_atoms.py b/models/rfd3/src/rfd3/transforms/virtual_atoms.py index 7d240a23..a5744129 100644 --- a/models/rfd3/src/rfd3/transforms/virtual_atoms.py +++ b/models/rfd3/src/rfd3/transforms/virtual_atoms.py @@ -53,7 +53,6 @@ def map_to_association_scheme( else: return ATOM_NAMES[idxs] - def map_names_to_elements( atom_names: list | str, default=VIRTUAL_ATOM_ELEMENT_NAME ) -> np.ndarray: @@ -130,11 +129,6 @@ def permute_symmetric_atom_names_( # NB: Can leak GT sequence if the model receives the canconical ordering of atoms as input # With the structure-local atom attention it will not unless N_keys(n_attn_seq_neighbours) > n_atom_attn_queries. - ## fail safe, no symmetry confusion in NA bases ## - if atom_names[0] == "P": - return atom_names - ################################################## - if res_name in association_map: idx_to_swap = association_map[res_name] atom_names = atom_names[idx_to_swap] @@ -185,7 +179,7 @@ def forward(self, data: dict) -> dict: token_ids = np.unique(atom_array.token_id) assert len(token_ids) == len( is_motif_atom_with_fixed_seq - ), "Token ids and token level array have different lengths!" + ), "Token ids and token level array have different lengths!" # Unindexed tokens are never fully atomized, but may be assigned as atomized to have repr atoms: if self.association_scheme == "atom23": @@ -226,7 +220,7 @@ def forward(self, data: dict) -> dict: for token_id, (start, end) in enumerate(zip(starts[:-1], starts[1:])): if is_paddable[token_id]: token = atom_array[start:end] - + # First, pad with virtual atoms if needed if self.association_scheme == "atom23" and atom_array[start].is_dna: n_atoms_per_token = 22 @@ -235,7 +229,7 @@ def forward(self, data: dict) -> dict: else: n_atoms_per_token = self.n_atoms_per_token n_pad = n_atoms_per_token - len(token) - + if n_pad > 0: mask = get_af3_token_representative_masks( token, central_atom=self.atom_to_pad_from From c2ec30274579695b3c92c888eca8c409ad91bba3 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Tue, 20 Jan 2026 14:44:19 -0800 Subject: [PATCH 06/49] feat: atom23 inference changes and training fixes --- models/rf3/src/rf3/loss/af3_losses.py | 10 +++++-- models/rfd3/src/rfd3/constants.py | 30 ++++++++++++++++++- .../rfd3/inference/legacy_input_parsing.py | 1 + .../src/rfd3/transforms/conditioning_base.py | 3 +- .../src/rfd3/transforms/design_transforms.py | 13 ++++---- models/rfd3/src/rfd3/transforms/pipelines.py | 2 +- .../rfd3/transforms/training_conditions.py | 10 +------ .../rfd3/src/rfd3/transforms/virtual_atoms.py | 7 +++-- 8 files changed, 52 insertions(+), 24 deletions(-) diff --git a/models/rf3/src/rf3/loss/af3_losses.py b/models/rf3/src/rf3/loss/af3_losses.py index 974db267..1bb0cd27 100644 --- a/models/rf3/src/rf3/loss/af3_losses.py +++ b/models/rf3/src/rf3/loss/af3_losses.py @@ -349,9 +349,13 @@ def forward(self, network_output, loss_input, symm_input): x_native = symm_input["coord_atom_lvl"].to(x_pred.device) mask_native = symm_input["mask_atom_lvl"].to(x_pred.device) - x_native_aln, x_native_mask = self._resolve_subunits( - mol_entities, mol_iid, crop_mask, x_native, mask_native, x_pred - ) + try: + x_native_aln, x_native_mask = self._resolve_subunits( + mol_entities, mol_iid, crop_mask, x_native, mask_native, x_pred + ) + except Exception: + # fd ... TO DO: DEBUG! + return loss_input loss_input["X_gt_L"] = x_native_aln loss_input["crd_mask_L"] = x_native_mask diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index 78d48925..4d762621 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -242,6 +242,35 @@ "POLYDEOXYRIBONUCLEOTIDE/POLYRIBONUCLEOTIDE HYBRID", ] +backbone_atomscheme_DNA = [ + " P ", + " OP1", + " OP2", + " O5'", + " C5'", + " C4'", + " O4'", + " C3'", + " O3'", + " C2'", + " C1'", +] # , None] + +backbone_atomscheme_RNA = [ + " P ", + " OP1", + " OP2", + " O5'", + " C5'", + " C4'", + " O4'", + " C3'", + " O3'", + " C2'", + " O2'", + " C1'", +] + DNA_atoms = { "DA": [ " N9 ", @@ -410,7 +439,6 @@ backbone_atoms_RNA = strip_list(backbone_atomscheme_RNA) backbone_atoms_DNA = strip_list(backbone_atomscheme_DNA) - # Mapping from residue type to its backbone and sidechain atoms (for convenience) ATOM_REGION_BY_RESI = { 'ALA': {'bb':('N','CA','C','O'), diff --git a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py index 401cd2a8..5f77bdff 100644 --- a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py +++ b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py @@ -186,6 +186,7 @@ def fetch_motif_residue_( subarray.set_annotation( "is_motif_atom_with_fixed_seq", np.zeros(subarray.shape[0], dtype=int) ) + elif redesign_motif_sidechains and res_name in (STANDARD_DNA + STANDARD_RNA): is_backbone = np.isin(subarray.atom_name, backbone_atoms_RNA) subarray.set_annotation("is_motif_atom", is_backbone) diff --git a/models/rfd3/src/rfd3/transforms/conditioning_base.py b/models/rfd3/src/rfd3/transforms/conditioning_base.py index aec455c1..25b51a70 100644 --- a/models/rfd3/src/rfd3/transforms/conditioning_base.py +++ b/models/rfd3/src/rfd3/transforms/conditioning_base.py @@ -281,7 +281,7 @@ def forward(self, data): cond = valid_conditions[i_cond] cond.association_scheme = self.association_scheme - + data["sampled_condition"] = cond data["sampled_condition_name"] = cond.name data["sampled_condition_cls"] = cond.__class__ @@ -299,6 +299,7 @@ class SampleConditioningFlags(Transform): "AssignTypes", "SampleConditioningType", ] # We use is_protein in the PPI training condition + def __init__(self, association_scheme): self.association_scheme = association_scheme diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index e853322d..ac17ec29 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -698,7 +698,6 @@ def __init__( atom_1d_features, autofill_zeros_if_not_present_in_atomarray=False, association_scheme="atom14", - association_scheme='atom14' ): self.autofill = autofill_zeros_if_not_present_in_atomarray self.token_1d_features = token_1d_features @@ -755,11 +754,13 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: """ if "feats" not in data.keys(): data["feats"] = {} - - if association_scheme == 'atom23': - data['atom_array'].set_annotation('is_protein_token', data['atom_array'].is_protein) - data['atom_array'].set_annotation('is_dna_token', data['atom_array'].is_dna) - data['atom_array'].set_annotation('is_rna_token', data['atom_array'].is_rna) + + if self.association_scheme == "atom23": + data["atom_array"].set_annotation( + "is_protein_token", data["atom_array"].is_protein + ) + data["atom_array"].set_annotation("is_dna_token", data["atom_array"].is_dna) + data["atom_array"].set_annotation("is_rna_token", data["atom_array"].is_rna) if self.association_scheme == "atom23": data["atom_array"].set_annotation( diff --git a/models/rfd3/src/rfd3/transforms/pipelines.py b/models/rfd3/src/rfd3/transforms/pipelines.py index 378251f6..0cd656b2 100644 --- a/models/rfd3/src/rfd3/transforms/pipelines.py +++ b/models/rfd3/src/rfd3/transforms/pipelines.py @@ -523,7 +523,7 @@ def build_atom14_base_pipeline_( autofill_zeros_if_not_present_in_atomarray=True, token_1d_features=token_1d_features, atom_1d_features=atom_1d_features, - association_scheme=association_scheme + association_scheme=association_scheme, ), AddAF3TokenBondFeatures(), AddGroundTruthSequence(sequence_encoding=af3_sequence_encoding), diff --git a/models/rfd3/src/rfd3/transforms/training_conditions.py b/models/rfd3/src/rfd3/transforms/training_conditions.py index bfd52570..dbb07b76 100644 --- a/models/rfd3/src/rfd3/transforms/training_conditions.py +++ b/models/rfd3/src/rfd3/transforms/training_conditions.py @@ -72,11 +72,9 @@ def __init__( p_fix_motif_coordinates, p_fix_motif_sequence, p_unindex_motif_tokens, - association_scheme = 'atom14', ): self.name = name self.frequency = frequency - self.association_scheme = association_scheme # Token selection self.island_sampling_kwargs = island_sampling_kwargs @@ -91,8 +89,6 @@ def __init__( self.p_fix_motif_coordinates = p_fix_motif_coordinates self.p_fix_motif_sequence = p_fix_motif_sequence self.p_unindex_motif_tokens = p_unindex_motif_tokens - - self.association_scheme = association_scheme def is_valid_for_example(self, data) -> bool: is_protein = data["atom_array"].is_protein @@ -138,7 +134,6 @@ def sample_motif_tokens(self, atom_array): n_protein_tokens, **self.island_sampling_kwargs, ) - is_motif_token[token_level_array.is_protein] = islands_mask # TODO: Atoms with covalent bonds should be motif, needs FlagAndReassignCovalentModifications transform prior to this @@ -310,7 +305,7 @@ class SubtypeCondition(TrainingCondition): """ name = "subtype" - association_scheme = 'atom14' + association_scheme = "atom14" def __init__(self, frequency: float, subtype: list[str], fix_pos: bool = False): self.frequency = frequency @@ -526,8 +521,6 @@ def sample_is_motif_atom_with_fixed_seq( is_motif_atom_with_fixed_seq = ( is_motif_atom_with_fixed_seq | ~atom_array.is_protein ) - - return is_motif_atom_with_fixed_seq @@ -571,7 +564,6 @@ def sample_unindexed_atoms( is_motif_atom_unindexed, atom_array.is_residue ) - return is_motif_atom_unindexed diff --git a/models/rfd3/src/rfd3/transforms/virtual_atoms.py b/models/rfd3/src/rfd3/transforms/virtual_atoms.py index a5744129..6ce16759 100644 --- a/models/rfd3/src/rfd3/transforms/virtual_atoms.py +++ b/models/rfd3/src/rfd3/transforms/virtual_atoms.py @@ -53,6 +53,7 @@ def map_to_association_scheme( else: return ATOM_NAMES[idxs] + def map_names_to_elements( atom_names: list | str, default=VIRTUAL_ATOM_ELEMENT_NAME ) -> np.ndarray: @@ -179,7 +180,7 @@ def forward(self, data: dict) -> dict: token_ids = np.unique(atom_array.token_id) assert len(token_ids) == len( is_motif_atom_with_fixed_seq - ), "Token ids and token level array have different lengths!" + ), "Token ids and token level array have different lengths!" # Unindexed tokens are never fully atomized, but may be assigned as atomized to have repr atoms: if self.association_scheme == "atom23": @@ -220,7 +221,7 @@ def forward(self, data: dict) -> dict: for token_id, (start, end) in enumerate(zip(starts[:-1], starts[1:])): if is_paddable[token_id]: token = atom_array[start:end] - + # First, pad with virtual atoms if needed if self.association_scheme == "atom23" and atom_array[start].is_dna: n_atoms_per_token = 22 @@ -229,7 +230,7 @@ def forward(self, data: dict) -> dict: else: n_atoms_per_token = self.n_atoms_per_token n_pad = n_atoms_per_token - len(token) - + if n_pad > 0: mask = get_af3_token_representative_masks( token, central_atom=self.atom_to_pad_from From 3952c976a3711951a3b7f211b6207eeb7f8ca99b Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Tue, 20 Jan 2026 14:50:40 -0800 Subject: [PATCH 07/49] add .env, can remove paths later --- .env | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.env b/.env index 74786fe4..88ac0bb3 100644 --- a/.env +++ b/.env @@ -10,7 +10,7 @@ # expected that you use the same saving conventions as the RCSB PDB, which means: # `1a2b` --> /path/to/pdb_mirror/a2/1a2b.cif.gz # To set up a mirror, you can use tha atomworks commandline: `atomworks pdb sync /path/to/mirror` -PDB_MIRROR_PATH= +PDB_MIRROR_PATH=/projects/ml/frozen_pdb_copies/2024_12_01_pdb # The `CCD_MIRROR_PATH` is a path to a local mirror of the CCD database. # It's expected that you use the same saving conventions as the RCSB CCD, which means: @@ -19,7 +19,7 @@ PDB_MIRROR_PATH= # If no mirror is provided, the internal biotite CCD will be used as a fallback. To provide a # custom CCD for a ligand, you can place it in the in the CCD mirror path following the CCDs pattern. # Example: /path/to/ccd_mirror/M/MYLIGAND1/MYLIGAND1.cif -CCD_MIRROR_PATH= +CCD_MIRROR_PATH=/projects/ml/frozen_pdb_copies/2024_12_11_ccd # --- Local MSA directories --- LOCAL_MSA_DIRS= @@ -29,14 +29,14 @@ LOCAL_MSA_DIRS= # The HBPLUS_PATH is a path to the hbplus tool, which is used for hydrogen bond calculation # during training and during metrics computation. # Example: /path/to/hbplus -HBPLUS_PATH= +HBPLUS_PATH=/projects/ml/hbplus # The `X3DNA_PATH` is a path to the x3dna tool, which is used for DNA structure analysis. # Example: /path/to/x3dna-v2.4 -X3DNA_PATH= +X3DNA_PATH=/projects/ml/prot_dna/x3dna-v2.4 # For secondary structure prediction (not currently used) -DSSP_PATH= +DSSP_PATH=/projects/ml/dssp/install/bin/mkdssp # The `HHFILTER_PATH` is a path to the hhfilter tool from the HH-suite, which is used for # filtering MSAs to reduce redundancy. From 716c16a7ec38d0aacfff435c0ba0d0347a73d543 Mon Sep 17 00:00:00 2001 From: afavor Date: Fri, 30 Jan 2026 13:32:46 -0800 Subject: [PATCH 08/49] Add nucleic SS metrics + conditioning + pseudoknot dataset config --- models/rfd3/configs/datasets/design_base.yaml | 3 + .../train/pdb/base_transform_args.yaml | 6 +- .../datasets/val/design_validation_base.yaml | 3 +- .../rfd3/configs/datasets/val/pseudoknot.yaml | 9 + models/rfd3/configs/experiment/rfd3na-ss.yaml | 87 + .../configs/model/components/rfd3_net.yaml | 3 + .../trainer/metrics/design_metrics.yaml | 9 + .../src/rfd3/metrics/nucleic_ss_metrics.py | 314 +++ models/rfd3/src/rfd3/model/layers/blocks.py | 32 + models/rfd3/src/rfd3/model/layers/encoders.py | 5 + .../src/rfd3/transforms/design_transforms.py | 85 + models/rfd3/src/rfd3/transforms/na_geom.py | 285 +++ .../rfd3/src/rfd3/transforms/na_geom_utils.py | 1708 +++++++++++++++++ models/rfd3/src/rfd3/transforms/pipelines.py | 20 + 14 files changed, 2567 insertions(+), 2 deletions(-) create mode 100644 models/rfd3/configs/datasets/val/pseudoknot.yaml create mode 100644 models/rfd3/configs/experiment/rfd3na-ss.yaml create mode 100644 models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py create mode 100644 models/rfd3/src/rfd3/transforms/na_geom.py create mode 100644 models/rfd3/src/rfd3/transforms/na_geom_utils.py diff --git a/models/rfd3/configs/datasets/design_base.yaml b/models/rfd3/configs/datasets/design_base.yaml index a6995893..02ee92a6 100644 --- a/models/rfd3/configs/datasets/design_base.yaml +++ b/models/rfd3/configs/datasets/design_base.yaml @@ -62,6 +62,9 @@ global_transform_args: min_ss_island_len: 1 max_ss_island_len: 10 + # Nucleic acid features + add_na_pair_features: false + train_conditions: unconditional: frequency: 5.0 diff --git a/models/rfd3/configs/datasets/train/pdb/base_transform_args.yaml b/models/rfd3/configs/datasets/train/pdb/base_transform_args.yaml index 08c735ca..28e2384d 100644 --- a/models/rfd3/configs/datasets/train/pdb/base_transform_args.yaml +++ b/models/rfd3/configs/datasets/train/pdb/base_transform_args.yaml @@ -43,6 +43,9 @@ dataset: min_ss_island_len: ${datasets.global_transform_args.min_ss_island_len} max_ss_island_len: ${datasets.global_transform_args.max_ss_island_len} + # Nucleic acid features + add_na_pair_features: ${datasets.global_transform_args.add_na_pair_features} + # Cropping crop_size: ${datasets.crop_size} max_atoms_in_crop: ${datasets.max_atoms_in_crop} @@ -56,4 +59,5 @@ dataset: # Other dataset-specific parameters atom_1d_features: ${model.net.token_initializer.atom_1d_features} - token_1d_features: ${model.net.token_initializer.token_1d_features} \ No newline at end of file + token_1d_features: ${model.net.token_initializer.token_1d_features} + token_2d_features: ${model.net.token_initializer.token_2d_features} diff --git a/models/rfd3/configs/datasets/val/design_validation_base.yaml b/models/rfd3/configs/datasets/val/design_validation_base.yaml index 5aabcc07..90931e09 100644 --- a/models/rfd3/configs/datasets/val/design_validation_base.yaml +++ b/models/rfd3/configs/datasets/val/design_validation_base.yaml @@ -37,4 +37,5 @@ dataset: # Other dataset-specific parameters atom_1d_features: ${model.net.token_initializer.atom_1d_features} - token_1d_features: ${model.net.token_initializer.token_1d_features} \ No newline at end of file + token_1d_features: ${model.net.token_initializer.token_1d_features} + token_2d_features: ${model.net.token_initializer.token_2d_features} \ No newline at end of file diff --git a/models/rfd3/configs/datasets/val/pseudoknot.yaml b/models/rfd3/configs/datasets/val/pseudoknot.yaml new file mode 100644 index 00000000..27b801c5 --- /dev/null +++ b/models/rfd3/configs/datasets/val/pseudoknot.yaml @@ -0,0 +1,9 @@ + +defaults: + - unconditional + - _self_ + +dataset: + name: pseudoknot + eval_every_n: 1 + data: /home/afavor/git/RFD3/modelhub/projects/aa_design/tests/test_data/pseudoknot.json diff --git a/models/rfd3/configs/experiment/rfd3na-ss.yaml b/models/rfd3/configs/experiment/rfd3na-ss.yaml new file mode 100644 index 00000000..614f20fc --- /dev/null +++ b/models/rfd3/configs/experiment/rfd3na-ss.yaml @@ -0,0 +1,87 @@ +# @package _global_ +# Training configuration for RFD3 + +defaults: + - /debug/default + - override /model: rfd3_base + - override /logger: null + - _self_ + +name: rfd3na-SScond +tags: [print-model] +ckpt_path: null + +model: + net: + token_initializer: + token_1d_features: + ref_motif_token_type: 3 + restype: 32 + is_dna_token: 1 + is_rna_token: 1 + is_protein_token: 1 + token_2d_features: + bp_partners: 3 # Unspecified, pair, loop + atom_1d_features: + ref_atom_name_chars: 256 + ref_element: 128 + ref_charge: 1 + ref_mask: 1 + ref_is_motif_atom_with_fixed_coord: 1 + ref_is_motif_atom_unindexed: 1 + has_zero_occupancy: 1 + ref_pos: 3 + + # Guided features + ref_atomwise_rasa: 3 + active_donor: 1 + active_acceptor: 1 + is_atom_level_hotspot: 1 + diffusion_module: + n_recycle: 2 + use_local_token_attention: True + diffusion_transformer: + n_local_tokens: 32 + n_keys: 128 + + inference_sampler: + num_timesteps: 100 + + +datasets: + diffusion_batch_size_train: 16 + crop_size: 256 + max_atoms_in_crop: 2560 # ~10x crop size. + global_transform_args: + association_scheme: atom23 + add_na_pair_features: true + train_conditions: + unconditional: + frequency: 2.0 + island: + frequency: 2.0 + sequence_design: + frequency: 0.5 + tipatom: + frequency: 5.0 + ppi: + frequency: 0.0 + train: + # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. + pdb: + probability: 1.0 + # rna_monomer_distillation: + # probability: 1.0 + + # val: + # pseudoknot: + # dataset: + # # eval_every_n: 10 + # eval_every_n: 2 + +trainer: + devices_per_node: 1 + limit_train_batches: 10 + limit_val_batches: 1 + validate_every_n_epochs: 5 + prevalidate: false diff --git a/models/rfd3/configs/model/components/rfd3_net.yaml b/models/rfd3/configs/model/components/rfd3_net.yaml index 40334833..83cddc4b 100644 --- a/models/rfd3/configs/model/components/rfd3_net.yaml +++ b/models/rfd3/configs/model/components/rfd3_net.yaml @@ -25,6 +25,9 @@ token_initializer: # formerly known as the trunk ref_plddt: 1 is_non_loopy: 1 + # Optional 2D token feature definitions (empty by default) + token_2d_features: {} + downcast: ${model.net.diffusion_module.downcast} atom_1d_features: ref_atom_name_chars: 256 diff --git a/models/rfd3/configs/trainer/metrics/design_metrics.yaml b/models/rfd3/configs/trainer/metrics/design_metrics.yaml index 2a456051..b73bd840 100644 --- a/models/rfd3/configs/trainer/metrics/design_metrics.yaml +++ b/models/rfd3/configs/trainer/metrics/design_metrics.yaml @@ -20,3 +20,12 @@ hbond_metrics: _target_: rfd3.metrics.hbonds_hbplus_metrics.HbondMetrics cutoff_HA_dist: 3 cutoff_DA_distance: 3.5 + +nucleic_ss_similarity: + _target_: rfd3.metrics.nucleic_ss_metrics.NucleicSSSimilarityMetrics + restrict_to_nucleic: True + compute_for_diffused_region_only: False + annotate_predicted_fresh: True + annotation_NA_only: False + annotation_planar_only: True + diff --git a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py new file mode 100644 index 00000000..6a0c8d44 --- /dev/null +++ b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py @@ -0,0 +1,314 @@ +import logging + +import bdb +import numpy as np +from biotite.structure import AtomArray +from atomworks.ml.utils.token import ( + get_token_starts, +) + +from rfd3.transforms.na_geom_utils import annotate_na_ss + +from foundry.metrics.metric import Metric +from foundry.utils.ddp import RankedLogger + +logging.basicConfig(level=logging.INFO) +global_logger = RankedLogger(__name__, rank_zero_only=False) + + +def _safe_f1_from_sizes(intersection_n: int, pred_n: int, gt_n: int) -> float: + """Return F1 with sensible empty-set handling.""" + if pred_n == 0 and gt_n == 0: + return 1.0 + + precision = float(intersection_n / pred_n) if pred_n > 0 else 0.0 + recall = float(intersection_n / gt_n) if gt_n > 0 else 0.0 + + if precision + recall == 0.0: + return 0.0 + + return float(2.0 * precision * recall / (precision + recall)) + + +def _get_token_ids(atom_array: AtomArray) -> np.ndarray: + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + return np.asarray(token_level_array.token_id, dtype=int) + + +def _get_candidate_token_ids( + atom_array: AtomArray, + *, + restrict_to_nucleic: bool, + compute_for_diffused_region_only: bool, +) -> set[int]: + """Return a set of token_ids to include for scoring.""" + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + token_ids = np.asarray(token_level_array.token_id, dtype=int) + + token_mask = np.ones(len(token_ids), dtype=bool) + + if restrict_to_nucleic: + is_rna = ( + np.asarray(getattr(token_level_array, "is_rna"), dtype=bool) + if hasattr(token_level_array, "is_rna") + else np.zeros(len(token_ids), dtype=bool) + ) + is_dna = ( + np.asarray(getattr(token_level_array, "is_dna"), dtype=bool) + if hasattr(token_level_array, "is_dna") + else np.zeros(len(token_ids), dtype=bool) + ) + token_mask &= (is_rna | is_dna) if (is_rna.any() or is_dna.any()) else token_mask + + if compute_for_diffused_region_only: + if hasattr(token_level_array, "is_motif_atom"): + token_mask &= ~np.asarray(token_level_array.is_motif_atom, dtype=bool) + elif hasattr(token_level_array, "is_motif_token"): + token_mask &= ~np.asarray(token_level_array.is_motif_token, dtype=bool) + + return set(int(t) for t in token_ids[token_mask].tolist()) + + +def _extract_bp_pairs( + atom_array: AtomArray, + *, + allowed_token_ids: set[int], +) -> set[tuple[int, int]]: + """Extract unordered base-pair edges from bp_partner annotations. + + Pairs are represented as (min_token_id, max_token_id). + """ + if "bp_partner" not in atom_array.get_annotation_categories(): + raise ValueError("atom_array missing bp_partner annotation") + + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + token_ids = np.asarray(token_level_array.token_id, dtype=int) + token_id_to_pos = {int(tid): i for i, tid in enumerate(token_ids.tolist())} + + bp_partner_ann = atom_array.bp_partner + pairs: set[tuple[int, int]] = set() + + for pos, start_idx in enumerate(token_starts.tolist()): + i_tid = int(token_ids[pos]) + if i_tid not in allowed_token_ids: + continue + + partners = bp_partner_ann[int(start_idx)] + if partners is None: + continue + if not isinstance(partners, (list, tuple, np.ndarray)): + continue + + for partner_token_id in partners: + try: + j_tid = int(partner_token_id) + except Exception: + continue + + if j_tid == i_tid or j_tid not in allowed_token_ids: + continue + + if j_tid not in token_id_to_pos: + continue + + a, b = (i_tid, j_tid) if i_tid < j_tid else (j_tid, i_tid) + pairs.add((a, b)) + + return pairs + + +def _extract_loop_and_paired_token_ids( + atom_array: AtomArray, + *, + allowed_token_ids: set[int], +) -> tuple[set[int], set[int]]: + """Return (loop_token_ids, paired_token_ids) within the allowed token set.""" + if "bp_partner" not in atom_array.get_annotation_categories(): + raise ValueError("atom_array missing bp_partner annotation") + + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + token_ids = np.asarray(token_level_array.token_id, dtype=int) + token_id_to_pos = {int(tid): i for i, tid in enumerate(token_ids.tolist())} + + bp_partner_ann = atom_array.bp_partner + + loop_token_ids: set[int] = set() + paired_token_ids: set[int] = set() + + for pos, start_idx in enumerate(token_starts.tolist()): + i_tid = int(token_ids[pos]) + if i_tid not in allowed_token_ids: + continue + + partners = bp_partner_ann[int(start_idx)] + # New semantics: + # - None => unannotated/masked (NOT a loop) + # - [] => explicitly unpaired loop + if partners is None: + continue + if not isinstance(partners, (list, tuple, np.ndarray)): + continue + if len(partners) == 0: + loop_token_ids.add(i_tid) + continue + + for partner_token_id in partners: + try: + j_tid = int(partner_token_id) + except Exception: + continue + + if j_tid == i_tid or j_tid not in allowed_token_ids: + continue + if j_tid not in token_id_to_pos: + continue + paired_token_ids.add(i_tid) + paired_token_ids.add(j_tid) + + return loop_token_ids, paired_token_ids + + +class NucleicSSSimilarityMetrics(Metric): + """Secondary-structure similarity for nucleic acids. + + Reports: + - `pair_f1`: F1 over the set of basepair edges implied by token-level `bp_partner`. + - `loop_f1`: F1 over explicitly-unpaired loop tokens (`bp_partner == []`). + Unannotated tokens (`bp_partner is None`) are masked. + - `weighted_f1`: GT-weighted average of `pair_f1` and `loop_f1`, weighted by + the prevalence of paired vs loop tokens in the GT. + """ + + def __init__( + self, + *, + restrict_to_nucleic: bool = True, + compute_for_diffused_region_only: bool = False, + annotate_predicted_fresh: bool = False, + annotation_NA_only: bool = False, + annotation_planar_only: bool = True, + ): + super().__init__() + self.restrict_to_nucleic = restrict_to_nucleic + self.compute_for_diffused_region_only = compute_for_diffused_region_only + self.annotate_predicted_fresh = annotate_predicted_fresh + self.annotation_NA_only = annotation_NA_only + self.annotation_planar_only = annotation_planar_only + + @property + def kwargs_to_compute_args(self): + return { + "ground_truth_atom_array_stack": ("ground_truth_atom_array_stack",), + "predicted_atom_array_stack": ("predicted_atom_array_stack",), + } + + def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): + if ground_truth_atom_array_stack is None or predicted_atom_array_stack is None: + return {} + + pair_f1_list: list[float] = [] + loop_f1_list: list[float] = [] + weighted_f1_list: list[float] = [] + + n_valid = 0 + + for gt_arr, pred_arr in zip(ground_truth_atom_array_stack, predicted_atom_array_stack): + try: + if "bp_partner" not in gt_arr.get_annotation_categories(): + continue + + # Important: predicted AtomArrays are built from a template AtomArray. + # If that template already carries bp_partner (often GT-derived), the + # prediction can inherit it, yielding artificially perfect scores. + # Optionally recompute bp_partner from the *predicted coordinates*. + + if self.annotate_predicted_fresh: + annotate_na_ss( + pred_arr, + NA_only=self.annotation_NA_only, + planar_only=self.annotation_planar_only, + overwrite=True, + p_canonical_bp_filter=0.0, + ) + + if "bp_partner" not in pred_arr.get_annotation_categories(): + continue + + # Basic sanity check: token counts should match for aligned comparisons. + gt_token_ids = _get_token_ids(gt_arr) + pred_token_ids = _get_token_ids(pred_arr) + if len(gt_token_ids) != len(pred_token_ids): + continue + + # Restrict to token_ids that are valid in both arrays. + gt_allowed = _get_candidate_token_ids( + gt_arr, + restrict_to_nucleic=self.restrict_to_nucleic, + compute_for_diffused_region_only=self.compute_for_diffused_region_only, + ) + pred_allowed = _get_candidate_token_ids( + pred_arr, + restrict_to_nucleic=self.restrict_to_nucleic, + compute_for_diffused_region_only=self.compute_for_diffused_region_only, + ) + allowed = gt_allowed & pred_allowed + + if len(allowed) == 0: + continue + + gt_pairs = _extract_bp_pairs(gt_arr, allowed_token_ids=allowed) + pred_pairs = _extract_bp_pairs(pred_arr, allowed_token_ids=allowed) + + gt_loop, gt_paired_tokens = _extract_loop_and_paired_token_ids( + gt_arr, allowed_token_ids=allowed + ) + pred_loop, _pred_paired_tokens = _extract_loop_and_paired_token_ids( + pred_arr, allowed_token_ids=allowed + ) + + pair_tp = len(gt_pairs & pred_pairs) + pair_pred_n = len(pred_pairs) + pair_gt_n = len(gt_pairs) + + loop_tp = len(gt_loop & pred_loop) + loop_pred_n = len(pred_loop) + loop_gt_n = len(gt_loop) + + pair_f1 = _safe_f1_from_sizes(pair_tp, pair_pred_n, pair_gt_n) + loop_f1 = _safe_f1_from_sizes(loop_tp, loop_pred_n, loop_gt_n) + + pair_weight = len(gt_paired_tokens) + loop_weight = len(gt_loop) + total_weight = pair_weight + loop_weight + if total_weight == 0: + weighted_f1 = 1.0 + else: + weighted_f1 = float( + (pair_weight * pair_f1 + loop_weight * loop_f1) / total_weight + ) + + pair_f1_list.append(pair_f1) + loop_f1_list.append(loop_f1) + weighted_f1_list.append(weighted_f1) + n_valid += 1 + + except bdb.BdbQuit: + # Allow interactive debuggers (pdb) to cleanly abort without being swallowed. + raise + except Exception as e: + global_logger.error(f"Error computing nucleic-SS similarity: {e} | Skipping") + continue + + if n_valid == 0: + return {} + + return { + "pair_f1": float(np.mean(pair_f1_list)), + "loop_f1": float(np.mean(loop_f1_list)), + "weighted_f1": float(np.mean(weighted_f1_list)), + "n_valid_samples": int(n_valid), + } diff --git a/models/rfd3/src/rfd3/model/layers/blocks.py b/models/rfd3/src/rfd3/model/layers/blocks.py index eaf08093..f5cfe34f 100644 --- a/models/rfd3/src/rfd3/model/layers/blocks.py +++ b/models/rfd3/src/rfd3/model/layers/blocks.py @@ -143,6 +143,38 @@ def forward(self, f, collapse_length): ) ) +class TwoDFeatureEmbedder(nn.Module): + """ + Embeds 2D features into a single vector. + + Args: + features (dict): Dictionary of feature names and their number of channels. + output_channels (int): Output dimension of the projected embedding. + """ + + def __init__(self, features, output_channels): + super().__init__() + self.features = {k: v for k, v in features.items() if exists(v)} + total_embedding_input_features = sum(self.features.values()) + self.embedders = nn.ModuleDict( + { + feature: EmbeddingLayer( + n_channels, total_embedding_input_features, output_channels + ) + for feature, n_channels in self.features.items() + } + ) + def collapse2D(self, x, L): + return x.reshape((L, L, x.numel() // (L * L))) + + def forward(self, f, collapse_length): + return sum( + tuple( + self.embedders[feature](self.collapse2D(f[feature].float(), collapse_length)) + for feature, n_channels in self.features.items() + if exists(n_channels) + ) + ) class SinusoidalDistEmbed(nn.Module): """ diff --git a/models/rfd3/src/rfd3/model/layers/encoders.py b/models/rfd3/src/rfd3/model/layers/encoders.py index b0ed86fa..363fc4de 100644 --- a/models/rfd3/src/rfd3/model/layers/encoders.py +++ b/models/rfd3/src/rfd3/model/layers/encoders.py @@ -11,6 +11,7 @@ Downcast, LocalAtomTransformer, OneDFeatureEmbedder, + TwoDFeatureEmbedder, PositionPairDistEmbedder, RelativePositionEncodingWithIndexRemoval, SinusoidalDistEmbed, @@ -49,6 +50,7 @@ def __init__( pairformer_block, downcast, token_1d_features, + token_2d_features, atom_1d_features, atom_transformer, use_chunked_pll=False, # New parameter for memory optimization @@ -62,6 +64,7 @@ def __init__( self.atom_1d_embedder_1 = OneDFeatureEmbedder(atom_1d_features, c_s) self.atom_1d_embedder_2 = OneDFeatureEmbedder(atom_1d_features, c_atom) self.token_1d_embedder = OneDFeatureEmbedder(token_1d_features, c_s) + self.token_2d_embedder = TwoDFeatureEmbedder(token_2d_features, c_z) self.downcast_atom = Downcast(c_atom=c_s, c_token=c_s, c_s=None, **downcast) self.transition_post_token = Transition(c=c_s, n=2) @@ -202,6 +205,8 @@ def init_tokens(): Z_init_II = Z_init_II + self.ref_pos_embedder_tok( f["ref_pos"][f["is_ca"]], valid_mask ) + # Add extra token pair features + Z_init_II = Z_init_II + self.token_2d_embedder(f, I) # Run a small transformer to provide position encodings to single. for block in self.transformer_stack: diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index ac17ec29..36a8b43d 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -45,6 +45,7 @@ get_af3_token_representative_masks, ) from rfd3.transforms.virtual_atoms import PadTokensWithVirtualAtoms +from rfd3.transforms.na_geom import get_bp_feats_from_atom_array from foundry.utils.ddp import RankedLogger # noqa @@ -776,6 +777,90 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: data = self.generate_feature(feature_name, n_dims, data, "atom") return data + + + +class AddAdditional2dFeaturesToFeats(Transform): + """ + Adds any net.token_initializer.token_2d_features and net.diffusion_module.diffusion_atom_encoder.atom_2d_features present in the atomarray but not in data['feats'] to data['feats'] + Args: + - autofill_zeros_if_not_present_in_atomarray: self explanatory + - token_2d_features: List of single-item dictionaries, corresponding to feature_name: n_feature_dims. Should be hydra interpolated from + net.token_initializer.token_2d_features + """ + + incompatible_previous_transforms = ["AddAdditional2dFeaturesToFeats"] + + def __init__( + self, + token_2d_features, + autofill_zeros_if_not_present_in_atomarray=False, + association_scheme="atom14", + ): + self.autofill = autofill_zeros_if_not_present_in_atomarray + self.token_2d_features = token_2d_features + self.association_scheme = association_scheme + + # Need to pre-define custom constructor functions + # to map from atomarray annotations to tensors. + self.constructor_functions = { + 'bp_partners': get_bp_feats_from_atom_array, + } + + def check_input(self, data) -> None: + check_contains_keys(data, ["atom_array"]) + check_is_instance(data, "atom_array", AtomArray) + + def generate_token_feature(self, feature_name, n_dims, data): + + # Don't do this if we already have the feature + if feature_name in data["feats"].keys(): + return data + + # For these, we need to use a constructor function mapping, + # since pair features may require custom logic/conventions. + if feature_name in self.constructor_functions.keys(): + feature_array = self.constructor_functions[feature_name](data["atom_array"]) + else: + raise ValueError( + f"No constructor function found for 2d feature `{feature_name}`" + ) + + # We can fix shape issues here: + if len(feature_array.shape) == 2 and n_dims == 1: + feature_array = feature_array.unsqueeze(1) + + # ensure that feature_array is a 3d array with third dim == n_dims: + if len(feature_array.shape) != 3: + raise ValueError( + f"token 2d_feature `{feature_name}` must be a 3d array, got {len(feature_array.shape)}d." + ) + if feature_array.shape[2] != n_dims: + raise ValueError( + f"token 2d_feature `{feature_name}` dimensions in atomarray ({feature_array.shape[-1]}) does not match dimension declared in config, ({n_dims})" + ) + # Ensure correct shape in first two dims (I,I,...) + if feature_array.shape[0] != feature_array.shape[1]: + raise ValueError( + f"token 2d_feature `{feature_name}` first two dimensions must be equal (square matrix), got {feature_array.shape[0]} and {feature_array.shape[1]}" + ) + + data["feats"][feature_name] = feature_array + + return data + + def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: + """ + Checks if the 2d_features are present in data['feats']. If not present, adds them from the atomarray. + If annotation is not present in atomarray, either autofills the feature with 0s or throws an error + """ + if "feats" not in data.keys(): + data["feats"] = {} + # Only apply for features that the model is expecting: + for feature_name, n_dims in self.token_2d_features.items(): + data = self.generate_token_feature(feature_name, n_dims, data) + + return data class FeaturizepLDDT(Transform): diff --git a/models/rfd3/src/rfd3/transforms/na_geom.py b/models/rfd3/src/rfd3/transforms/na_geom.py new file mode 100644 index 00000000..ebb076d3 --- /dev/null +++ b/models/rfd3/src/rfd3/transforms/na_geom.py @@ -0,0 +1,285 @@ +from typing import Any +import numpy as np +from functools import partial +from biotite.structure import AtomArray +from atomworks.ml.transforms._checks import ( + check_atom_array_annotation, + check_contains_keys, + check_is_instance, +) +from atomworks.ml.transforms.base import Transform +from rfd3.transforms.conditioning_utils import sample_island_tokens +from rfd3.transforms.na_geom_utils import ( + annotate_na_ss, + annotate_na_ss_from_data_specification, + bp_partner_to_ss_matrix, +) + +from atomworks.ml.utils.token import spread_token_wise, get_token_starts + +def get_bp_feats_from_atom_array( + atom_array: AtomArray, +) -> np.ndarray: + """Build NA-SS features from atom_array annotations, assuming 'bp_partners' is present. + + This function reconstructs the SS matrix from the 'bp_partners' annotation on the atom_array, + then one-hot encodes it into a 3-class matrix (mask, pair, loop). + """ + # Fixed feature info (inferred from usage in other functions) + feature_info = { + 'NA_SS_MASK': 0, # Unspecified + 'NA_SS_PAIR': 1, # Paired + 'NA_SS_LOOP': 2, # Loop / unpaired + 'num_classes_nucleic_ss': 3, + } + + # Check for required annotation + if "bp_partners" not in atom_array.get_annotation_categories(): + raise ValueError("atom_array must have 'bp_partners' annotation for NA-SS feature building.") + + # Reconstruct SS matrix from annotations + na_ss_matrix = np.asarray( + bp_partner_to_ss_matrix( + atom_array, + feature_info=feature_info, + NA_only=False, # Include all residues (logic from other utils) + planar_only=True, # Use planar interactions (common default) + include_loops=True, # Include loop states + ), + dtype=np.int64, + ) + + # One-hot encode the matrix + na_ss_matrix_int = np.asarray(na_ss_matrix, dtype=np.int64) + eye = np.eye(int(feature_info['num_classes_nucleic_ss']), dtype=np.int64) + return eye[na_ss_matrix_int] + + +def _build_na_ss_features_from_annotations( + atom_array: AtomArray, + *, + feature_info: dict, + num_classes: int, + NA_only: bool, + planar_only: bool, + is_nucleic_ss_example: bool, + give_partial_feats: bool, + get_feature_mask_fn, +) -> np.ndarray: + """Reconstruct SS matrix from annotations, optionally mask, then one-hot.""" + na_ss_matrix = np.asarray( + bp_partner_to_ss_matrix( + atom_array, + feature_info=feature_info, + NA_only=NA_only, + planar_only=planar_only, + include_loops=True, + ), + dtype=np.int64, + ) + + n_tokens = int(na_ss_matrix.shape[0]) + + if give_partial_feats: + is_shown = ( + np.asarray(get_feature_mask_fn(n_tokens), dtype=bool) + if is_nucleic_ss_example + else np.zeros((n_tokens,), dtype=bool) + ) + na_ss_matrix[~is_shown, :] = feature_info["NA_SS_MASK"] + na_ss_matrix[:, ~is_shown] = feature_info["NA_SS_MASK"] + + na_ss_matrix_int = np.asarray(na_ss_matrix, dtype=np.int64) + eye = np.eye(int(num_classes), dtype=np.int64) + return eye[na_ss_matrix_int] + + +class CalculateNucleicAcidGeomFeats(Transform): + """ + Transform for constructing nucleic-acid conditioning features. + + This transform currently produces only nucleic-acid secondary-structure (NA-SS) + features as a 2D token-token matrix with 3 bins: + * 0: mask / unspecified + * 1: paired + * 2: loop / explicitly unpaired + + Training: + - Computes geometry/H-bond-based base pairs and writes them onto the AtomArray + via the ``bp_partner`` annotation (annotation-first), then reconstructs the + matrix (and optionally masks parts of it) before one-hot encoding. + + Inference: + - Interprets user-provided secondary-structure specifications, writes the same + ``bp_partner`` annotation, then follows the same matrix + one-hot path. + + Note: helical-parameter features are not implemented/used in this refactored path. + """ + + def __init__( + self, + is_inference, + add_nucleic_ss_feats: bool = True, + + p_is_nucleic_ss_example: float = 0.3, + p_show_partial_feats: float = 0.5, + nucleic_ss_min_shown: float = 0.0, + nucleic_ss_max_shown: float = 1.0, + n_islands_min: int = 1, + n_islands_max: int = 6, + p_canonical_bp_filter: float = 0.0, + + # USE_RF2AA_NAMES: bool = False, + NA_only: bool = False, + planar_only : bool = True, + + ): + # Critical, must always have to know how to handle + self.is_inference = is_inference + + # For sampling whether we add nucleic-ss features (extra t2d) + self.add_nucleic_ss_feats = add_nucleic_ss_feats + self.p_canonical_bp_filter = p_canonical_bp_filter # enforce that bp labels are only canonical + self.p_is_nucleic_ss_example = p_is_nucleic_ss_example + self.nucleic_ss_min_shown = nucleic_ss_min_shown + self.nucleic_ss_max_shown = nucleic_ss_max_shown + self.n_islands_min = n_islands_min + self.n_islands_max = n_islands_max + + self.p_show_partial_feats = p_show_partial_feats + + # Filters for what can be considered a planar contact interaction + self.NA_only = NA_only # only annotate base-like interactions for nucleic acid residues + self.planar_only = planar_only # only consider planar atoms in sidechains for geometry calculations, + self.p_canonical_bp_filter = p_canonical_bp_filter # probability of enforcing canonical base pair filter + + # Inds of annotation types in the nucleic-ss features (stack of 3 matrices): + self.feature_info = { + 'NA_SS_MASK' : 0, # Unspecified, or sm, or protein: + 'NA_SS_PAIR' : 1, + 'NA_SS_LOOP' : 2, + 'num_classes_nucleic_ss' : 3, + } + + + def check_input(self, data: dict[str, Any]) -> None: + check_contains_keys(data, ["atom_array"]) + check_is_instance(data, "atom_array", AtomArray) + check_atom_array_annotation(data, ["res_name"]) + # maybe do later: check_atom_array_has_hydrogen(data) + + def _sample_training_flags(self) -> tuple[bool, bool]: + """Sample booleans controlling whether/how features are shown in training.""" + is_nucleic_ss_example = bool( + self.add_nucleic_ss_feats + and (np.random.rand() < self.p_is_nucleic_ss_example) + ) + give_partial_feats = bool( + np.random.rand() < self.p_show_partial_feats + ) + return is_nucleic_ss_example, give_partial_feats + + def forward(self, data: dict) -> dict: + atom_array = data["atom_array"] + + # Calculate n_tokens (assuming one token per residue for simplicity) + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + token_ids = [int(t) for t in token_level_array.token_id] + n_tokens = len(token_starts) + print(" DO I NEED TO CHANGE TO TOKEN_ID???") + # Handle the training case with ground truth and masking: + if not self.is_inference: + + # First, annotate as usual + # atom_array = annotate_na_ss(atom_array, **kwargs) + atom_array = annotate_na_ss(atom_array, + NA_only=self.NA_only, + planar_only=self.planar_only, + p_canonical_bp_filter=self.p_canonical_bp_filter, + ) + + # Sample mask on token level: + is_nucleic_ss_example, give_partial_feats = self._sample_training_flags() + is_ss_shown = self._sample_where_to_show_ss(n_tokens, + is_nucleic_ss_example=is_nucleic_ss_example, + give_partial_feats=give_partial_feats) # Mask vec for tokens where ss shown + # Spread mask to atom level + is_ss_shown = spread_token_wise(atom_array, is_ss_shown) + + + # Extract the base pair annotations + bp_partners_atom = atom_array.get_annotation("bp_partners") + + # Remove unshown positions from bp_partners annotation + bp_partners_atom[~is_ss_shown] = None + + # Reset the annotation with newly hidden positions + atom_array.set_annotation("bp_partners", bp_partners_atom) + + # Inference case: create from commandline args + else: + """ + Different cases handled: + - 1). Single dot-bracket string + - 2). multiple dot bracket strings with chain/ind ranges specified + - 3). Lists of paired indices + + """ + is_nucleic_ss_example=True + give_partial_feats=False + atom_array = annotate_na_ss_from_data_specification( + data, + overwrite=True, + ) + + # Check feats existence and update: + if "feats" not in data: + data["feats"] = {} + + # data["feats"].update(nucleic_features) + data.setdefault("log_dict", {}) + log_dict = data["log_dict"] + data["log_dict"] = log_dict + data["atom_array"] = atom_array + + return data + + + def _sample_where_to_show_ss(self, n_tokens: int, + is_nucleic_ss_example: bool = True, + give_partial_feats: bool = True, + ) -> np.ndarray: + """Sample token-level islands indicating which SS rows/cols to reveal.""" + # If NOT is_nucleic_ss_example, set is_shown to all False + if not is_nucleic_ss_example: + return np.zeros((n_tokens,), dtype=bool) + + # If NOT give_partial_feats, set is_shown to all True + if not give_partial_feats: + return np.ones((n_tokens,), dtype=bool) + else: + frac_shown = ( + self.nucleic_ss_min_shown + + (self.nucleic_ss_max_shown - self.nucleic_ss_min_shown) * np.random.rand() + ) + frac_shown = float(np.clip(frac_shown, 0.0, 1.0)) + max_length = int(np.ceil(frac_shown * n_tokens)) + if max_length <= 0: + return np.zeros((n_tokens,), dtype=bool) + + island_len_min = max(1, int(frac_shown * n_tokens // max(int(self.n_islands_max), 1))) + island_len_max = max(1, int(frac_shown * n_tokens // max(int(self.n_islands_min), 1))) + island_len_min = min(island_len_min, n_tokens) + island_len_max = min(island_len_max, n_tokens) + island_len_max = max(island_len_max, island_len_min) + + return sample_island_tokens( + n_tokens, + island_len_min=island_len_min, + island_len_max=island_len_max, + n_islands_min=self.n_islands_min, + n_islands_max=self.n_islands_max, + max_length=max_length, + ) + \ No newline at end of file diff --git a/models/rfd3/src/rfd3/transforms/na_geom_utils.py b/models/rfd3/src/rfd3/transforms/na_geom_utils.py new file mode 100644 index 00000000..61f80594 --- /dev/null +++ b/models/rfd3/src/rfd3/transforms/na_geom_utils.py @@ -0,0 +1,1708 @@ +import os +import subprocess +from datetime import datetime +from typing import Dict, Optional +import math +import numpy as np +from biotite.structure import AtomArray + +from atomworks.constants import ( + STANDARD_DNA, + STANDARD_RNA, +) + +from atomworks.io.utils.sequence import ( + is_purine, + is_pyrimidine, +) +from atomworks.ml.utils.token import ( + get_token_starts, + is_glycine, + is_protein_unknown, + is_standard_aa_not_glycine, + is_unknown_nucleotide, +) +from rfd3.transforms.hbonds_hbplus import save_atomarray_to_pdb + +from atomworks.ml.encoding_definitions import AF3SequenceEncoding + + +DEFAULT_NA_SS_FEATURE_INFO: dict[str, int] = { + "NA_SS_MASK": 0, + "NA_SS_PAIR": 1, + "NA_SS_LOOP": 2, + "num_classes_nucleic_ss": 3, +} + + +# Move to function scope to avoid module-level memory retention +def _get_sequence_encoding_data(): + """Get sequence encoding data on demand to avoid persistent module-level variables.""" + sequence_encoding = AF3SequenceEncoding() + return { + 'aa_like_res_names': sequence_encoding.all_res_names[sequence_encoding.is_aa_like], + 'rna_like_res_names': sequence_encoding.all_res_names[sequence_encoding.is_rna_like], + 'dna_like_res_names': sequence_encoding.all_res_names[sequence_encoding.is_dna_like], + 'sequence_encoding': sequence_encoding + } + + + +class NucMolInfo: + """ + Initializes constants and parameters relevant for computing nucleic acid geometry and interactions. + """ + def __init__(self, + cutoff_HA_dist = 2.5, + cutoff_DA_dist = 3.9, + ): + """ + Args: + kwargs: Optional keyword arguments for customization. + """ + + + # Optional parameters with default values + # self.incl_protein = True + self.eps = 1e-8 + # self.clamp_pairwise_params = True + # self.use_eigennormals = kwargs.get('use_eigennormals', True) + # self.use_all_base_atoms_for_MBD = kwargs.get('use_all_base_atoms_for_MBD', False) + self.edges_to_compute = ['S'] # list base edges to compute, if we want to analyze WC/Hoog/etc + self.perp_base_edge = 'S' # edge orthogonal to x- and z-directions in base frames (which is generally the sugar edge) + + self.cutoff_HA_dist = cutoff_HA_dist + self.cutoff_DA_dist = cutoff_DA_dist + self.seq_cutoff = 2 + self.gap_length = 200 + + + + + # Hbond interaction type inds when counting: + self.BB_BB = 0 + self.BB_SC = 1 + self.SC_SC = 2 + + self.bp_weight_BB_BB = 0.0 + self.bp_weight_BB_SC = 0.5 + self.bp_weight_SC_SC = 1.0 + + self.bp_summation_weights = [self.bp_weight_BB_BB, + self.bp_weight_BB_SC, + self.bp_weight_SC_SC] + + self.min_hbonds_for_bp = 2.0 + self.bp_hbond_coeff = 9.8 # determined heuristically + self.bp_val_cutoff = 0.5 # minimum basepairing score for binarizing basepairs when needed + + self.base_geometry_limits = {} + self.base_geometry_limits['D_ij'] = 20.0 + self.base_geometry_limits['H_ij'] = 1.5 + self.base_geometry_limits['P_ij'] = math.pi/5 + self.base_geometry_limits['B_ij'] = math.pi/5 + + # For interaction-edge classification (Watson-Crick, Hoogstein, Sugar, Base-other): + # self.edge_to_ind = {'W':0 , 'H':1 , 'S':2 ,'B':3} + self.rep_atom_dict={"protein": "CA", "rna": "C1'", "dna": "C1'"} + + self.has_planar_sc = { + 'ALA': False, + 'ARG': True, + 'ASN': True, + 'ASP': True, + 'CYS': False, + 'GLN': True, + 'GLU': True, + 'GLY': False, + 'HIS': True, + 'ILE': False, + 'LEU': False, + 'LYS': False, + 'MET': False, + 'PHE': True, + 'PRO': False, + 'SER': False, + 'THR': False, + 'TRP': True, + 'TYR': True, + 'VAL': False, + 'UNK': False, + 'MAS': False, + 'DA': True, + 'DC': True, + 'DG': True, + 'DT': True, + 'DX': False, + 'A': True, + 'C': True, + 'G': True, + 'U': True, + 'X': False, + 'HIS_D': True, + } + + + + # Make self.planar_atom_list_dict based on known planar atoms for each residue type: + self.planar_atom_list_dict = { + 'ALA': [], + 'ARG': ['NH1', 'NH2', 'CZ', 'NE', 'CD'], + 'ASN': ['OD1', 'ND2', 'CG', 'CB'], + 'ASP': ['OD1', 'OD2', 'CG', 'CB'], + 'CYS': [], + 'GLN': ['OE1', 'NE2', 'CD', 'CG'], + 'GLU': ['OE1', 'OE2', 'CD', 'CG'], + 'GLY': [], + 'HIS': ['ND1', 'CE1', 'NE2', 'CD2', 'CG', 'CB'], + 'ILE': [], + 'LEU': [], + 'LYS': [], + 'MET': [], + 'PHE': ['CZ', 'CE1', 'CE2', 'CD1', 'CD2', 'CG', 'CB'], + 'PRO': [], + 'SER': [], + 'THR': [], + 'TRP': ['CH2', 'CZ3', 'CZ2', 'CE3', 'CE2', 'CD2', 'NE1', 'CD1', 'CG', 'CB'], + 'TYR': ['OH', 'CZ', 'CE1', 'CE2', 'CD1', 'CD2', 'CG', 'CB'], + 'VAL': [], + 'UNK': [], + 'MAS': [], + 'DA': ['N6', 'C6', 'N1', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], + 'DC': ['N4', 'C4', 'N3', 'O2', 'C2', 'C5', 'C6', 'N1'], + 'DG': ['O6', 'C6', 'N1', 'N2', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], + 'DT': ['O4', 'O2', 'N3', 'C4', 'C2', 'C5', 'C6', 'N1', 'C7'], + 'DX': [], + 'A': ['N6', 'C6', 'N1', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], + 'C': ['N4', 'C4', 'N3', 'O2', 'C2', 'C5', 'C6', 'N1'], + 'G': ['O6', 'C6', 'N1', 'N2', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], + 'U': ['O4', 'O2', 'N3', 'C4', 'C2', 'C5', 'C6', 'N1'], + 'X': [], + 'HIS_D': ['ND1', 'CD2', 'CE1', 'NE2', 'CG', 'CB'], + } + + + # from pdb import set_trace; set_trace() + + self.nuc_resi_3letter = ["DA","DG","DC","DT","A","G","C","U"] + self.ring_atom_list = ["N1","C2","N3","C4","C6","C5"] + + # go through self.vec_atom_dict and remove spaces from atom names (values in inner dicts), and remove spaces from keys + replace 'R' with '' in outer dict keys + self.vec_atom_dict = { + "DA": {"W_start":"N1", "W_stop":"N6", "H_start":"N7", "H_stop":"N6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, + "DG": {"W_start":"N1", "W_stop":"O6", "H_start":"N7", "H_stop":"O6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, + "DC": {"W_start":"N3", "W_stop":"N4", "H_start":"C5", "H_stop":"N4", "S_start":"C1'", "S_stop":"O2", "B_start":"C1'", "B_stop":"N1" }, + "DT": {"W_start":"N3", "W_stop":"O4", "H_start":"C5", "H_stop":"O4", "S_start":"C1'", "S_stop":"O2", "B_start":"C1'", "B_stop":"N1" }, + "A": {"W_start":"N1", "W_stop":"N6", "H_start":"N7", "H_stop":"N6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, + "G": {"W_start":"N1", "W_stop":"O6", "H_start":"N7", "H_stop":"O6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, + "C": {"W_start":"N3", "W_stop":"N4", "H_start":"C5", "H_stop":"N4", "S_start":"C1'", "S_stop":"O2", "B_start":"C1'", "B_stop":"N1" }, + "U": {"W_start":"N3", "W_stop":"O4", "H_start":"C5", "H_stop":"O4", "S_start":"C1'", "S_stop":"O2", "B_start":"C1'", "B_stop":"N1" }, + } + + + + self.atom_region_dict = { + 'ALA': {'bb':('N','CA','C','O'), + 'sc':('CB')}, + 'ARG': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD','NE','CZ','NH1','NH2')}, + 'ASN': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','OD1','ND2')}, + 'ASP': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','OD1','OD2')}, + 'CYS': {'bb':('N','CA','C','O'), + 'sc':('CB','SG')}, + 'GLN': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD','OE1','NE2')}, + 'GLU': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD','OE1','OE2')}, + 'GLY': {'bb':('N','CA','C','O'), + 'sc':()}, + 'HIS': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','ND1','CD2','CE1','NE2')}, + 'ILE': {'bb':('N','CA','C','O'), + 'sc':('CB','CG1','CG2','CD1')}, + 'LEU': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD1','CD2')}, + 'LYS': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD','CE','NZ')}, + 'MET': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','SD','CE')}, + 'PHE': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ')}, + 'PRO': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD')}, + 'SER': {'bb':('N','CA','C','O'), + 'sc':('CB','OG')}, + 'THR': {'bb':('N','CA','C','O'), + 'sc':('CB','OG1','CG2')}, + 'TRP': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD1','CD2','CE2','CE3','NE1','CZ2','CZ3','CH2')}, + 'TYR': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ','OH')}, + 'VAL': {'bb':('N','CA','C','O'), + 'sc':('CB','CG1','CG2')}, + 'UNK': {'bb':('N','CA','C','O'), + 'sc':('CB')}, + 'MAS': {'bb':('N','CA','C','O'), + 'sc':('CB')}, + 'DA': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N6')}, + 'DC': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, + 'DG': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N2','O6')}, + 'DT': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':('N1','C2','O2','N3','C4','O4','C5','C7','C6')}, + 'DX': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'sc':()}, + 'A': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':('N1','C2','N3','C4','C5','C6','N6','N7','C8','N9')}, + 'C': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, + 'G': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':('N1','C2','N2','N3','C4','C5','C6','O6','N7','C8','N9')}, + 'U': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':('N1','C2','O2','N3','C4','O4','C5','C6')}, + 'X': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'sc':()}, + 'HIS_D': {'bb':('N','CA','C','O'), + 'sc':('CB','CG','NE2','CD2','CE1','ND1')}, + } + + + self.aa_planar_atoms = ['NH1', 'NH2', 'CZ', 'NE', 'OD1', 'ND2', + 'OD2', 'OE1', 'NE2', 'CD', 'OE2', 'ND1', + 'CD2', 'CE1', 'CD1', 'CE2', 'NE1', 'CZ2', + 'CZ3', 'CH2', 'CE3', 'OH', 'CG', 'CB',] + + self.na_planar_atoms = ['C4', 'N3', 'C2', 'C6', 'C5', 'N7', 'C8', + 'N6', 'O2', 'N4', 'N2', 'O6', 'O4', 'C7', + 'N9', 'N1'] + +def find_planar_positions( + atom_array: AtomArray, + mol_info: NucMolInfo, + tol: float = 1e-2, + ) -> Dict: + """ + Finds residues with planar sidechains based on four tip-most atoms, + but also checks for valid atoms to use for this type of calculation. + + Returns: + dict of planar atom lists + """ + unique_positions_list = [] + for atm in atom_array: + pos_id = (atm.chain_iid, atm.res_id, atm.res_name) + if pos_id not in unique_positions_list: + unique_positions_list.append(pos_id) + + # Get candidate planar atoms: + planar_atom_list_dict = {} + + # for chain_iid, res_id in unique_positions_list: + for chain_iid, res_id, res_name in unique_positions_list: + + mask = ( + (atom_array.chain_iid == chain_iid) & + (atom_array.res_id == res_id) & + (atom_array.res_name == res_name) + ) + res_atoms = atom_array[mask] + + # If possible, speed up by using known planar atoms for this residue type: + if res_name in mol_info.planar_atom_list_dict.keys(): + # Shared atoms between residue and known planar atoms for that residue type: + planar_atom_list = list( + set([atm.atom_name for atm in res_atoms]) & + set(mol_info.planar_atom_list_dict[res_name]) + ) + planar_atom_list_dict[(chain_iid, res_id)] = planar_atom_list + + # If unknown or noncanonical residue, compute planar atoms geometrically: + else: + candidate_planar_atm_names = [] + candidate_planar_atm_coords = [] + + for atm in res_atoms: + # Can pre-filter protein planar atoms: + if atm.is_protein and (atm.atom_name in mol_info.aa_planar_atoms): + candidate_planar_atm_names.append(atm.atom_name) + candidate_planar_atm_coords.append(atm.coord) + # Can pre-filter nucleic acid planar atoms: + elif (atm.is_rna or atm.is_dna) and (atm.atom_name in mol_info.na_planar_atoms): + candidate_planar_atm_names.append(atm.atom_name) + candidate_planar_atm_coords.append(atm.coord) + # Otherwise, consider all atoms for plane fitting: + else: + candidate_planar_atm_names.append(atm.atom_name) + candidate_planar_atm_coords.append(atm.coord) + + # reverse order to prioritize atoms further away from bb: + candidate_planar_atm_names = list(reversed(candidate_planar_atm_names)) + candidate_planar_atm_coords = list(reversed(candidate_planar_atm_coords)) + + # Use first four candidate atoms only to define the plane: + if len(candidate_planar_atm_coords) >= 4: + coords = np.asarray(candidate_planar_atm_coords, dtype=np.float32) + + # compute 4-atom based plane: + quad_coords = coords[:4, :] + + # fit plane via PCA (use smallest‑variance eigenvector as normal) + quad_center = quad_coords.mean(axis=0, keepdims=True) + all_quad_centered = coords - quad_center + quad_centered = quad_coords - quad_center + # covariance matrix + quad_cov = (quad_centered.T @ quad_centered) / max(quad_coords.shape[0] - 1, 1) + # eigen decomposition + _, quad_eigvecs = np.linalg.eigh(quad_cov) + quad_normal = quad_eigvecs[:, 0] # eigenvector with smallest eigenvalue + quad_normal = quad_normal / (np.linalg.norm(quad_normal) + 1e-8) + # compute distances from plane for all candidate atoms + quad_dists = np.abs(all_quad_centered @ quad_normal) + # keep only atoms within tolerance + quad_valid_mask = quad_dists <= tol + + # Filter for if we have a valid plane in the first place: + valid_plane_filter = (np.nanmax(quad_dists[:4]) < tol) + # Filter for if we have enough atoms in the plane: + plane_atom_filter = (int(np.sum(quad_valid_mask)) >= 4) + if valid_plane_filter and plane_atom_filter: + # Set the planar atom list for this position to those that are within tol of the plane: + # using quad_valid_mask and candidate_planar_atm_names: + planar_atom_list = [n for n, keep in zip(candidate_planar_atm_names, quad_valid_mask.tolist()) if keep] + + # not enough atoms close to a common plane + else: + planar_atom_list = [] + + else: + + # need at least 4 atoms to define a robust plane + planar_atom_list = [] + + planar_atom_list_dict[(chain_iid, res_id)] = planar_atom_list + + + return planar_atom_list_dict + + + + +def calculate_hb_counts( + atom_array: AtomArray, + token_level_data: dict, + mol_info: NucMolInfo, + cutoff_HA_dist: float = 2.5, + cutoff_DA_dist: float = 3.9, + ): + """ + Compute hbond counts between residues and return an (L, L, 3) + numpy array where the last dimension encodes: + 0 -> both backbone (BB-BB) + 1 -> one backbone, one sidechain (BB-SC) + 2 -> both sidechain (SC-SC) + """ + dtstr = datetime.now().strftime("%Y%m%d%H%M%S") + pdb_path = f"{dtstr}_{np.random.randint(10000)}.pdb" + + atom_array, nan_mask, chain_map = save_atomarray_to_pdb(atom_array, pdb_path) + subprocess.call( + [ + "/projects/ml/hbplus", + "-h", + str(cutoff_HA_dist), + "-d", + str(cutoff_DA_dist), + pdb_path, + pdb_path, + ], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + + num_resis_total = len(token_level_data["token_id_list"]) + + hbond_count = np.zeros((num_resis_total, num_resis_total, 3), dtype=np.int32) + + hb2_path = pdb_path.replace("pdb", "hb2") + with open(hb2_path, "r") as hb2_f: + for i, line in enumerate(hb2_f): + if i < 8: + continue + if len(line) < 28: + continue + + # Initialize donor/acceptor sidechain/backbone flags: + # then replace with True if valid for summation + d_is_sc = False + d_is_bb = False + a_is_sc = False + a_is_bb = False + + d_chain_iid = chain_map[line[0]] + d_resi = int(line[1:5].strip()) + d_resn = line[6:9].strip() + d_atom_name = line[9:13].strip() + + d_mask = ( + (atom_array.atom_name == d_atom_name) + & (atom_array.res_name == d_resn) + & (atom_array.res_id == d_resi) + & (atom_array.chain_iid == d_chain_iid) + ) + d_atm = atom_array[d_mask] + d_idx = d_atm.token_id + + # Handle standard polymer residues for donor atom: + if d_resn in mol_info.atom_region_dict.keys(): + d_is_sc = (d_atom_name in mol_info.atom_region_dict[d_resn]['sc']) + d_is_bb = (d_atom_name in mol_info.atom_region_dict[d_resn]['bb']) + else: + # If non-polymer, define any ligand HBonding atom as backbone: + if d_mask.sum() > 0: + d_is_bb = atom_array[d_mask][0].is_ligand + + a_chain_iid = chain_map[line[14]] + a_resi = int(line[15:19].strip()) + a_resn = line[20:23].strip() + a_atom_name = line[23:27].strip() + + a_mask = ( + (atom_array.atom_name == a_atom_name) + & (atom_array.res_name == a_resn) + & (atom_array.res_id == a_resi) + & (atom_array.chain_iid == a_chain_iid) + ) + a_atm = atom_array[a_mask] + a_idx = a_atm.token_id + + # Handle standard polymer residues for acceptor atom: + if a_resn in mol_info.atom_region_dict.keys(): + a_is_sc = (a_atom_name in mol_info.atom_region_dict[a_resn]['sc']) + a_is_bb = (a_atom_name in mol_info.atom_region_dict[a_resn]['bb']) + else: + # If non-polymer, define any ligand HBonding atom as backbone: + if a_mask.sum() > 0: + a_is_bb = atom_array[a_mask][0].is_ligand + + # 0 -> both backbone (BB-BB) + hbond_count[a_idx, d_idx, 0] += (a_is_bb * d_is_bb) + hbond_count[d_idx, a_idx, 0] += (d_is_bb * a_is_bb) + + # 1 -> one backbone, one sidechain (BB-SC) + hbond_count[a_idx, d_idx, 1] += (a_is_bb * d_is_sc) | (a_is_sc * d_is_bb) + hbond_count[d_idx, a_idx, 1] += (d_is_bb * a_is_sc) | (d_is_sc * a_is_bb) + + # 2 -> both sidechain (SC-SC) + hbond_count[a_idx, d_idx, 2] += (a_is_sc * d_is_sc) + hbond_count[d_idx, a_idx, 2] += (d_is_sc * a_is_sc) + + os.remove(pdb_path) + os.remove(hb2_path) + + return hbond_count + + + + +def make_coord_list(atom_array: AtomArray, + residue_list: list[str], + chain_list: list[str], + atom_list: list[str], + ) -> list[list[str]]: + """ + Given an atom array, and lists of residues, chains, and atom names, + return a list of coordinates for the specified atoms in the specified residues and chains. + If the atom is not found, return [NaN, NaN, NaN] for that atom. + The the three input lists must be of the same length, and the output list will have the same length as well. + Args: + atom_array: BioTite atom_array object + residue_list: list of residue names to consider + chain_list: list of chain identifiers to consider + atom_list: list of atom names to extract coordinates for + Returns: + coord_list: list of lists of coordinates for the specified atoms + + """ + coord_list = [] + for res_id, chain_id, atom_name in zip(residue_list, chain_list, atom_list): + + # Check if the residue exists in the atom array + if atom_name == "atomized": + # Check for atomized residue, in which case we take the first atom of the residue + # full mask should be length-1 if atomized + mask = ( + (atom_array.chain_id == chain_id) & + (atom_array.res_id == res_id) + ) + else: + # General case for non-atomized residues + # should have a unique solution, but we take the first entry either way. + mask = ( + (atom_array.chain_id == chain_id) & + (atom_array.res_id == res_id) & + (atom_array.atom_name == atom_name) + ) + + # Get the coordinates for the masked atoms + coords = atom_array.coord[mask][0:1] + + if len(coords) < 1: + coord_list.append([float("nan"), float("nan"), float("nan")]) + else: + coord_list.append(coords[0].tolist()) + + return coord_list + + +def get_token_level_metadata( + atom_array: AtomArray, + mol_info: "NucMolInfo", + *, + NA_only: bool = False, + planar_only: bool = True, +) -> dict: + """Lightweight token-level metadata. + + This intentionally avoids expensive coordinate-derived computations + (e.g., planar plane-fitting and geometry coordinate extraction). + + It is sufficient for: + - SS reconstruction / loop labeling from ``bp_partners`` + - inference-time SS specification parsing + + If you later need geometry keys (``xyz_planar``, ``frame_xyz``, ``M_i``), + call :func:`add_token_level_geometry_data`. + """ + + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + + token_index = np.arange(len(token_starts)) + + # molecule type flags + seq_data = _get_sequence_encoding_data() + is_protein = np.isin(token_level_array.res_name, seq_data["aa_like_res_names"]) + is_rna = np.isin(token_level_array.res_name, seq_data["rna_like_res_names"]) + is_dna = np.isin(token_level_array.res_name, seq_data["dna_like_res_names"]) + del seq_data + + is_na_arr = (is_dna | is_rna).astype(bool) + + chain_list: list[str] = [] + chain_iid_list: list[str] = [] + resi_list: list[int] = [] + ind_list: list[int] = [] + res_name_list: list[str] = [] + token_id_list: list[str] = [] + + rep_atom_list: list[str | None] = [] + S_start_atom_list: list[str | None] = [] + S_stop_atom_list: list[str | None] = [] + sc_planarity_list: list[bool] = [] + + for i, atm in enumerate(token_level_array): + chain_list.append(atm.chain_id) + chain_iid_list.append(atm.chain_iid) + resi_list.append(int(atm.res_id)) + ind_list.append(int(i)) + res_name_list.append(atm.res_name) + token_id_list.append(str(atm.token_id)) + + if atm.is_polymer and (atm.res_name in mol_info.has_planar_sc.keys()): + sc_planarity_list.append(bool(mol_info.has_planar_sc[atm.res_name])) + else: + sc_planarity_list.append(False) + + # representative & sugar-edge atoms + if (is_glycine(atm.res_name) | is_protein_unknown(atm.res_name)): + rep_atom_i = "CA" + S_start_atom_i = None + S_stop_atom_i = None + elif is_standard_aa_not_glycine(atm.res_name): + rep_atom_i = "CA" + S_start_atom_i = "CA" + S_stop_atom_i = "CB" + elif is_pyrimidine(atm.res_name): + rep_atom_i = "C1'" + S_start_atom_i = "C1'" + S_stop_atom_i = "O2" + elif is_purine(atm.res_name): + rep_atom_i = "C1'" + S_start_atom_i = "C1'" + S_stop_atom_i = "N3" + elif is_unknown_nucleotide(atm.res_name): + rep_atom_i = "C1'" + S_start_atom_i = None + S_stop_atom_i = None + elif getattr(atm, "atomize", False): + rep_atom_i = atm.atom_name + S_start_atom_i = None + S_stop_atom_i = None + else: + rep_atom_i = None + S_start_atom_i = None + S_stop_atom_i = None + + rep_atom_list.append(rep_atom_i) + S_start_atom_list.append(S_start_atom_i) + S_stop_atom_list.append(S_stop_atom_i) + + # residue index <-> token index map + resi2index = {f"{c}__{r}": i for c, r, i in zip(chain_iid_list, resi_list, ind_list)} + + # relative sequence positions w/ chain gaps + rel_pos_list: list[int] = [] + current_chain = "" + chn_bias = -mol_info.gap_length + for r, c in zip(resi_list, chain_iid_list): + if c != current_chain: + chn_bias += mol_info.gap_length + current_chain = c + rel_pos_list.append(int(r + chn_bias)) + + rel_pos = np.asarray(rel_pos_list, dtype=np.int64) + seq_neighbors = ( + np.abs(rel_pos[:, None] - rel_pos[None, :]) <= int(mol_info.seq_cutoff) + ) + + na_inds = np.nonzero(is_na_arr)[0].tolist() + na_tensor_inds = {na_i: i for i, na_i in enumerate(na_inds)} + + # Cheap planarity heuristic from residue name lookup + is_planar_arr = np.asarray(sc_planarity_list, dtype=bool) + + # filter mask using NA_only / planar_only flags + if NA_only and planar_only: + filter_mask = is_na_arr & is_planar_arr + elif NA_only and (not planar_only): + filter_mask = is_na_arr.copy() + elif (not NA_only) and planar_only: + filter_mask = is_planar_arr.copy() + else: + filter_mask = np.ones_like(is_na_arr, dtype=bool) + + return { + "token_starts": token_starts, + "token_index": token_index, + "is_na": is_na_arr, + "is_planar": is_planar_arr, + "chain_list": chain_list, + "chain_iid_list": chain_iid_list, + "resi_list": resi_list, + "resn_list": res_name_list, + "token_id_list": token_id_list, + "resi2index": resi2index, + "len_s": int(len(token_level_array)), + "seq_neighbors": seq_neighbors, + "na_inds": na_inds, + "na_tensor_inds": na_tensor_inds, + "filter_mask": filter_mask, + "rep_atom_list": rep_atom_list, + "S_start_atom_list": S_start_atom_list, + "S_stop_atom_list": S_stop_atom_list, + "include_geometry": False, + } + + +def add_token_level_geometry_data( + atom_array: AtomArray, + mol_info: "NucMolInfo", + token_level_data: dict, + *, + NA_only: bool = False, + planar_only: bool = True, +) -> dict: + """Augment a metadata-only token_level_data dict with geometry fields. + + Populates: + - xyz_planar, xyz_S_start, xyz_S_stop + - frame_xyz, M_i + - updates is_planar and filter_mask using coordinate-derived planarity + - sets include_geometry=True + """ + + if bool(token_level_data.get("include_geometry", False)): + return token_level_data + + # Backward-compatibility: older token_level_data dicts (or user-provided ones) + # may not contain the metadata keys this function needs. + required_keys = ( + "chain_iid_list", + "chain_list", + "resi_list", + "rep_atom_list", + "S_start_atom_list", + "S_stop_atom_list", + "is_na", + ) + if any(k not in token_level_data for k in required_keys): + token_level_data = get_token_level_metadata( + atom_array, + mol_info, + NA_only=NA_only, + planar_only=planar_only, + ) + + chain_iid_list: list[str] = token_level_data["chain_iid_list"] + chain_list: list[str] = token_level_data["chain_list"] + resi_list: list[int] = token_level_data["resi_list"] + rep_atom_list: list[str | None] = token_level_data["rep_atom_list"] + S_start_atom_list: list[str | None] = token_level_data["S_start_atom_list"] + S_stop_atom_list: list[str | None] = token_level_data["S_stop_atom_list"] + + planar_atom_list_dict = find_planar_positions(atom_array, mol_info) + has_planar_sc: list[bool] = [] + + xyz_planar: list[list[list[float]]] = [] + xyz_S_start: list[list[float]] = [] + xyz_S_stop: list[list[float]] = [] + + for c, r, S_start_atm, S_stop_atm in zip( + chain_iid_list, + resi_list, + S_start_atom_list, + S_stop_atom_list, + ): + planar_atoms_i = planar_atom_list_dict[(c, r)] + has_planar_sc.append(bool(len(planar_atoms_i) >= 4)) + + atom_array_i = atom_array[(atom_array.chain_iid == c) & (atom_array.res_id == r)] + + planar_coords_i: list[list[float]] = [] + for pl_atm_name_j in planar_atoms_i: + pl_atom_array_ij = atom_array_i[atom_array_i.atom_name == pl_atm_name_j] + if len(pl_atom_array_ij) == 0: + planar_coords_i.append([float("nan"), float("nan"), float("nan")]) + else: + planar_coords_i.append(pl_atom_array_ij[0].coord) + + xyz_planar.append(planar_coords_i if len(planar_coords_i) > 3 else [[float("nan")] * 3]) + + if S_start_atm is None: + xyz_S_start.append([float("nan"), float("nan"), float("nan")]) + else: + S_start_atom_array_i = atom_array_i[atom_array_i.atom_name == S_start_atm] + xyz_S_start.append( + [float("nan"), float("nan"), float("nan")] + if len(S_start_atom_array_i) == 0 + else S_start_atom_array_i[0].coord + ) + + if S_stop_atm is None: + xyz_S_stop.append([float("nan"), float("nan"), float("nan")]) + else: + S_stop_atom_array_i = atom_array_i[atom_array_i.atom_name == S_stop_atm] + xyz_S_stop.append( + [float("nan"), float("nan"), float("nan")] + if len(S_stop_atom_array_i) == 0 + else S_stop_atom_array_i[0].coord + ) + + del atom_array_i + + # frame coordinates and backbone direction + frame_xyz = np.asarray( + make_coord_list(atom_array, resi_list, chain_list, rep_atom_list), + dtype=np.float32, + ) + + padded_centers = np.concatenate([frame_xyz[:1], frame_xyz, frame_xyz[-1:]], axis=0) + M_i = ( + (padded_centers[1:-1] - padded_centers[:-2]) + + (padded_centers[2:] - padded_centers[1:-1]) + ) / 2.0 + + is_planar_arr = np.asarray(has_planar_sc, dtype=bool) + token_level_data["is_planar"] = is_planar_arr + + is_na_arr = np.asarray(token_level_data["is_na"], dtype=bool) + if NA_only and planar_only: + filter_mask = is_na_arr & is_planar_arr + elif NA_only and (not planar_only): + filter_mask = is_na_arr.copy() + elif (not NA_only) and planar_only: + filter_mask = is_planar_arr.copy() + else: + filter_mask = np.ones_like(is_na_arr, dtype=bool) + token_level_data["filter_mask"] = filter_mask + + token_level_data.update( + { + "xyz_planar": xyz_planar, + "xyz_S_start": xyz_S_start, + "xyz_S_stop": xyz_S_stop, + "frame_xyz": frame_xyz, + "M_i": M_i, + "include_geometry": True, + } + ) + + del planar_atom_list_dict, padded_centers + return token_level_data + + +def _compute_nucleic_ss_impl( + mol_info, + token_level_data, + hbond_count, + clamp_pairwise_params=True, + eps=1e-8, + *, + return_local_params: bool = False, + return_pairwise_geometry: bool = False, + return_opening_angle: bool = False, + return_basepairs_only: bool = False, +): + """ + Compute nucleic secondary structure–related quantities and pairwise base params. + + Notes + ----- + This function is used in two modes: + + - Fast annotation mode (default): computes only what is needed to derive + ``basepairs_bool_ij`` and does *not* retain large intermediate pairwise + geometry arrays (X_ij/Y_ij/Z_ij/O_ij). + - Diagnostic mode: set ``return_pairwise_geometry=True`` (and optionally + ``return_local_params=True`` / ``return_opening_angle=True``) to also + return additional geometry arrays. + """ + + mask_1d = np.asarray(token_level_data["filter_mask"], dtype=bool) + len_mask = int(mask_1d.sum()) + # len_full = len(mask_1d) + + # unpack 1D data from token_level_data and apply filters + M_i = np.asarray(token_level_data["M_i"], dtype=np.float32)[mask_1d] + frame_xyz = np.asarray(token_level_data["frame_xyz"], dtype=np.float32)[mask_1d] + + is_na = np.asarray(token_level_data["is_na"], dtype=bool)[mask_1d] + + xyz_S_start = [xyz_list_i for xyz_list_i, keep_i in zip(token_level_data["xyz_S_start"], mask_1d) if keep_i] + xyz_S_stop = [xyz_list_i for xyz_list_i, keep_i in zip(token_level_data["xyz_S_stop"], mask_1d) if keep_i] + xyz_planar = [xyz_list_i for xyz_list_i, keep_i in zip(token_level_data["xyz_planar"], mask_1d) if keep_i] + + + # unpack 2D data from token_level_data and apply filters + hbond_count = np.asarray(hbond_count)[mask_1d, :][:, mask_1d] + seq_neighbors = np.asarray(token_level_data["seq_neighbors"], dtype=bool)[mask_1d, :][:, mask_1d] + + # --- CALC 0: precompute displacement vectors / distances ---- + planar_centers = np.stack( + [ + np.nanmean(np.asarray(xyz_i, dtype=np.float32), axis=0) + for xyz_i in xyz_planar + ], + axis=0, + ).astype(np.float32) + + + frame_D_ij_vec = frame_xyz[None, :, :] - frame_xyz[:, None, :] # [L, L, 3] + sc_D_ij_vec = planar_centers[None, :, :] - planar_centers[:, None, :] # [L, L, 3] + # D_ij = frame_D_ij_vec.norm(dim=-1) # [L, L] + + + # --- CALC I: local base params (canonical frames) ------------ + centered_points = [ + np.asarray(xyz_i, dtype=np.float32) - cen_i + for xyz_i, cen_i in zip(xyz_planar, planar_centers) + ] + + # eigenvectors per residue: [L, 3, 3] (NaNs where invalid) + eigenvectors = np.full((len_mask, 3, 3), np.nan, dtype=np.float32) + + for i, xyz_i in enumerate(centered_points): + xyz_i = xyz_i[~np.isnan(xyz_i).any(axis=1)] + if xyz_i.shape[0] >= 3: + cov_matrix = np.einsum("ij,ik->jk", xyz_i, xyz_i) / max( + xyz_i.shape[0] - 1, 1 + ) + _, eigvecs = np.linalg.eigh(cov_matrix) + eigenvectors[i] = eigvecs + + + # base-normal (principal) direction N_i, then corrected Z_i + N_i = eigenvectors[:, :, 0] + N_i = N_i / (np.linalg.norm(N_i, axis=1, keepdims=True) + eps) + + Z_i = N_i * np.sum(M_i * N_i, axis=-1, keepdims=True) + Z_i = Z_i / (np.linalg.norm(Z_i, axis=-1, keepdims=True) + eps) + + # Only compute full local frames when requested. + # Basepair filters only need Z_i (via Z_ij) and do not require X_i/Y_i. + local_base_params = None + if return_local_params or return_opening_angle: + # Sugar-edge vectors X_s_i built from S_start/stop + X_s_i = ( + np.asarray(xyz_S_stop, dtype=np.float32) + - np.asarray(xyz_S_start, dtype=np.float32) + ) + X_s_i = X_s_i / (np.linalg.norm(X_s_i, axis=-1, keepdims=True) + eps) + + X_i = np.cross(Z_i, X_s_i) + X_i = X_i / (np.linalg.norm(X_i, axis=-1, keepdims=True) + eps) + + if return_local_params: + Y_i = np.cross(X_i, Z_i) + Y_i = Y_i / (np.linalg.norm(Y_i, axis=-1, keepdims=True) + eps) + local_base_params = {"X_i": X_i, "Y_i": Y_i, "Z_i": Z_i} + else: + # Opening needs X_i but not the local params dict. + local_base_params = None + + # --- CALC II: pairwise base parameters ----------------------- + + # stack mean Z-direction vectors for parallel (0) and antiparallel (1) + Z_sum = Z_i[:, None, :] + Z_i[None, :, :] + Z_diff = Z_i[:, None, :] - Z_i[None, :, :] + Z_ij_oris = 0.5 * np.stack((Z_sum, Z_diff), axis=0) # [2, L, L, 3] + + base_ori_ij = ( + np.linalg.norm(Z_ij_oris[1], axis=-1) > np.linalg.norm(Z_ij_oris[0], axis=-1) + ).astype(np.int64) # [L, L] + + Z_ij = np.where(base_ori_ij[..., None] == 0, Z_ij_oris[0], Z_ij_oris[1]) + Z_ij = Z_ij / (np.linalg.norm(Z_ij, axis=-1, keepdims=True) + eps) + + Y_ij = frame_D_ij_vec / (np.linalg.norm(frame_D_ij_vec, axis=-1, keepdims=True) + eps) + X_ij = np.cross(Z_ij, Y_ij) + X_ij = X_ij / (np.linalg.norm(X_ij, axis=-1, keepdims=True) + eps) + + # vertical displacement using sidechain centroids + H_ij = np.sum(sc_D_ij_vec * Z_ij, axis=-1) + # H_ij_vec = H_ij[..., None] * Z_ij + + # Opening (O_ij) is purely diagnostic; compute only if requested. + O_ij = None + if return_opening_angle: + if not (return_local_params or return_opening_angle): + raise RuntimeError("Internal error: opening angle requested without local frame") + + proj_X_i_XY = ( + np.sum(X_i[:, None, :] * X_ij, axis=-1, keepdims=True) * X_ij + + np.sum(X_i[:, None, :] * Y_ij, axis=-1, keepdims=True) * Y_ij + ) + proj_X_i_XY_norm = proj_X_i_XY / ( + np.linalg.norm(proj_X_i_XY, axis=-1, keepdims=True) + eps + ) + cos_opening = np.sum( + proj_X_i_XY_norm * proj_X_i_XY_norm.swapaxes(0, 1), + axis=-1, + ) + if clamp_pairwise_params: + cos_opening = np.clip(cos_opening, -1.0, 1.0) + O_ij = np.arccos(cos_opening) + + # Buckle (B_ij) + proj_Z_i_YZ = ( + np.sum(Z_i[:, None, :] * Y_ij, axis=-1, keepdims=True) * Y_ij + + np.sum(Z_i[:, None, :] * Z_ij, axis=-1, keepdims=True) * Z_ij + ) + proj_Z_i_YZ_norm = proj_Z_i_YZ / ( + np.linalg.norm(proj_Z_i_YZ, axis=-1, keepdims=True) + eps + ) + cos_buckle = np.sum( + proj_Z_i_YZ_norm * (-proj_Z_i_YZ_norm.swapaxes(0, 1)), + axis=-1, + ) + + # Propeller (P_ij) + proj_Z_i_ZX = ( + np.sum(Z_i[:, None, :] * Z_ij, axis=-1, keepdims=True) * Z_ij + + np.sum(Z_i[:, None, :] * X_ij, axis=-1, keepdims=True) * X_ij + ) + proj_Z_i_ZX_norm = proj_Z_i_ZX / ( + np.linalg.norm(proj_Z_i_ZX, axis=-1, keepdims=True) + eps + ) + cos_propeller = np.sum( + proj_Z_i_ZX_norm * (-proj_Z_i_ZX_norm.swapaxes(0, 1)), + axis=-1, + ) + + if clamp_pairwise_params: + cos_buckle = np.clip(cos_buckle, -1.0, 1.0) + cos_propeller = np.clip(cos_propeller, -1.0, 1.0) + + B_ij = np.arccos(cos_buckle) + P_ij = np.arccos(cos_propeller) + + pair_params: dict | None + if return_basepairs_only: + pair_params = None + else: + pair_params = { + "H_ij": H_ij, + "B_ij": B_ij, + "P_ij": P_ij, + "base_ori_ij": base_ori_ij, + } + + if return_opening_angle and O_ij is not None: + pair_params["O_ij"] = O_ij + + if return_pairwise_geometry: + pair_params["X_ij"] = X_ij + pair_params["Y_ij"] = Y_ij + pair_params["Z_ij"] = Z_ij + + # --- CALC III: basepair filters / probabilities -------------- + hbond_summation = np.tensordot( + hbond_count.astype(np.float32), + np.asarray(mol_info.bp_summation_weights, dtype=np.float32), + axes=([2], [0]), + ) # [L, L] + + logits = mol_info.bp_hbond_coeff * ( + hbond_summation - (mol_info.min_hbonds_for_bp - 1) + ) + bp_preds = (1.0 / (1.0 + np.exp(-logits))) + eps + + # Filter Height geometry + H_ij_filter = (H_ij >= -mol_info.base_geometry_limits["H_ij"]) & ( + H_ij <= mol_info.base_geometry_limits["H_ij"] + ) + # Filter Buckle geometry + B_ij_filter = (B_ij <= mol_info.base_geometry_limits["B_ij"]) | ( + B_ij >= math.pi - mol_info.base_geometry_limits["B_ij"] + ) + # Filter Propeller geometry + P_ij_filter = (P_ij <= mol_info.base_geometry_limits["P_ij"]) | ( + P_ij >= math.pi - mol_info.base_geometry_limits["P_ij"] + ) + + bp_geom_filter = (H_ij_filter & B_ij_filter & P_ij_filter) + + if return_basepairs_only: + # Avoid allocating basepairs_ij float matrix when only the boolean mask is needed. + basepairs_bool_ij = (~seq_neighbors) & bp_geom_filter & ( + bp_preds >= float(mol_info.bp_val_cutoff) + ) + basepairs_ij = None + else: + basepairs_ij = (~seq_neighbors).astype(np.float32) * ( + bp_geom_filter.astype(np.float32) * bp_preds.astype(np.float32) + ) + basepairs_bool_ij = basepairs_ij >= mol_info.bp_val_cutoff + + if return_basepairs_only: + # Cleanup intermediate tensors to free memory + del frame_D_ij_vec, sc_D_ij_vec + del hbond_summation, bp_preds + del H_ij_filter, B_ij_filter, P_ij_filter, bp_geom_filter + + # Explicitly drop the largest pairwise arrays. + del X_ij, Y_ij, Z_ij + if O_ij is not None: + del O_ij + if local_base_params is not None: + del local_base_params + return basepairs_bool_ij + + assert pair_params is not None + + pair_params["basepairs_bool_ij"] = basepairs_bool_ij + pair_params["hbond_summation"] = hbond_summation + pair_params["basepairs_ij"] = basepairs_ij + + nucleic_ss_data = {"pair_params": pair_params} + if return_local_params and local_base_params is not None: + nucleic_ss_data["local_params"] = local_base_params + + # Cleanup intermediate tensors to free memory + del frame_D_ij_vec, sc_D_ij_vec + del hbond_summation, bp_preds + del H_ij_filter, B_ij_filter, P_ij_filter, bp_geom_filter + + # If not returning, explicitly drop the largest pairwise arrays. + if not return_pairwise_geometry: + del X_ij, Y_ij, Z_ij + if not return_opening_angle and O_ij is not None: + del O_ij + if not return_local_params and local_base_params is not None: + del local_base_params + + return nucleic_ss_data + +def annotate_na_ss( + atom_array: AtomArray, + *, + NA_only: bool = False, + planar_only: bool = True, + p_canonical_bp_filter: float = 0.0, + mol_info: Optional[NucMolInfo] = None, + overwrite: bool = True, + token_level_data: Optional[dict] = None, +) -> AtomArray: + """Annotate base-pair partners directly onto the AtomArray. + + This computes nucleic-acid base pairing similarly to + :func:`get_gt_nucleic_geom_feats` but instead of returning an integer + secondary-structure matrix, it writes an AtomArray annotation + ``bp_partners``. + + The annotation is stored on the *full* ``atom_array`` (length N atoms), + but only nucleic-acid token-representative atoms (indices ``token_starts`` + from :func:`get_token_starts`) that are included in this call's + ``annotation_mask`` get a list value. + + Semantics: + - ``[]`` (empty list): explicitly unpaired nucleic-acid loop + - ``[token_id, ...]``: paired nucleic-acid token(s) + - ``None``: unannotated/masked (non-NA tokens, or tokens filtered out) + + Each list element is the partner token identifier (``token_id`` as int) + for the paired residue. This is sufficient to recover the partner's + token-representative atom via ``token_starts`` + token_id mapping. + + Notes + ----- + - ``token_level_data`` may be metadata-only; this function will augment it + with geometry as needed. + - If ``p_canonical_bp_filter > 0``, then with that probability we discard + any non-canonical NA basepairs (keeps only A-U, A-T, G-C). + """ + + if mol_info is None: + mol_info = NucMolInfo() + + # Token representatives (0..L-1) and their corresponding atom indices (into atom_array) + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + # token_id is assigned token-wise and matches get_token_starts() segmentation. + token_ids: list[int] = [int(t) for t in list(token_level_array.token_id)] + token_res_names: list[str] = [str(rn) for rn in list(token_level_array.res_name)] + + # Compute basepairs on the token graph (respecting NA_only/planar_only filtering) + if token_level_data is None: + token_level_data = get_token_level_metadata( + atom_array, + mol_info, + NA_only=NA_only, + planar_only=planar_only, + ) + token_level_data = add_token_level_geometry_data( + atom_array, + mol_info, + token_level_data, + NA_only=NA_only, + planar_only=planar_only, + ) + # Note: this mask gives positions that are *chemically valid* for forming + # base pairs, which is different from custom mask-generation for features + mask_1d = np.asarray(token_level_data["filter_mask"], dtype=bool) + + subset_idxs = np.nonzero(mask_1d)[0] + + is_na_full = np.asarray(token_level_data["is_na"], dtype=bool) + + hbond_count = calculate_hb_counts( + atom_array, + token_level_data, + mol_info, + cutoff_HA_dist=mol_info.cutoff_HA_dist, + cutoff_DA_dist=mol_info.cutoff_DA_dist, + ) + bp_bool = np.asarray( + _compute_nucleic_ss_impl( + mol_info, + token_level_data, + hbond_count, + clamp_pairwise_params=True, + eps=1e-8, + return_local_params=False, + return_pairwise_geometry=False, + return_opening_angle=False, + return_basepairs_only=True, + ), + dtype=bool, + ) + + # Optional: filter to canonical Watson-Crick basepairs only. + # Sampled probabilistically to allow mixed supervision during training. + do_canonical_filter = bool(p_canonical_bp_filter and (np.random.rand() < float(p_canonical_bp_filter))) + if do_canonical_filter: + def _base_letter(res_name: str) -> str | None: + rn = str(res_name).strip().upper() + if rn in STANDARD_RNA: + return rn + if rn in STANDARD_DNA: + return rn[1] # DA/DC/DG/DT -> A/C/G/T + return None + + allowed_pairs = { + ("A", "U"), ("U", "A"), + ("A", "T"), ("T", "A"), + ("G", "C"), ("C", "G"), + } + base_letters_full: list[str | None] = [_base_letter(rn) for rn in token_res_names] + + bp_bool = np.asarray(bp_bool, dtype=bool) + bp_rows_tmp, bp_cols_tmp = np.nonzero(bp_bool) + for r, c in zip(bp_rows_tmp.tolist(), bp_cols_tmp.tolist()): + full_i = int(subset_idxs[int(r)]) + full_j = int(subset_idxs[int(c)]) + bi = base_letters_full[full_i] + bj = base_letters_full[full_j] + if bi is None or bj is None or (bi, bj) not in allowed_pairs: + bp_bool[int(r), int(c)] = False + bp_bool[int(c), int(r)] = False + + bp_bool = np.asarray(bp_bool, dtype=bool) + bp_rows, bp_cols = np.nonzero(bp_bool) + + # Prepare/overwrite annotation array + if (not overwrite) and ("bp_partners" in atom_array.get_annotation_categories()): + bp_partners_ann = atom_array.bp_partners + if len(bp_partners_ann) != len(atom_array): + raise ValueError( + "Existing bp_partners annotation has wrong length" + ) + else: + bp_partners_ann = np.empty(len(atom_array), dtype=object) + bp_partners_ann[:] = None + + # Explicit-loop semantics: + # - Only nucleic-acid token-start atoms *within subset_idxs* get a list container. + # - [] means explicitly unpaired loop. + # - None means unannotated/masked. + for full_i in subset_idxs.tolist(): + if not bool(is_na_full[int(full_i)]): + continue + atom_i = int(token_starts[int(full_i)]) + if bp_partners_ann[atom_i] is None: + bp_partners_ann[atom_i] = [] + + # Populate partners using token_id ints + # We only process each unordered pair once to avoid duplicates. + for r, c in zip(bp_rows.tolist(), bp_cols.tolist()): + if r == c: + continue + + full_i = int(subset_idxs[int(r)]) + full_j = int(subset_idxs[int(c)]) + if full_i == full_j: + continue + + # Only annotate NA-NA basepairs as nucleic secondary structure. + if (not bool(is_na_full[int(full_i)])) or (not bool(is_na_full[int(full_j)])): + continue + + # Enforce uniqueness: only handle (i,j) where i < j + if full_j < full_i: + continue + + atom_i = int(token_starts[full_i]) + atom_j = int(token_starts[full_j]) + partner_i = int(token_ids[full_j]) + partner_j = int(token_ids[full_i]) + + if bp_partners_ann[atom_i] is None: + bp_partners_ann[atom_i] = [] + if bp_partners_ann[atom_j] is None: + bp_partners_ann[atom_j] = [] + + # Add if not present + if partner_i not in bp_partners_ann[atom_i]: + bp_partners_ann[atom_i].append(partner_i) + if partner_j not in bp_partners_ann[atom_j]: + bp_partners_ann[atom_j].append(partner_j) + + atom_array.set_annotation("bp_partners", bp_partners_ann) + return atom_array + + +def bp_partner_to_ss_matrix( + atom_array: AtomArray, + *, + feature_info: Optional[dict] = None, + mol_info: Optional[NucMolInfo] = None, + include_loops: bool = True, + token_level_data: Optional[dict] = None, +) -> np.ndarray: + """Reconstruct an integer NA secondary-structure matrix from annotations. + + Requires that ``atom_array`` has a ``bp_partners`` annotation created by + :func:`annotate_na_ss`. + + Returns + ------- + ss_matrix : np.ndarray + Shape (L, L) with values from ``feature_info``. + + Loop semantics: + - Only nucleic-acid tokens can be loops. + - Only tokens with an explicit empty list ``bp_partners == []`` are loops. + Unannotated tokens (``bp_partners is None``) remain masked. + """ + + if mol_info is None: + mol_info = NucMolInfo() + + if feature_info is None: + feature_info = DEFAULT_NA_SS_FEATURE_INFO + + if "bp_partners" not in atom_array.get_annotation_categories(): + raise ValueError( + "atom_array is missing bp_partners annotation; run annotate_na_ss() first" + ) + + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + token_ids_int: list[int] = [int(t) for t in list(token_level_array.token_id)] + token_id_to_index_int = {int(tid): i for i, tid in enumerate(token_ids_int)} + L = len(token_starts) + + ss_matrix = feature_info["NA_SS_MASK"] * np.ones((L, L), dtype=np.int64) + + if token_level_data is None: + token_level_data = get_token_level_metadata( + atom_array, + mol_info, + # NA_only=NA_only, + # planar_only=planar_only, + ) + + mask_1d = np.asarray(token_level_data["filter_mask"], dtype=bool) + subset_idxs = np.nonzero(mask_1d)[0] + subset_set = set(int(x) for x in subset_idxs.tolist()) + is_na = np.asarray(token_level_data["is_na"], dtype=bool) + subset_na_idxs = subset_idxs[np.asarray(is_na[subset_idxs], dtype=bool)] + subset_na_set = set(int(x) for x in subset_na_idxs.tolist()) + + # Fill base-pair edges (only within subset, and only NA-NA) + bp_partners_ann = atom_array.bp_partners + for i in subset_idxs.tolist(): + if not bool(is_na[int(i)]): + continue + atom_i = int(token_starts[int(i)]) + partners = bp_partners_ann[atom_i] + if partners is None: + continue + if not isinstance(partners, (list, tuple, np.ndarray)): + continue + for partner_token_id in partners: + # Support int, numpy scalar, and legacy stringified token_id. + try: + partner_tid_int = int(partner_token_id) + except Exception: + partner_tid_int = None + j = token_id_to_index_int.get(partner_tid_int) if partner_tid_int is not None else None + if j is None or j == i: + continue + if int(j) not in subset_set: + continue + if not bool(is_na[int(j)]): + continue + ss_matrix[i, j] = feature_info["NA_SS_PAIR"] + ss_matrix[j, i] = feature_info["NA_SS_PAIR"] + + if not include_loops: + return ss_matrix + + # Loop labeling is explicit and NA-only: + # - only nucleic tokens can be loops + # - only tokens with an explicit empty list annotation are loops + loop_idxs_list: list[int] = [] + for i in subset_idxs.tolist(): + if not bool(is_na[int(i)]): + continue + atom_i = int(token_starts[int(i)]) + partners = bp_partners_ann[atom_i] + if not isinstance(partners, (list, tuple, np.ndarray)): + continue + if len(partners) == 0: + loop_idxs_list.append(int(i)) + + loop_idxs = np.asarray(loop_idxs_list, dtype=np.int64) + if loop_idxs.size > 0: + ss_matrix[loop_idxs[:, None], subset_na_idxs[None, :]] = feature_info["NA_SS_LOOP"] + ss_matrix[subset_na_idxs[:, None], loop_idxs[None, :]] = feature_info["NA_SS_LOOP"] + + return ss_matrix + + +def parse_dot_bracket(dot_bracket: str) -> tuple[list[tuple[int, int]], list[int]]: + """Parse a dot-bracket string into base pairs and unpaired positions. + + Supports (), [], {}, <>, and A..E / a..e bracket pairs. + + Returns + ------- + pairs : list of (i, j) + 0-based indices in the string for paired positions. + unpaired : list of int + 0-based indices that are '.' (unpaired). + """ + + stack: dict[str, list[int]] = {} + pairs: list[tuple[int, int]] = [] + unpaired: list[int] = [] + + opener_for = { + ")": "(", + "]": "[", + "}": "{", + ">": "<", + "a": "A", + "b": "B", + "c": "C", + "d": "D", + "e": "E", + } + + for i, ch in enumerate(str(dot_bracket)): + if ch == ".": + unpaired.append(i) + elif ch in "([{abcde": + o = opener_for.get(ch) + if o is None or o not in stack or not stack[o]: + continue + j = stack[o].pop() + pairs.append((j, i)) + else: + continue + + return pairs, unpaired + + +def annotate_na_ss_from_specification( + atom_array: AtomArray, + specification: dict, + *, + overwrite: bool = True, +) -> AtomArray: + """Annotate ``bp_partners`` from an inference-time specification. + + This is the inference analogue of :func:`annotate_na_ss`, except instead + of computing base pairs from geometry/H-bonds, it interprets a user-provided + specification (dot-bracket strings and/or residue ranges/positions) and + writes the same ``bp_partners`` annotation on token-representative atoms. + + Supported spec keys (all optional): + - ``ss_dbn``: global dot-bracket string applied to the first L tokens. + - ``ss_dbn_dict``: mapping like {"A5-15": dbn_str, ...}. + - ``paired_region_list``: list of "A5-15,B1-11" entries. + - ``paired_position_list``: list of "A19,A61,A20" groups. + - ``loop_region_list``: list of "A5-10" regions forced unpaired. + """ + + spec = specification or {} + token_starts = get_token_starts(atom_array) + token_level_array = atom_array[token_starts] + token_ids: list[int] = [int(t) for t in list(token_level_array.token_id)] + n_tokens = len(token_starts) + + # Explicit loops are only meaningful for nucleic-acid tokens. + seq_data = _get_sequence_encoding_data() + is_rna_like = np.isin(token_level_array.res_name, seq_data["rna_like_res_names"]) + is_dna_like = np.isin(token_level_array.res_name, seq_data["dna_like_res_names"]) + is_na_token = np.asarray(is_rna_like | is_dna_like, dtype=bool) + del seq_data + + # Prepare/overwrite annotation array + if (not overwrite) and ("bp_partners" in atom_array.get_annotation_categories()): + bp_partners_ann = atom_array.bp_partners + if len(bp_partners_ann) != len(atom_array): + raise ValueError("Existing bp_partners annotation has wrong length") + else: + bp_partners_ann = np.empty(len(atom_array), dtype=object) + bp_partners_ann[:] = None + + # Build chain/res -> token index map for region/position specs + chain_iid_list: list[str] = [str(atm.chain_iid) for atm in token_level_array] + resi_list: list[int] = [int(atm.res_id) for atm in token_level_array] + chain_res_to_tok: dict[tuple[str, int], int] = { + (c, r): i for i, (c, r) in enumerate(zip(chain_iid_list, resi_list)) + } + + def _parse_region(region_str: str) -> tuple[str, int, int] | None: + region_str = str(region_str).strip() + if not region_str: + return None + chain_id = region_str[0] + rest = region_str[1:] + if "-" not in rest: + return None + start_s, end_s = rest.split("-", 1) + try: + start_res = int(start_s) + end_res = int(end_s) + except ValueError: + return None + if start_res > end_res: + start_res, end_res = end_res, start_res + return chain_id, start_res, end_res + + def _parse_single_pos(pos_str: str) -> tuple[str, int] | None: + pos_str = str(pos_str).strip() + if not pos_str: + return None + chain_id = pos_str[0] + rest = pos_str[1:] + try: + res_id = int(rest) + except ValueError: + return None + return chain_id, res_id + + def _region_to_token_indices(region_str: str) -> list[int]: + parsed = _parse_region(region_str) + if parsed is None: + return [] + chain_id, start_res, end_res = parsed + token_indices: list[int] = [] + for res_id in range(start_res, end_res + 1): + idx = chain_res_to_tok.get((chain_id, int(res_id))) + if idx is not None: + token_indices.append(int(idx)) + return token_indices + + def _pos_to_token_index(pos_str: str) -> int | None: + parsed = _parse_single_pos(pos_str) + if parsed is None: + return None + chain_id, res_id = parsed + return chain_res_to_tok.get((chain_id, int(res_id))) + + # Accumulate partners as token-index sets + partners: list[set[int]] = [set() for _ in range(n_tokens)] + loop_token_idxs: set[int] = set() + + def _add_pair(i: int, j: int) -> None: + if not (0 <= i < n_tokens and 0 <= j < n_tokens): + return + if i == j: + return + if (not bool(is_na_token[int(i)])) or (not bool(is_na_token[int(j)])): + return + if i in loop_token_idxs or j in loop_token_idxs: + return + partners[i].add(j) + partners[j].add(i) + + # Case 1: global ss_dbn + ss_dbn = spec.get("ss_dbn") + if isinstance(ss_dbn, str) and ss_dbn.strip(): + pairs, unpaired = parse_dot_bracket(ss_dbn.strip()) + L = min(len(ss_dbn), n_tokens) + for i_local, j_local in pairs: + if 0 <= i_local < L and 0 <= j_local < L: + _add_pair(int(i_local), int(j_local)) + for i_local in unpaired: + if 0 <= int(i_local) < L: + loop_token_idxs.add(int(i_local)) + + # Case 1b: ss_dbn_dict + ss_dbn_dict = spec.get("ss_dbn_dict", {}) or {} + if isinstance(ss_dbn_dict, dict): + for region_str, dbn_str in ss_dbn_dict.items(): + if not isinstance(region_str, str) or not isinstance(dbn_str, str): + continue + dbn_str = dbn_str.strip() + if not dbn_str: + continue + toks = _region_to_token_indices(region_str) + if not toks or len(toks) != len(dbn_str): + continue + pairs, unpaired = parse_dot_bracket(dbn_str) + for i_local, j_local in pairs: + if 0 <= i_local < len(toks) and 0 <= j_local < len(toks): + _add_pair(int(toks[int(i_local)]), int(toks[int(j_local)])) + for i_local in unpaired: + if 0 <= i_local < len(toks): + loop_token_idxs.add(int(toks[int(i_local)])) + + # Case 2: paired_region_list + paired_region_list = spec.get("paired_region_list", []) + if isinstance(paired_region_list, str): + paired_region_list = [paired_region_list] + if isinstance(paired_region_list, list): + for region_entry in paired_region_list: + if not isinstance(region_entry, str) or not region_entry.strip(): + continue + region_parts = [p.strip() for p in region_entry.split(",") if p.strip()] + if len(region_parts) != 2: + continue + toks1 = _region_to_token_indices(region_parts[0]) + toks2 = _region_to_token_indices(region_parts[1]) + if not toks1 or not toks2: + continue + for ti in toks1: + for tj in toks2: + _add_pair(int(ti), int(tj)) + + # Case 3: paired_position_list + paired_position_list = spec.get("paired_position_list", []) + if isinstance(paired_position_list, str): + paired_position_list = [paired_position_list] + if isinstance(paired_position_list, list): + for group_str in paired_position_list: + if not isinstance(group_str, str) or not group_str.strip(): + continue + pos_parts = [p.strip() for p in group_str.split(",") if p.strip()] + tok_indices: list[int] = [] + for pos_str in pos_parts: + tok = _pos_to_token_index(pos_str) + if tok is not None: + tok_indices.append(int(tok)) + for i in range(len(tok_indices)): + for j in range(i + 1, len(tok_indices)): + _add_pair(tok_indices[i], tok_indices[j]) + + # Case 4: loop_region_list + loop_region_list = spec.get("loop_region_list", []) + if isinstance(loop_region_list, str): + loop_region_list = [loop_region_list] + if isinstance(loop_region_list, list): + for region_str in loop_region_list: + if not isinstance(region_str, str) or not region_str.strip(): + continue + for tok in _region_to_token_indices(region_str): + loop_token_idxs.add(int(tok)) + + # Enforce loop tokens as unpaired: remove any pairs involving them + for i in list(loop_token_idxs): + if not (0 <= i < n_tokens): + continue + if not bool(is_na_token[int(i)]): + loop_token_idxs.discard(int(i)) + continue + for j in list(partners[i]): + partners[j].discard(i) + partners[i].clear() + + # Write lists of partner token_ids onto token-start atoms. + # Unspecified tokens remain unannotated (None) -> NA_SS_MASK. + for i in range(n_tokens): + atom_i = int(token_starts[i]) + if not bool(is_na_token[int(i)]): + continue + if len(partners[i]) > 0: + bp_partners_ann[atom_i] = [] + for j in sorted(partners[i]): + partner_token_id = int(token_ids[int(j)]) + bp_partners_ann[atom_i].append(partner_token_id) + elif int(i) in loop_token_idxs: + bp_partners_ann[atom_i] = [] + + atom_array.set_annotation("bp_partners", bp_partners_ann) + return atom_array + + +def annotate_na_ss_from_data_specification( + data: dict, + *, + overwrite: bool = True, +) -> AtomArray: + """Convenience wrapper: annotate bp partners from ``data['specification']``.""" + atom_array = data["atom_array"] + spec = data.get("specification", {}) or {} + return annotate_na_ss_from_specification(atom_array, spec, overwrite=overwrite) + diff --git a/models/rfd3/src/rfd3/transforms/pipelines.py b/models/rfd3/src/rfd3/transforms/pipelines.py index 0cd656b2..d4c3361f 100644 --- a/models/rfd3/src/rfd3/transforms/pipelines.py +++ b/models/rfd3/src/rfd3/transforms/pipelines.py @@ -72,6 +72,7 @@ ) from rfd3.transforms.design_transforms import ( AddAdditional1dFeaturesToFeats, + AddAdditional2dFeaturesToFeats, AddGroundTruthSequence, AddIsXFeats, AssignTypes, @@ -84,6 +85,7 @@ ) from rfd3.transforms.dna_crop import ProteinDNAContactContiguousCrop from rfd3.transforms.hbonds_hbplus import CalculateHbondsPlus +from rfd3.transforms.na_geom import CalculateNucleicAcidGeomFeats from rfd3.transforms.ppi_transforms import ( Add1DSSFeature, AddGlobalIsNonLoopyFeature, @@ -350,6 +352,7 @@ def build_atom14_base_pipeline_( center_option: str, atom_1d_features: dict | None, token_1d_features: dict | None, + token_2d_features: dict | None, # PPI features max_ppi_hotspots_frac_to_provide: float, ppi_hotspot_max_distance: float, @@ -357,6 +360,8 @@ def build_atom14_base_pipeline_( max_ss_frac_to_provide: float, min_ss_island_len: int, max_ss_island_len: int, + # Nucleic acid features + add_na_pair_features: bool, **_, # dump additional kwargs (e.g. msa stuff) ): """ @@ -437,6 +442,15 @@ def build_atom14_base_pipeline_( ), ) ) + # Add nucleic acid geometry features + if add_na_pair_features: + transforms.append( + CalculateNucleicAcidGeomFeats( + is_inference, + NA_only=False, + planar_only=True, + ) + ) # Design Transforms transforms += [ @@ -525,6 +539,11 @@ def build_atom14_base_pipeline_( atom_1d_features=atom_1d_features, association_scheme=association_scheme, ), + AddAdditional2dFeaturesToFeats( + autofill_zeros_if_not_present_in_atomarray=True, + token_2d_features=token_2d_features, + association_scheme=association_scheme, + ), AddAF3TokenBondFeatures(), AddGroundTruthSequence(sequence_encoding=af3_sequence_encoding), ConditionalRoute( @@ -615,6 +634,7 @@ def build_atom14_base_pipeline( kwargs.setdefault("min_ss_island_len", 0) kwargs.setdefault("max_ss_island_len", 999) kwargs.setdefault("max_binder_length", 999) + kwargs.setdefault("add_na_pair_features", False) kwargs.setdefault("b_factor_min", None) kwargs.setdefault("zero_occ_on_exposure_after_cropping", False) From f0ab0fedae1abe5862145290577e8495059de68f Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Sat, 31 Jan 2026 16:14:06 -0800 Subject: [PATCH 09/49] train and inference atom23 with custom datasets and na ss transform --- .../configs/datasets/design_base_rfd3na.yaml | 103 ++++++++++++++++++ .../train/rna_monomer_distillation.yaml | 39 +++++++ .../rfd3/configs/datasets/val/pseudoknot.yaml | 4 +- models/rfd3/configs/experiment/rfd3na-ss.yaml | 21 ++-- .../rfd3/src/rfd3/inference/input_parsing.py | 44 +++++--- .../rfd3/inference/legacy_input_parsing.py | 15 +-- .../rfd3/src/rfd3/metrics/design_metrics.py | 46 ++++++-- .../src/rfd3/transforms/conditioning_base.py | 13 ++- .../src/rfd3/transforms/design_transforms.py | 4 +- models/rfd3/src/rfd3/transforms/na_geom.py | 24 ++-- .../rfd3/src/rfd3/transforms/na_geom_utils.py | 2 + models/rfd3/src/rfd3/transforms/pipelines.py | 30 +++-- .../rfd3/transforms/training_conditions.py | 12 +- .../src/rfd3/transforms/util_transforms.py | 2 +- .../rfd3/src/rfd3/transforms/virtual_atoms.py | 8 +- 15 files changed, 286 insertions(+), 81 deletions(-) create mode 100644 models/rfd3/configs/datasets/design_base_rfd3na.yaml create mode 100644 models/rfd3/configs/datasets/train/rna_monomer_distillation.yaml diff --git a/models/rfd3/configs/datasets/design_base_rfd3na.yaml b/models/rfd3/configs/datasets/design_base_rfd3na.yaml new file mode 100644 index 00000000..71816174 --- /dev/null +++ b/models/rfd3/configs/datasets/design_base_rfd3na.yaml @@ -0,0 +1,103 @@ +# base training dataset for training AF3 design models (atom14 variants): +# protein subsampling only. + +defaults: + # Grab datasets + - train/pdb/rfd3_train_interface@train.pdb.sub_datasets.interface + - train/pdb/rfd3_train_pn_unit@train.pdb.sub_datasets.pn_unit + #- train/rfd3_monomer_distillation@train + - train/rna_monomer_distillation@train + + # Customized validation datasets + - val/unconditional@val.unconditional + - val/unconditional_deep@val.unconditional_deep + - val/indexed@val.indexed + - val/pseudoknot@val.pseudoknot + + # Customized train masks + - conditions/unconditional@global_transform_args.train_conditions.unconditional + - conditions/island@global_transform_args.train_conditions.island + - conditions/tipatom@global_transform_args.train_conditions.tipatom + - conditions/sequence_design@global_transform_args.train_conditions.sequence_design + - conditions/ppi@global_transform_args.train_conditions.ppi + + - _self_ + +# Create a dictionary used for transform arguments +pipeline_target: rfd3.transforms.pipelines.build_atom14_base_pipeline + +# Base config overrides: +diffusion_batch_size_train: 32 +diffusion_batch_size_inference: 8 +crop_size: 384 +n_recycles_train: 2 +n_recycles_validation: 1 +max_atoms_in_crop: 3840 # ~10x crop size. + +# Global transform arguments are necessary for arguments shared between training and inference +global_transform_args: + n_atoms_per_token: 14 + central_atom: CB + sigma_perturb: 2.0 + sigma_perturb_com: 1.0 + association_scheme: dense + center_option: diffuse # options are ["all", "motif", "diffuse"] + + # Reference conformer policy + generate_conformers: True + generate_conformers_for_non_protein_only: True + provide_reference_conformer_when_unmasked: True + ground_truth_conformer_policy: IGNORE # Other options: REPLACE, ADD, FALLBACK. See atomworks.enums for details + provide_elements_for_unindexed_components: True + use_element_for_atom_names_of_atomized_tokens: True # TODO: correct name, implies unindexed do too + + # PPI Cropping + keep_full_binder_in_spatial_crop: False + max_binder_length: 170 + + # PPI Hotspots + max_ppi_hotspots_frac_to_provide: 0.2 + ppi_hotspot_max_distance: 4.5 + + # Secondary structure features + max_ss_frac_to_provide: 0.4 + min_ss_island_len: 1 + max_ss_island_len: 10 + + # Nucleic acid features + add_na_pair_features: false + + train_conditions: + unconditional: + frequency: 5.0 + sequence_design: + frequency: 2.0 + island: + frequency: 1.0 + tipatom: + frequency: 0.0 + ppi: + frequency: 0.0 + + # Used to create simple boolean flags for downstream conditioning + meta_conditioning_probabilities: + calculate_NA_SS: 1.0 + calculate_hbonds: 0.2 + calculate_rasa: 0.6 + + keep_protein_motif_rasa: 0.1 # Small to prevent noisy input to model + hbond_subsample: 0.5 + + # fully indexed training + unindex_leak_global_index: 0.10 + unindex_insert_random_break: 0.10 + unindex_remove_random_break: 0.10 + + # Probability of adding 1d secondary structure conditioning + add_1d_ss_features: 0.1 + featurize_plddt: 0.9 # Applied for monomer distillation only + add_global_is_non_loopy_feature: 0.99 + + # PPI + add_ppi_hotspots: 0.75 + full_binder_crop: 0.75 diff --git a/models/rfd3/configs/datasets/train/rna_monomer_distillation.yaml b/models/rfd3/configs/datasets/train/rna_monomer_distillation.yaml new file mode 100644 index 00000000..05ac8472 --- /dev/null +++ b/models/rfd3/configs/datasets/train/rna_monomer_distillation.yaml @@ -0,0 +1,39 @@ +defaults: + - pdb/base_transform_args@rna_monomer_distillation + - _self_ + +rna_monomer_distillation: + dataset: + _target_: atomworks.ml.datasets.StructuralDatasetWrapper + save_failed_examples_to_dir: ${paths.data.failed_examples_dir} + + # cif parser arguments + cif_parser_args: + cache_dir: null + load_from_cache: False + save_to_cache: False + + # metadata parser + dataset_parser: + _target_: atomworks.ml.datasets.parsers.GenericDFParser + pn_unit_iid_colnames: null + + # metadata dataset + dataset: + _target_: atomworks.ml.datasets.PandasDataset + name: rna_monomer_distillation + id_column: example_id + data: /projects/ml/afavor/rna_distillation/rna_distillation_filtered_df.parquet + columns_to_load: + - example_id + - path + - cluster_id + - seq_hash + - overall_plddt + - overall_pde + - overall_pae + + transform: + crop_contiguous_probability: 0.67 + crop_spatial_probability: 0.33 + diff --git a/models/rfd3/configs/datasets/val/pseudoknot.yaml b/models/rfd3/configs/datasets/val/pseudoknot.yaml index 27b801c5..7cf5ce14 100644 --- a/models/rfd3/configs/datasets/val/pseudoknot.yaml +++ b/models/rfd3/configs/datasets/val/pseudoknot.yaml @@ -1,9 +1,9 @@ defaults: - - unconditional + - design_validation_base - _self_ dataset: name: pseudoknot eval_every_n: 1 - data: /home/afavor/git/RFD3/modelhub/projects/aa_design/tests/test_data/pseudoknot.json + data: ${paths.data.design_benchmark_data_dir}/pseudoknot.json diff --git a/models/rfd3/configs/experiment/rfd3na-ss.yaml b/models/rfd3/configs/experiment/rfd3na-ss.yaml index 614f20fc..6d2245c5 100644 --- a/models/rfd3/configs/experiment/rfd3na-ss.yaml +++ b/models/rfd3/configs/experiment/rfd3na-ss.yaml @@ -5,6 +5,7 @@ defaults: - /debug/default - override /model: rfd3_base - override /logger: null + - override /datasets: design_base_rfd3na - _self_ name: rfd3na-SScond @@ -54,7 +55,7 @@ datasets: max_atoms_in_crop: 2560 # ~10x crop size. global_transform_args: association_scheme: atom23 - add_na_pair_features: true + #add_na_pair_features: true train_conditions: unconditional: frequency: 2.0 @@ -69,19 +70,19 @@ datasets: train: # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. pdb: - probability: 1.0 - # rna_monomer_distillation: - # probability: 1.0 + probability: 0.5 + rna_monomer_distillation: + probability: 0.5 - # val: - # pseudoknot: - # dataset: - # # eval_every_n: 10 - # eval_every_n: 2 + val: + pseudoknot: + dataset: + # eval_every_n: 10 + eval_every_n: 1 trainer: devices_per_node: 1 limit_train_batches: 10 limit_val_batches: 1 validate_every_n_epochs: 5 - prevalidate: false + prevalidate: true diff --git a/models/rfd3/src/rfd3/inference/input_parsing.py b/models/rfd3/src/rfd3/inference/input_parsing.py index b3117fcc..17032e43 100644 --- a/models/rfd3/src/rfd3/inference/input_parsing.py +++ b/models/rfd3/src/rfd3/inference/input_parsing.py @@ -9,7 +9,7 @@ from typing import Any, Dict, List, Optional, Union import numpy as np -from atomworks.constants import STANDARD_AA +from atomworks.constants import STANDARD_AA, STANDARD_DNA, STANDARD_RNA from atomworks.io.parser import parse_atom_array # from atomworks.ml.datasets.datasets import BaseDataset @@ -119,7 +119,9 @@ class DesignInputSpecification(BaseModel): validate_assignment=False, str_strip_whitespace=True, str_min_length=1, - extra="forbid", + #extra="forbid", #################################################### + extra="allow" + ## for now allowing extra for rfd3na-ss purposes, can decide later ## ) # fmt: off # ======================================================================== @@ -494,6 +496,12 @@ def apply_selections(start, end): aa.is_motif_atom_with_fixed_seq[start:end] = np.full_like( is_bkbn, False, dtype=int ) + elif aa.res_name[start] in (STANDARD_DNA + STANDARD_RNA) and self.redesign_motif_sidechains: + is_bkbn = np.isin(aa.atom_name[start:end], backbone_atoms_RNA) + aa.is_motif_atom_with_fixed_coord[start:end] = is_bkbn.astype(int) + aa.is_motif_atom_with_fixed_seq[start:end] = np.full_like( + is_bkbn, False, dtype=int + ) # ... Apply selections on top apply_selections(start, end) @@ -509,17 +517,18 @@ def build(self, return_metadata=False): atom_array_input_annotated = copy.deepcopy(self.atom_array_input) ########## reorder NA atoms ########### - is_dna = np.isin(atom_array_input_annotated.res_name, ["DA", "DC", "DG", "DT"]) - is_rna = np.isin(atom_array_input_annotated.res_name, ["A", "C", "G", "U"]) - dna_array = atom_array_input_annotated[is_dna] - rna_array = atom_array_input_annotated[is_rna] - - atom_array_input_annotated[is_dna] = reorder_atoms_per_residue( - dna_array, backbone_atoms_DNA - ) - atom_array_input_annotated[is_rna] = reorder_atoms_per_residue( - rna_array, backbone_atoms_RNA - ) + if exists(atom_array_input_annotated): + is_dna = np.isin(atom_array_input_annotated.res_name, ["DA", "DC", "DG", "DT"]) + is_rna = np.isin(atom_array_input_annotated.res_name, ["A", "C", "G", "U"]) + dna_array = atom_array_input_annotated[is_dna] + rna_array = atom_array_input_annotated[is_rna] + + atom_array_input_annotated[is_dna] = reorder_atoms_per_residue( + dna_array, backbone_atoms_DNA + ) + atom_array_input_annotated[is_rna] = reorder_atoms_per_residue( + rna_array, backbone_atoms_RNA + ) ####################################### atom_array = self._build_init(atom_array_input_annotated) @@ -928,11 +937,11 @@ def create_diffused_residues(n, additional_annotations=None, polymer_type="P"): elif polymer_type == "R": res_name = "A" bb_len = len(backbone_atoms_RNA) - bb_atom_names = strip_list(backbone_atoms_RNA) + bb_atom_names = backbone_atoms_RNA elif polymer_type == "D": res_name = "DA" bb_len = len(backbone_atoms_DNA) - bb_atom_names = strip_list(backbone_atoms_DNA) + bb_atom_names = backbone_atoms_DNA else: raise ValueError( f"invalid polymer type detected: {polymer_type}, check contig!" @@ -955,12 +964,13 @@ def create_diffused_residues(n, additional_annotations=None, polymer_type="P"): for idx in range(1, n + 1) ] array = struc.array(atoms) - array.set_annotation("element", np.array(bb_elements * n, dtype=" 0.75 - - o["max_ca_deviation"] = float(deviation.max(-1).values.mean()) - o["fraction_chainbreaks"] = float(is_chainbreak.float().mean(-1).mean()) - o["n_chainbreaks"] = float(is_chainbreak.float().sum(-1).mean()) + xyz_protein = X_L.cpu()[:, protein_idx_mask] + xyz_na = X_L.cpu()[:, na_idx_mask] + + ca_dists_protein = torch.norm(xyz_protein[:, 1:] - xyz_protein[:, :-1], dim=-1) + ca_dists_na = torch.norm(xyz_na[:, 1:] - xyz_na[:, :-1], dim=-1) + + deviation_protein = torch.abs(ca_dists_protein - self.standard_ca_dist) # B, (I-1) + deviation_na = torch.abs(ca_dists_na - self.standard_PP_dist) # B, (I-1) + is_chainbreak_protein = deviation_protein > 0.75 + is_chainbreak_na = deviation_na > 1 + + try: + o["max_ca_deviation_protein"] = float(deviation_protein.max(-1).values.mean()) + o["fraction_chainbreaks_protein"] = float(is_chainbreak_protein.float().mean(-1).mean()) + o["n_chainbreaks_protein"] = float(is_chainbreak_protein.float().sum(-1).mean()) + except: + print("No protein in this example, skipping protein chainbreak metrics") + + try: + o["max_ca_deviation_na"] = float(deviation_na.max(-1).values.mean()) + o["fraction_chainbreaks_na"] = float(is_chainbreak_na.float().mean(-1).mean()) + o["n_chainbreaks_na"] = float(is_chainbreak_na.float().sum(-1).mean()) + except: + print("No NA in this example, skipping NA chainbreak metrics") return o - class PPIMetrics(Metric): """PPI-specific metrics""" diff --git a/models/rfd3/src/rfd3/transforms/conditioning_base.py b/models/rfd3/src/rfd3/transforms/conditioning_base.py index 25b51a70..4050041f 100644 --- a/models/rfd3/src/rfd3/transforms/conditioning_base.py +++ b/models/rfd3/src/rfd3/transforms/conditioning_base.py @@ -243,6 +243,10 @@ def __init__( ) self.meta_conditioning_probabilities = meta_conditioning_probabilities self.train_conditions = train_conditions + + for item in self.train_conditions: + self.train_conditions[item].association_scheme = association_scheme + self.sequence_encoding = sequence_encoding self.association_scheme = association_scheme @@ -261,12 +265,15 @@ def check_input(self, data: dict): assert "conditions" in data, "Conditioning dict not initialized" def forward(self, data): + #for item in self.train_conditions: + # print(self.train_conditions[item].is_valid_for_example(data)) + valid_conditions = [ cond for cond in self.train_conditions.values() - if cond.frequency > 0 and cond.is_valid_for_example(data) + if cond.is_valid_for_example(data) and cond.frequency > 0 ] - + if len(valid_conditions) == 0: raise InvalidSampledConditionException("No valid condition was found.") @@ -280,8 +287,6 @@ def forward(self, data): i_cond = np.random.choice(np.arange(len(p_cond)), p=p_cond) cond = valid_conditions[i_cond] - cond.association_scheme = self.association_scheme - data["sampled_condition"] = cond data["sampled_condition_name"] = cond.name data["sampled_condition_cls"] = cond.__class__ diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index 36a8b43d..8d8da604 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -71,8 +71,10 @@ class SubsampleToTypes(Transform): def __init__( self, allowed_types: list | str = ["is_protein"], + association_scheme: str = 'atom14' ): self.allowed_types = allowed_types + self.association_scheme = association_scheme if not self.allowed_types == "ALL": for k in allowed_types: if not k.startswith("is_"): @@ -104,7 +106,7 @@ def forward(self, data): ) ) - if atom_array.is_protein.sum() == 0: + if self.association_scheme != 'atom23' and atom_array.is_protein.sum() == 0: raise ValueError( "No protein atoms found in the atom array. Example ID: {}".format( data.get("example_id", "unknown") diff --git a/models/rfd3/src/rfd3/transforms/na_geom.py b/models/rfd3/src/rfd3/transforms/na_geom.py index ebb076d3..2cef7822 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom.py +++ b/models/rfd3/src/rfd3/transforms/na_geom.py @@ -119,7 +119,7 @@ class CalculateNucleicAcidGeomFeats(Transform): def __init__( self, is_inference, - add_nucleic_ss_feats: bool = True, + meta_conditioning_probabilities, p_is_nucleic_ss_example: float = 0.3, p_show_partial_feats: float = 0.5, @@ -136,9 +136,18 @@ def __init__( ): # Critical, must always have to know how to handle self.is_inference = is_inference - + if not self.is_inference: + ## relevant in training + self.sampling_prob = meta_conditioning_probabilities['calculate_NA_SS'] + else: + ## irrelevant in inference + self.sampling_prob = 0 # For sampling whether we add nucleic-ss features (extra t2d) - self.add_nucleic_ss_feats = add_nucleic_ss_feats + + # relevant in training + self.add_nucleic_ss_feats = (self.sampling_prob > 0) + ###### + self.p_canonical_bp_filter = p_canonical_bp_filter # enforce that bp labels are only canonical self.p_is_nucleic_ss_example = p_is_nucleic_ss_example self.nucleic_ss_min_shown = nucleic_ss_min_shown @@ -189,7 +198,7 @@ def forward(self, data: dict) -> dict: n_tokens = len(token_starts) print(" DO I NEED TO CHANGE TO TOKEN_ID???") # Handle the training case with ground truth and masking: - if not self.is_inference: + if not self.is_inference and (np.random.rand() < self.sampling_prob): # First, annotate as usual # atom_array = annotate_na_ss(atom_array, **kwargs) @@ -226,8 +235,9 @@ def forward(self, data: dict) -> dict: - 3). Lists of paired indices """ - is_nucleic_ss_example=True - give_partial_feats=False + #is_nucleic_ss_example=True + #give_partial_feats=False + atom_array = annotate_na_ss_from_data_specification( data, overwrite=True, @@ -282,4 +292,4 @@ def _sample_where_to_show_ss(self, n_tokens: int, n_islands_max=self.n_islands_max, max_length=max_length, ) - \ No newline at end of file + diff --git a/models/rfd3/src/rfd3/transforms/na_geom_utils.py b/models/rfd3/src/rfd3/transforms/na_geom_utils.py index 61f80594..29be56f8 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom_utils.py +++ b/models/rfd3/src/rfd3/transforms/na_geom_utils.py @@ -1321,6 +1321,8 @@ def bp_partner_to_ss_matrix( *, feature_info: Optional[dict] = None, mol_info: Optional[NucMolInfo] = None, + NA_only: Optional[bool] = False, + planar_only: Optional[bool] = False, include_loops: bool = True, token_level_data: Optional[dict] = None, ) -> np.ndarray: diff --git a/models/rfd3/src/rfd3/transforms/pipelines.py b/models/rfd3/src/rfd3/transforms/pipelines.py index d4c3361f..f7eb9a05 100644 --- a/models/rfd3/src/rfd3/transforms/pipelines.py +++ b/models/rfd3/src/rfd3/transforms/pipelines.py @@ -196,6 +196,7 @@ def get_crop_transform( max_binder_length: int, max_atoms_in_crop: int | None, allowed_types: List[str], + association_scheme: str, ): if ( crop_contiguous_probability > 0 @@ -215,7 +216,7 @@ def get_crop_transform( ), "Crop center cutoff distance must be greater than 0" pre_crop_transforms = [ - SubsampleToTypes(allowed_types=allowed_types), + SubsampleToTypes(allowed_types=allowed_types, association_scheme=association_scheme), ] cropping_transform = RandomRoute( @@ -360,8 +361,11 @@ def build_atom14_base_pipeline_( max_ss_frac_to_provide: float, min_ss_island_len: int, max_ss_island_len: int, - # Nucleic acid features - add_na_pair_features: bool, + + ## Nucleic acid features ##### + #add_na_pair_features: bool, + ## This should not be necessary, controlled through feature names in model, and meta conditioning probabilities, inference behavior handled in transform itself ##### + **_, # dump additional kwargs (e.g. msa stuff) ): """ @@ -411,6 +415,7 @@ def build_atom14_base_pipeline_( max_binder_length=max_binder_length, max_atoms_in_crop=max_atoms_in_crop, allowed_types=allowed_types, + association_scheme=association_scheme ) if zero_occ_on_exposure_after_cropping: @@ -443,14 +448,15 @@ def build_atom14_base_pipeline_( ) ) # Add nucleic acid geometry features - if add_na_pair_features: - transforms.append( - CalculateNucleicAcidGeomFeats( - is_inference, - NA_only=False, - planar_only=True, - ) + #if add_na_pair_features: + transforms.append( + CalculateNucleicAcidGeomFeats( + is_inference, + meta_conditioning_probabilities, + NA_only=False, + planar_only=True, ) + ) # Design Transforms transforms += [ @@ -618,7 +624,6 @@ def build_atom14_base_pipeline( Wrapper around pipeline construction to handle empty training args Sets default behaviour for inference to keep backward compatibility """ - if is_inference: # Provide explicit defaults for training-only args kwargs.setdefault("crop_size", 512) @@ -634,7 +639,8 @@ def build_atom14_base_pipeline( kwargs.setdefault("min_ss_island_len", 0) kwargs.setdefault("max_ss_island_len", 999) kwargs.setdefault("max_binder_length", 999) - kwargs.setdefault("add_na_pair_features", False) + # This should not be necessary. + #kwargs.setdefault("add_na_pair_features", False) kwargs.setdefault("b_factor_min", None) kwargs.setdefault("zero_occ_on_exposure_after_cropping", False) diff --git a/models/rfd3/src/rfd3/transforms/training_conditions.py b/models/rfd3/src/rfd3/transforms/training_conditions.py index dbb07b76..fae2768e 100644 --- a/models/rfd3/src/rfd3/transforms/training_conditions.py +++ b/models/rfd3/src/rfd3/transforms/training_conditions.py @@ -96,13 +96,13 @@ def is_valid_for_example(self, data) -> bool: is_rna = data["atom_array"].is_rna ### updating this to allow other polymers if self.association_scheme == "atom23": - if not np.any(is_protein | is_dna | is_rna): - return False + if np.any(is_protein | is_dna | is_rna): + return True else: - if not np.any(is_protein): - return False - - return True + if np.any(is_protein): + return True + + return False def sample_motif_tokens(self, atom_array): """ diff --git a/models/rfd3/src/rfd3/transforms/util_transforms.py b/models/rfd3/src/rfd3/transforms/util_transforms.py index 75d69ddf..37f08f19 100644 --- a/models/rfd3/src/rfd3/transforms/util_transforms.py +++ b/models/rfd3/src/rfd3/transforms/util_transforms.py @@ -37,7 +37,7 @@ def assert_single_representative(token, central_atom="CB"): mask = get_af3_token_representative_masks(token, central_atom=central_atom) assert ( np.sum(mask) == 1 - ), f"No representative atom (CB) found. mask: {mask}\nToken: {token}" + ), f"No representative atom ({central_atom}) found. mask: {mask}\nToken: {token}" def assert_single_token(token): diff --git a/models/rfd3/src/rfd3/transforms/virtual_atoms.py b/models/rfd3/src/rfd3/transforms/virtual_atoms.py index 6ce16759..07db4e11 100644 --- a/models/rfd3/src/rfd3/transforms/virtual_atoms.py +++ b/models/rfd3/src/rfd3/transforms/virtual_atoms.py @@ -225,17 +225,21 @@ def forward(self, data: dict) -> dict: # First, pad with virtual atoms if needed if self.association_scheme == "atom23" and atom_array[start].is_dna: n_atoms_per_token = 22 + central_atom = "C1'" elif self.association_scheme == "atom23" and atom_array[start].is_rna: n_atoms_per_token = 23 + central_atom = "C1'" else: n_atoms_per_token = self.n_atoms_per_token + central_atom = self.atom_to_pad_from + n_pad = n_atoms_per_token - len(token) if n_pad > 0: mask = get_af3_token_representative_masks( - token, central_atom=self.atom_to_pad_from + token, central_atom=central_atom ) - assert_single_representative(token) + assert_single_representative(token, central_atom=central_atom) # ... Create virtual atoms pad_atoms = token[mask].copy() From b5beff039eecbb8f2a03c5eedbff2df64e908db9 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Tue, 3 Feb 2026 12:54:16 -0800 Subject: [PATCH 10/49] inference fixes for legacy_input_parsing --- .../rfd3/inference/legacy_input_parsing.py | 44 +++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py index 0d344fd7..7bf1a50b 100644 --- a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py +++ b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py @@ -268,36 +268,57 @@ def fetch_motif_residue_( return subarray -def create_diffused_residues_(n): +def create_diffused_residues_(n, polymer_type='p'): + from rfd3.constants import ( + ATOM23_ATOM_NAME_TO_ELEMENT, + backbone_atoms_DNA, + backbone_atoms_RNA, + ) if n <= 0: raise ValueError(f"Negative/null residue count ({n}) not allowed.") - + + if polymer_type == 'P': + res_name = 'ALA' + bb_len = 5 + bb_atom_names = ["N", "CA", "C", "O", "CB"] + elif polymer_type == 'R': + res_name = 'A' + bb_len = len(backbone_atoms_RNA) + bb_atom_names = backbone_atoms_RNA + elif polymer_type == 'D': + res_name = 'DA' + bb_len = len(backbone_atoms_DNA) + bb_atom_names = backbone_atoms_DNA + else: + raise ValueError(f"invalid polymer type detected: {polymer_type}, check contig!") + + bb_elements = [ATOM23_ATOM_NAME_TO_ELEMENT[item] for item in bb_atom_names] + atoms = [] [ atoms.extend( [ struc.Atom( np.array([0.0, 0.0, 0.0], dtype=np.float32), - res_name="ALA", + res_name=res_name, res_id=idx, ) - for _ in range(5) + for _ in range(bb_len) ] ) for idx in range(1, n + 1) ] array = struc.array(atoms) array.set_annotation( - "element", np.array(["N", "C", "C", "O", "C"] * n, dtype=" Date: Sun, 18 Jan 2026 15:41:00 -0800 Subject: [PATCH 11/49] feat: atom23 porting --- models/rfd3/src/rfd3/constants.py | 1 - models/rfd3/src/rfd3/transforms/conditioning_base.py | 4 ++++ models/rfd3/src/rfd3/transforms/design_transforms.py | 5 +++++ models/rfd3/src/rfd3/transforms/training_conditions.py | 5 +++++ models/rfd3/src/rfd3/transforms/virtual_atoms.py | 4 +--- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index 4d762621..bba1925d 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -401,7 +401,6 @@ ATOM23_ATOM_NAMES_RNA = np.array( [item.strip() for item in backbone_atomscheme_RNA] + [f"V{i}" for i in range(23 - len(backbone_atomscheme_RNA))] -) """Atom23 atom names (e.g. CA, V1)""" ATOM23_ATOM_ELEMENTS_RNA = np.array( diff --git a/models/rfd3/src/rfd3/transforms/conditioning_base.py b/models/rfd3/src/rfd3/transforms/conditioning_base.py index 4050041f..2bc598f3 100644 --- a/models/rfd3/src/rfd3/transforms/conditioning_base.py +++ b/models/rfd3/src/rfd3/transforms/conditioning_base.py @@ -287,6 +287,8 @@ def forward(self, data): i_cond = np.random.choice(np.arange(len(p_cond)), p=p_cond) cond = valid_conditions[i_cond] + cond.association_scheme = self.association_scheme + data["sampled_condition"] = cond data["sampled_condition_name"] = cond.name data["sampled_condition_cls"] = cond.__class__ @@ -304,6 +306,8 @@ class SampleConditioningFlags(Transform): "AssignTypes", "SampleConditioningType", ] # We use is_protein in the PPI training condition + def __init__(self, association_scheme): + self.association_scheme = association_scheme def __init__(self, association_scheme): self.association_scheme = association_scheme diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index 8d8da604..57e98b77 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -757,6 +757,11 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: """ if "feats" not in data.keys(): data["feats"] = {} + + if association_scheme == 'atom23': + data['atom_array'].set_annotation('is_protein_token', data['atom_array'].is_protein) + data['atom_array'].set_annotation('is_dna_token', data['atom_array'].is_dna) + data['atom_array'].set_annotation('is_rna_token', data['atom_array'].is_rna) if self.association_scheme == "atom23": data["atom_array"].set_annotation( diff --git a/models/rfd3/src/rfd3/transforms/training_conditions.py b/models/rfd3/src/rfd3/transforms/training_conditions.py index fae2768e..389d0013 100644 --- a/models/rfd3/src/rfd3/transforms/training_conditions.py +++ b/models/rfd3/src/rfd3/transforms/training_conditions.py @@ -72,9 +72,11 @@ def __init__( p_fix_motif_coordinates, p_fix_motif_sequence, p_unindex_motif_tokens, + association_scheme = 'atom14', ): self.name = name self.frequency = frequency + self.association_scheme = association_scheme # Token selection self.island_sampling_kwargs = island_sampling_kwargs @@ -89,6 +91,8 @@ def __init__( self.p_fix_motif_coordinates = p_fix_motif_coordinates self.p_fix_motif_sequence = p_fix_motif_sequence self.p_unindex_motif_tokens = p_unindex_motif_tokens + + self.association_scheme = association_scheme def is_valid_for_example(self, data) -> bool: is_protein = data["atom_array"].is_protein @@ -521,6 +525,7 @@ def sample_is_motif_atom_with_fixed_seq( is_motif_atom_with_fixed_seq = ( is_motif_atom_with_fixed_seq | ~atom_array.is_protein ) + return is_motif_atom_with_fixed_seq diff --git a/models/rfd3/src/rfd3/transforms/virtual_atoms.py b/models/rfd3/src/rfd3/transforms/virtual_atoms.py index 07db4e11..9e9fea8a 100644 --- a/models/rfd3/src/rfd3/transforms/virtual_atoms.py +++ b/models/rfd3/src/rfd3/transforms/virtual_atoms.py @@ -53,7 +53,6 @@ def map_to_association_scheme( else: return ATOM_NAMES[idxs] - def map_names_to_elements( atom_names: list | str, default=VIRTUAL_ATOM_ELEMENT_NAME ) -> np.ndarray: @@ -180,7 +179,7 @@ def forward(self, data: dict) -> dict: token_ids = np.unique(atom_array.token_id) assert len(token_ids) == len( is_motif_atom_with_fixed_seq - ), "Token ids and token level array have different lengths!" + ), "Token ids and token level array have different lengths!" # Unindexed tokens are never fully atomized, but may be assigned as atomized to have repr atoms: if self.association_scheme == "atom23": @@ -212,7 +211,6 @@ def forward(self, data: dict) -> dict: is_non_paddable_residue = is_residue & ( is_motif_atom_with_fixed_seq | is_motif_token_unindexed ) - # Collect virtual atoms to insert (we will insert them all at once) virtual_atoms_to_insert = [] insert_positions = [] From 4caba95d327f92b48b8e6b1109a5dabe35b7f3ea Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Tue, 3 Feb 2026 15:45:00 -0800 Subject: [PATCH 12/49] fix: atom23 constants import error --- models/rfd3/src/rfd3/trainer/trainer_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/models/rfd3/src/rfd3/trainer/trainer_utils.py b/models/rfd3/src/rfd3/trainer/trainer_utils.py index 9ee7939b..80d1f878 100644 --- a/models/rfd3/src/rfd3/trainer/trainer_utils.py +++ b/models/rfd3/src/rfd3/trainer/trainer_utils.py @@ -13,6 +13,7 @@ ATOM14_ATOM_NAMES, ATOM23_ATOM_NAMES_DNA, ATOM23_ATOM_NAMES_RNA, + backbone_atoms_RNA, VIRTUAL_ATOM_ELEMENT_NAME, association_schemes, association_schemes_stripped, From 45e8f837ce4b2497c39e4e4da65e67550b3ce104 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Thu, 5 Feb 2026 12:40:50 -0800 Subject: [PATCH 13/49] mor einference fixes --- .../rfd3/inference/legacy_input_parsing.py | 26 +++++++++++++------ .../rfd3/src/rfd3/transforms/virtual_atoms.py | 1 + 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py index 7bf1a50b..61cd34f7 100644 --- a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py +++ b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py @@ -117,7 +117,6 @@ def fetch_motif_residue_( NB: For glycines, we extend the array with a CB position so as to not leak whether the original residue is a glycine if sequence is masked during inference. """ - assert ( src_atom_array is not None ), "Motif provided in contigs, but no input provided. input={} contig={}".format( @@ -227,9 +226,15 @@ def fetch_motif_residue_( "is_motif_atom_with_fixed_coord", np.zeros(subarray.shape[0], dtype=int) ) else: - subarray.set_annotation( - "is_motif_atom_with_fixed_coord", subarray.is_motif_atom.copy() - ) + if "is_motif_atom" in subarray.get_annotation_categories(): + subarray.set_annotation( + "is_motif_atom_with_fixed_coord", subarray.is_motif_atom.copy() + ) + else: + subarray.set_annotation( + "is_motif_atom_with_fixed_coord", np.array([True]*len(subarray)) + ) + if flexible_backbone: backbone_atoms = ["N", "CA", "C", "O"] is_flexible_motif_atom = np.isin(subarray.atom_name, backbone_atoms) @@ -242,12 +247,17 @@ def fetch_motif_residue_( "is_flexible_motif_atom", np.zeros(subarray.shape[0], dtype=bool) ) if to_unindex: - subarray.set_annotation( - "is_motif_atom_unindexed", subarray.is_motif_atom.copy() - ) + if "is_motif_atom" in subarray.get_annotation_categories(): + subarray.set_annotation( + "is_motif_atom_unindexed", subarray.is_motif_atom.copy() + ) + else: + subarray.set_annotation( + "is_motif_atom_unindexed", np.array([True]*len(subarray)) + ) # Subset to desired motif atoms subarray = subarray[subarray.is_motif_atom.astype(bool)] - + # ... Relax sequence constraint if provided if ( exists(unfixed_sequence_components) diff --git a/models/rfd3/src/rfd3/transforms/virtual_atoms.py b/models/rfd3/src/rfd3/transforms/virtual_atoms.py index 9e9fea8a..31ec59ae 100644 --- a/models/rfd3/src/rfd3/transforms/virtual_atoms.py +++ b/models/rfd3/src/rfd3/transforms/virtual_atoms.py @@ -237,6 +237,7 @@ def forward(self, data: dict) -> dict: mask = get_af3_token_representative_masks( token, central_atom=central_atom ) + assert_single_representative(token, central_atom=central_atom) # ... Create virtual atoms From 335e58039060f9391f901f5d3ce03cec14822ee9 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 6 Feb 2026 11:45:31 -0800 Subject: [PATCH 14/49] fix: tiny legacy parsing bug --- models/rfd3/src/rfd3/inference/legacy_input_parsing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py index 61cd34f7..aed3cc98 100644 --- a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py +++ b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py @@ -251,12 +251,12 @@ def fetch_motif_residue_( subarray.set_annotation( "is_motif_atom_unindexed", subarray.is_motif_atom.copy() ) + # Subset to desired motif atoms + subarray = subarray[subarray.is_motif_atom.astype(bool)] else: subarray.set_annotation( "is_motif_atom_unindexed", np.array([True]*len(subarray)) ) - # Subset to desired motif atoms - subarray = subarray[subarray.is_motif_atom.astype(bool)] # ... Relax sequence constraint if provided if ( From cff03801ed072113ed84313b1faf731883a56768 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Mon, 9 Feb 2026 11:37:38 -0800 Subject: [PATCH 15/49] inference fixes --- models/rfd3/src/rfd3/metrics/design_metrics.py | 15 +++++++++++---- .../rfd3/src/rfd3/transforms/design_transforms.py | 4 +++- models/rfd3/src/rfd3/transforms/na_geom.py | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/models/rfd3/src/rfd3/metrics/design_metrics.py b/models/rfd3/src/rfd3/metrics/design_metrics.py index cb9dad6a..67d4266b 100644 --- a/models/rfd3/src/rfd3/metrics/design_metrics.py +++ b/models/rfd3/src/rfd3/metrics/design_metrics.py @@ -12,9 +12,10 @@ from foundry.common import exists from foundry.metrics.metric import Metric +from rfd3.constants import backbone_atoms_RNA STANDARD_CACA_DIST = 3.8 - +STANDARD_P_P_DISTANCE = 6.4 ## average of B and A form 7 and 5.9 def get_clash_metrics( atom_array, @@ -28,7 +29,13 @@ def get_clash_metrics( ) def get_chainbreaks(): - ca_atoms = atom_array[atom_array.atom_name == "CA"] + if "CA" in atom_array.atom_name: + ca_atoms = atom_array[atom_array.atom_name == "CA"] + cut_off = STANDARD_CACA_DIST + elif "P" in atom_array.atom_name: + ca_atoms = atom_array[atom_array.atom_name == "P"] + cut_off = STANDARD_P_P_DISTANCE + xyz = ca_atoms.coord xyz = torch.from_numpy(xyz) ca_dists = torch.norm(xyz[1:] - xyz[:-1], dim=-1) @@ -45,7 +52,7 @@ def get_chainbreaks(): } def get_interresidue_clashes(backbone_only=False): - protein_array = atom_array[atom_array.is_protein] + protein_array = atom_array[atom_array.is_protein | atom_array.is_dna | atom_array.is_rna] resid = protein_array.res_id - protein_array.res_id.min() xyz = protein_array.coord dists = np.linalg.norm(xyz[:, None] - xyz[None], axis=-1) # N_atoms x N_atoms @@ -58,7 +65,7 @@ def get_interresidue_clashes(backbone_only=False): if backbone_only: # Block out non-backbone atoms - backbone_mask = np.isin(protein_array.atom_name, ["N", "CA", "C"]) + backbone_mask = np.isin(protein_array.atom_name, ["N", "CA", "C"] + backbone_atoms_RNA) mask = backbone_mask[:, None] & backbone_mask[None, :] dists[~mask] = 999 diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index 57e98b77..ca7482a9 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -823,9 +823,11 @@ def generate_token_feature(self, feature_name, n_dims, data): # Don't do this if we already have the feature if feature_name in data["feats"].keys(): return data - + # For these, we need to use a constructor function mapping, # since pair features may require custom logic/conventions. + + ## for old ckpt handling ## if feature_name in self.constructor_functions.keys(): feature_array = self.constructor_functions[feature_name](data["atom_array"]) else: diff --git a/models/rfd3/src/rfd3/transforms/na_geom.py b/models/rfd3/src/rfd3/transforms/na_geom.py index 2cef7822..2a93150b 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom.py +++ b/models/rfd3/src/rfd3/transforms/na_geom.py @@ -196,7 +196,7 @@ def forward(self, data: dict) -> dict: token_level_array = atom_array[token_starts] token_ids = [int(t) for t in token_level_array.token_id] n_tokens = len(token_starts) - print(" DO I NEED TO CHANGE TO TOKEN_ID???") + #TODO print(" DO I NEED TO CHANGE TO TOKEN_ID???") # Handle the training case with ground truth and masking: if not self.is_inference and (np.random.rand() < self.sampling_prob): From d7fe89b8f54039ec57cee9082dce81d7a90d8969 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Tue, 10 Feb 2026 18:25:01 -0800 Subject: [PATCH 16/49] ligand chain fix; add ori_jitter option in new dialect --- models/rfd3/src/rfd3/inference/input_parsing.py | 12 +++++++++++- .../rfd3/src/rfd3/inference/legacy_input_parsing.py | 6 ++++++ models/rfd3/src/rfd3/utils/inference.py | 13 ++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/models/rfd3/src/rfd3/inference/input_parsing.py b/models/rfd3/src/rfd3/inference/input_parsing.py index 17032e43..f3091805 100644 --- a/models/rfd3/src/rfd3/inference/input_parsing.py +++ b/models/rfd3/src/rfd3/inference/input_parsing.py @@ -184,6 +184,7 @@ class DesignInputSpecification(BaseModel): symmetry: Optional[SymmetryConfig] = Field(None, description="Symmetry specification, see docs/symmetry.md") # Centering & COM guidance ori_token: Optional[list[float]] = Field(None, description="Origin coordinates") + ori_jitter: Optional[float] = Field(None, description="Jitter ori in a random direction and use ori_jitter to sample distance via exponential distribution") infer_ori_strategy: Optional[str] = Field(None, description="Strategy for inferring origin; `com` or `hotspots`") # Additional global conditioning plddt_enhanced: Optional[bool] = Field(True, description="Enable pLDDT enhancement") @@ -725,6 +726,13 @@ def _append_ligand(self, atom_array, atom_array_input_annotated): ligand_array.set_annotation( annot, np.full(ligand_array.array_length(), default) ) + + chain_cand = 'X' + while chain_cand in atom_array.chain_id.tolist(): + chain_cand = chain_cand + chain_cand + ligand_chain = np.array([chain_cand]*len(ligand_array)) + ligand_array.chain_id = ligand_chain + atom_array = atom_array + ligand_array return atom_array @@ -749,8 +757,10 @@ def _set_origin(self, atom_array): "Partial diffusion with symmetry: skipping COM centering to preserve chain spacing" ) else: + if not exists(self.ori_jitter): + self.ori_jitter = None atom_array = set_com( - atom_array, ori_token=None, infer_ori_strategy="com" + atom_array, ori_token=None, infer_ori_strategy="com", ori_jitter=self.ori_jitter ) else: # Standard: set ori token, zero out diffused atoms diff --git a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py index aed3cc98..fbee3463 100644 --- a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py +++ b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py @@ -736,6 +736,12 @@ def create_atom_array_from_design_specification_legacy( + np.max(atom_array.res_id) + 1 ) + chain_cand = 'X' + while chain_cand in atom_array.chain_id.tolist(): + chain_cand = chain_cand + chain_cand + ligand_chain = np.array([chain_cand]*len(ligand_array)) + ligand_array.chain_id = ligand_chain + atom_array = atom_array + ligand_array # ... Apply symmetry if it exists ahead of any other processing diff --git a/models/rfd3/src/rfd3/utils/inference.py b/models/rfd3/src/rfd3/utils/inference.py index 2d04e149..426eace2 100644 --- a/models/rfd3/src/rfd3/utils/inference.py +++ b/models/rfd3/src/rfd3/utils/inference.py @@ -452,7 +452,7 @@ def infer_ori_from_com(atom_array): def set_com( - atom_array, ori_token: list | None = None, infer_ori_strategy: str | None = None + atom_array, ori_token: list | None = None, infer_ori_strategy: str | None = None, ori_jitter: float | None = None ): if exists(ori_token): center = np.array([float(x) for x in ori_token], dtype=atom_array.coord.dtype) @@ -505,6 +505,17 @@ def set_com( atom_array.coord = np.zeros_like( atom_array.coord, dtype=atom_array.coord.dtype ) + if ori_jitter is not None: + # randomly jitter ori with given scale + direction = np.random.normal(size=3) + direction /= np.linalg.norm(direction) + + # Random length (mean ~ scale) + length = np.random.exponential(scale=scale) + jittered_offset = direction*length + + atom_array.coord -= jittered_offset + return atom_array From 22d24edc5be5c17ae788e4da45df6ea104c84f1d Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Mon, 16 Feb 2026 12:13:11 -0800 Subject: [PATCH 17/49] make 2oken_2d_features/embedder optional --- models/rfd3/src/rfd3/model/layers/encoders.py | 10 +++++++--- models/rfd3/src/rfd3/transforms/design_transforms.py | 4 +++- models/rfd3/src/rfd3/transforms/pipelines.py | 6 +++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/models/rfd3/src/rfd3/model/layers/encoders.py b/models/rfd3/src/rfd3/model/layers/encoders.py index 363fc4de..a3c37cf6 100644 --- a/models/rfd3/src/rfd3/model/layers/encoders.py +++ b/models/rfd3/src/rfd3/model/layers/encoders.py @@ -50,9 +50,9 @@ def __init__( pairformer_block, downcast, token_1d_features, - token_2d_features, atom_1d_features, atom_transformer, + token_2d_features=None, use_chunked_pll=False, # New parameter for memory optimization ): super().__init__() @@ -64,7 +64,10 @@ def __init__( self.atom_1d_embedder_1 = OneDFeatureEmbedder(atom_1d_features, c_s) self.atom_1d_embedder_2 = OneDFeatureEmbedder(atom_1d_features, c_atom) self.token_1d_embedder = OneDFeatureEmbedder(token_1d_features, c_s) - self.token_2d_embedder = TwoDFeatureEmbedder(token_2d_features, c_z) + if token_2d_features != None: + self.token_2d_embedder = TwoDFeatureEmbedder(token_2d_features, c_z) + else: + self.token_2d_embedder = None self.downcast_atom = Downcast(c_atom=c_s, c_token=c_s, c_s=None, **downcast) self.transition_post_token = Transition(c=c_s, n=2) @@ -206,7 +209,8 @@ def init_tokens(): f["ref_pos"][f["is_ca"]], valid_mask ) # Add extra token pair features - Z_init_II = Z_init_II + self.token_2d_embedder(f, I) + if self.token_2d_embedder != None: + Z_init_II = Z_init_II + self.token_2d_embedder(f, I) # Run a small transformer to provide position encodings to single. for block in self.transformer_stack: diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index ca7482a9..1ee14ce3 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -803,7 +803,7 @@ def __init__( token_2d_features, autofill_zeros_if_not_present_in_atomarray=False, association_scheme="atom14", - ): + ): self.autofill = autofill_zeros_if_not_present_in_atomarray self.token_2d_features = token_2d_features self.association_scheme = association_scheme @@ -866,6 +866,8 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: if "feats" not in data.keys(): data["feats"] = {} # Only apply for features that the model is expecting: + if self.token_2d_features == None: + return data for feature_name, n_dims in self.token_2d_features.items(): data = self.generate_token_feature(feature_name, n_dims, data) diff --git a/models/rfd3/src/rfd3/transforms/pipelines.py b/models/rfd3/src/rfd3/transforms/pipelines.py index f7eb9a05..940dfab6 100644 --- a/models/rfd3/src/rfd3/transforms/pipelines.py +++ b/models/rfd3/src/rfd3/transforms/pipelines.py @@ -353,7 +353,7 @@ def build_atom14_base_pipeline_( center_option: str, atom_1d_features: dict | None, token_1d_features: dict | None, - token_2d_features: dict | None, + token_2d_features: dict | None = None, # PPI features max_ppi_hotspots_frac_to_provide: float, ppi_hotspot_max_distance: float, @@ -373,7 +373,7 @@ def build_atom14_base_pipeline_( """ warnings.filterwarnings("ignore", category=RuntimeWarning) warnings.filterwarnings("ignore", category=DeprecationWarning) - + # Add any data necessary for downstream transforms transforms = [ AddData( @@ -653,7 +653,7 @@ def build_atom14_base_pipeline( kwargs.setdefault("residue_cache_dir", None) # TODO: Delete these once all checkpoints are updated with the latest defaults - kwargs.setdefault("generate_conformers_for_non_protein_only", True) + kwargs.setdefault("generate_conformers_for_non_protein_only", False) kwargs.setdefault("return_atom_array", True) kwargs.setdefault("provide_elements_for_unindexed_components", False) kwargs.setdefault("center_option", "all") From 4478253fa95a0f2af6b66c56d34fc24f72f1f816 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Mon, 16 Feb 2026 12:48:48 -0800 Subject: [PATCH 18/49] dll bug fix --- models/rfd3/src/rfd3/model/layers/block_utils.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/models/rfd3/src/rfd3/model/layers/block_utils.py b/models/rfd3/src/rfd3/model/layers/block_utils.py index aeac08c8..c2bbd56c 100644 --- a/models/rfd3/src/rfd3/model/layers/block_utils.py +++ b/models/rfd3/src/rfd3/model/layers/block_utils.py @@ -210,7 +210,7 @@ def create_attention_indices( chain_ids is not None and len(torch.unique(chain_ids)) > 3 ): # Multi-chain structure # Reserve 25% of attention keys for inter-chain interactions - k_inter_chain = max(32, k_actual // 4) # At least 32 inter-chain keys + k_inter_chain = min(max(32, k_actual // 4), k_actual) # At least 32 inter-chain keys k_intra_chain = k_actual - k_inter_chain attn_indices = get_sparse_attention_indices_with_inter_chain( @@ -413,7 +413,10 @@ def extend_index_mask_with_neighbours( # 2. Find k-nn excluding forced indices D_LL = torch.where(mask, inf, D_LL) - filler_idx = torch.topk(D_LL, k, dim=-1, largest=False).indices + try: + filler_idx = torch.topk(D_LL, k, dim=-1, largest=False).indices + except: + raise ValueError(f"DLL has nan?: {torch.isnan(D_LL).any()}, D_LL shape: {D_LL.shape}, k: {k}") # ... Reverse last axis s.t. best matched indices are last filler_idx = filler_idx.flip(dims=[-1]) From d8b8d0c04792d6da0756b9c88d008b7bc4d3d721 Mon Sep 17 00:00:00 2001 From: afavor Date: Mon, 16 Feb 2026 13:34:07 -0800 Subject: [PATCH 19/49] cleaned up NA-SS conditioning code before rebase --- models/rfd3/src/rfd3/constants.py | 67 +- .../src/rfd3/transforms/design_transforms.py | 4 +- models/rfd3/src/rfd3/transforms/na_geom.py | 255 +-- .../rfd3/src/rfd3/transforms/na_geom_utils.py | 1504 ++++++++--------- 4 files changed, 894 insertions(+), 936 deletions(-) diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index bba1925d..1e023eda 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -440,74 +440,73 @@ # Mapping from residue type to its backbone and sidechain atoms (for convenience) ATOM_REGION_BY_RESI = { - 'ALA': {'bb':('N','CA','C','O'), + 'ALA': {'bb':('N','CA','C','O'), 'sc':('CB')}, - 'ARG': {'bb':('N','CA','C','O'), + 'ARG': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD','NE','CZ','NH1','NH2')}, - 'ASN': {'bb':('N','CA','C','O'), + 'ASN': {'bb':('N','CA','C','O'), 'sc':('CB','CG','OD1','ND2')}, - 'ASP': {'bb':('N','CA','C','O'), + 'ASP': {'bb':('N','CA','C','O'), 'sc':('CB','CG','OD1','OD2')}, - 'CYS': {'bb':('N','CA','C','O'), + 'CYS': {'bb':('N','CA','C','O'), 'sc':('CB','SG')}, - 'GLN': {'bb':('N','CA','C','O'), + 'GLN': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD','OE1','NE2')}, - 'GLU': {'bb':('N','CA','C','O'), + 'GLU': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD','OE1','OE2')}, - 'GLY': {'bb':('N','CA','C','O'), + 'GLY': {'bb':('N','CA','C','O'), 'sc':()}, - 'HIS': {'bb':('N','CA','C','O'), + 'HIS': {'bb':('N','CA','C','O'), 'sc':('CB','CG','ND1','CD2','CE1','NE2')}, - 'ILE': {'bb':('N','CA','C','O'), + 'ILE': {'bb':('N','CA','C','O'), 'sc':('CB','CG1','CG2','CD1')}, - 'LEU': {'bb':('N','CA','C','O'), + 'LEU': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD1','CD2')}, - 'LYS': {'bb':('N','CA','C','O'), + 'LYS': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD','CE','NZ')}, - 'MET': {'bb':('N','CA','C','O'), + 'MET': {'bb':('N','CA','C','O'), 'sc':('CB','CG','SD','CE')}, - 'PHE': {'bb':('N','CA','C','O'), + 'PHE': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ')}, - 'PRO': {'bb':('N','CA','C','O'), + 'PRO': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD')}, - 'SER': {'bb':('N','CA','C','O'), + 'SER': {'bb':('N','CA','C','O'), 'sc':('CB','OG')}, - 'THR': {'bb':('N','CA','C','O'), + 'THR': {'bb':('N','CA','C','O'), 'sc':('CB','OG1','CG2')}, - 'TRP': {'bb':('N','CA','C','O'), + 'TRP': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD1','CD2','CE2','CE3','NE1','CZ2','CZ3','CH2')}, - 'TYR': {'bb':('N','CA','C','O'), + 'TYR': {'bb':('N','CA','C','O'), 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ','OH')}, - 'VAL': {'bb':('N','CA','C','O'), + 'VAL': {'bb':('N','CA','C','O'), 'sc':('CB','CG1','CG2')}, - 'UNK': {'bb':('N','CA','C','O'), + 'UNK': {'bb':('N','CA','C','O'), 'sc':('CB')}, - 'MAS': {'bb':('N','CA','C','O'), + 'MAS': {'bb':('N','CA','C','O'), 'sc':('CB')}, - 'DA': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'DA': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N6')}, - 'DC': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'DC': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, - 'DG': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'DG': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N2','O6')}, - 'DT': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'DT': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), 'sc':('N1','C2','O2','N3','C4','O4','C5','C7','C6')}, - 'DX': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), + 'DX': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), 'sc':()}, - 'A': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'A': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), 'sc':('N1','C2','N3','C4','C5','C6','N6','N7','C8','N9')}, - 'C': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'C': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, - 'G': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'G': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), 'sc':('N1','C2','N2','N3','C4','C5','C6','O6','N7','C8','N9')}, - 'U': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'U': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), 'sc':('N1','C2','O2','N3','C4','O4','C5','C6')}, - 'X': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), + 'X': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), 'sc':()}, - 'HIS_D': {'bb':('N','CA','C','O'), + 'HIS_D': {'bb':('N','CA','C','O'), 'sc':('CB','CG','NE2','CD2','CE1','ND1')}, } - # Known planar sidechain atoms for each canonical residue type: PLANAR_ATOMS_BY_RESI = { 'ALA': [], diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index 1ee14ce3..c1193a30 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -45,7 +45,7 @@ get_af3_token_representative_masks, ) from rfd3.transforms.virtual_atoms import PadTokensWithVirtualAtoms -from rfd3.transforms.na_geom import get_bp_feats_from_atom_array +from rfd3.transforms.na_geom import na_ss_feats_from_annotation from foundry.utils.ddp import RankedLogger # noqa @@ -811,7 +811,7 @@ def __init__( # Need to pre-define custom constructor functions # to map from atomarray annotations to tensors. self.constructor_functions = { - 'bp_partners': get_bp_feats_from_atom_array, + 'bp_partners': na_ss_feats_from_annotation, } def check_input(self, data) -> None: diff --git a/models/rfd3/src/rfd3/transforms/na_geom.py b/models/rfd3/src/rfd3/transforms/na_geom.py index 2a93150b..a1c8565d 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom.py +++ b/models/rfd3/src/rfd3/transforms/na_geom.py @@ -12,86 +12,80 @@ from rfd3.transforms.na_geom_utils import ( annotate_na_ss, annotate_na_ss_from_data_specification, - bp_partner_to_ss_matrix, + DEFAULT_NA_SS_FEATURE_INFO, ) from atomworks.ml.utils.token import spread_token_wise, get_token_starts -def get_bp_feats_from_atom_array( - atom_array: AtomArray, -) -> np.ndarray: - """Build NA-SS features from atom_array annotations, assuming 'bp_partners' is present. +def na_ss_feats_from_annotation(atom_array: AtomArray, + token_starts= None, + n_tokens = None, + return_as_onehot = True, + ) -> np.ndarray: + """ + Takes in atom array and constucts a base pair feature matrix from annotations, + according to to custom feature constuction + masking system. + This featurization utilizes info from BasePairEnum to assign int values + to paired, unpaired, and masked positions in the matrix. + + Args: + * atom_array: AtomArray with bp_partners annotation at atom level + * token_starts (optional): indices of token starts in the atom array + * n_tokens (optional): number of tokens (length of token_starts) + * return_as_onehot (optional): if False, return integer-encoded + matrix instead of one-hot encoded matrix + + returns: + * na_ss_matrix: + If ``return_as_onehot`` is True (default): + np.ndarray of shape (n_tokens, n_tokens, n_classes) + with one-hot encoded values according to BasePairEnum + + If ``return_as_onehot`` is False : + np.ndarray of shape (n_tokens, n_tokens) + with int values according to BasePairEnum + - This function reconstructs the SS matrix from the 'bp_partners' annotation on the atom_array, - then one-hot encodes it into a 3-class matrix (mask, pair, loop). """ - # Fixed feature info (inferred from usage in other functions) - feature_info = { - 'NA_SS_MASK': 0, # Unspecified - 'NA_SS_PAIR': 1, # Paired - 'NA_SS_LOOP': 2, # Loop / unpaired - 'num_classes_nucleic_ss': 3, - } - - # Check for required annotation - if "bp_partners" not in atom_array.get_annotation_categories(): - raise ValueError("atom_array must have 'bp_partners' annotation for NA-SS feature building.") - - # Reconstruct SS matrix from annotations - na_ss_matrix = np.asarray( - bp_partner_to_ss_matrix( - atom_array, - feature_info=feature_info, - NA_only=False, # Include all residues (logic from other utils) - planar_only=True, # Use planar interactions (common default) - include_loops=True, # Include loop states - ), - dtype=np.int64, - ) - - # One-hot encode the matrix - na_ss_matrix_int = np.asarray(na_ss_matrix, dtype=np.int64) - eye = np.eye(int(feature_info['num_classes_nucleic_ss']), dtype=np.int64) - return eye[na_ss_matrix_int] - - -def _build_na_ss_features_from_annotations( - atom_array: AtomArray, - *, - feature_info: dict, - num_classes: int, - NA_only: bool, - planar_only: bool, - is_nucleic_ss_example: bool, - give_partial_feats: bool, - get_feature_mask_fn, -) -> np.ndarray: - """Reconstruct SS matrix from annotations, optionally mask, then one-hot.""" - na_ss_matrix = np.asarray( - bp_partner_to_ss_matrix( - atom_array, - feature_info=feature_info, - NA_only=NA_only, - planar_only=planar_only, - include_loops=True, - ), - dtype=np.int64, - ) - - n_tokens = int(na_ss_matrix.shape[0]) - - if give_partial_feats: - is_shown = ( - np.asarray(get_feature_mask_fn(n_tokens), dtype=bool) - if is_nucleic_ss_example - else np.zeros((n_tokens,), dtype=bool) - ) - na_ss_matrix[~is_shown, :] = feature_info["NA_SS_MASK"] - na_ss_matrix[:, ~is_shown] = feature_info["NA_SS_MASK"] - - na_ss_matrix_int = np.asarray(na_ss_matrix, dtype=np.int64) - eye = np.eye(int(num_classes), dtype=np.int64) - return eye[na_ss_matrix_int] + # Get this info from atom_array, or avoid if given + if (token_starts is None) or (n_tokens is None): + token_starts = get_token_starts(atom_array) + n_tokens = len(token_starts) + + + # Collect token inds for paired or loop positions: + pair_inds = [] + loop_inds = [] + token_bp_partners = atom_array.get_annotation("bp_partners")[token_starts] # get bp_partners at token level + assert len(token_bp_partners) == n_tokens, "Length of token_bp_partners should match n_tokens" + for i, j_list in enumerate(token_bp_partners): + if j_list is not None: + if len(j_list) > 0: + for j in j_list: + pair_inds.append((i, j)) + else: + loop_inds.append(i) + + # The standard system for constructing meaningful base pair features: + # 0). Initialize with values of UNSPECIFIED (0): int matrix of shape (n_tokens, n_tokens) + na_ss_matrix = np.full((n_tokens, n_tokens), DEFAULT_NA_SS_FEATURE_INFO["NA_SS_MASK"], dtype=np.int64) + + # 1). Fill in with values of PAIR (1) at positions that have bp_partners annotated as a non-empty list + for pair_i, pair_j in pair_inds: + na_ss_matrix[pair_i, pair_j] = DEFAULT_NA_SS_FEATURE_INFO["NA_SS_PAIR"] + na_ss_matrix[pair_j, pair_i] = DEFAULT_NA_SS_FEATURE_INFO["NA_SS_PAIR"] # ensure symmetry + + # 2). Fill in with values of LOOP (2) at positions that have bp_partners annotated as an empty list (explicitly unpaired) + # (we make full stripes across that position's row/col to indicate that NONE of those other positions are paired ) + for loop_i in loop_inds: + na_ss_matrix[loop_i, :] = DEFAULT_NA_SS_FEATURE_INFO["NA_SS_LOOP"] + na_ss_matrix[:, loop_i] = DEFAULT_NA_SS_FEATURE_INFO["NA_SS_LOOP"] # ensure symmetry + + # Optional: convert NA-SS matrix to one-hot encoding according for model input: + if return_as_onehot: + na_ss_matrix = np.eye(len(DEFAULT_NA_SS_FEATURE_INFO), dtype=np.int64)[na_ss_matrix] + + return na_ss_matrix class CalculateNucleicAcidGeomFeats(Transform): @@ -119,11 +113,12 @@ class CalculateNucleicAcidGeomFeats(Transform): def __init__( self, is_inference, - meta_conditioning_probabilities, - + add_nucleic_ss_feats: bool = True, + # Conditional sampling parameters: p_is_nucleic_ss_example: float = 0.3, - p_show_partial_feats: float = 0.5, - nucleic_ss_min_shown: float = 0.0, + p_show_partial_feats: float = 0.7, + # Mask control paramerers: + nucleic_ss_min_shown: float = 0.2, nucleic_ss_max_shown: float = 1.0, n_islands_min: int = 1, n_islands_max: int = 6, @@ -136,39 +131,22 @@ def __init__( ): # Critical, must always have to know how to handle self.is_inference = is_inference - if not self.is_inference: - ## relevant in training - self.sampling_prob = meta_conditioning_probabilities['calculate_NA_SS'] - else: - ## irrelevant in inference - self.sampling_prob = 0 - # For sampling whether we add nucleic-ss features (extra t2d) - - # relevant in training - self.add_nucleic_ss_feats = (self.sampling_prob > 0) - ###### + self.add_nucleic_ss_feats = add_nucleic_ss_feats self.p_canonical_bp_filter = p_canonical_bp_filter # enforce that bp labels are only canonical self.p_is_nucleic_ss_example = p_is_nucleic_ss_example + self.p_show_partial_feats = p_show_partial_feats self.nucleic_ss_min_shown = nucleic_ss_min_shown self.nucleic_ss_max_shown = nucleic_ss_max_shown self.n_islands_min = n_islands_min self.n_islands_max = n_islands_max - self.p_show_partial_feats = p_show_partial_feats # Filters for what can be considered a planar contact interaction self.NA_only = NA_only # only annotate base-like interactions for nucleic acid residues self.planar_only = planar_only # only consider planar atoms in sidechains for geometry calculations, self.p_canonical_bp_filter = p_canonical_bp_filter # probability of enforcing canonical base pair filter - # Inds of annotation types in the nucleic-ss features (stack of 3 matrices): - self.feature_info = { - 'NA_SS_MASK' : 0, # Unspecified, or sm, or protein: - 'NA_SS_PAIR' : 1, - 'NA_SS_LOOP' : 2, - 'num_classes_nucleic_ss' : 3, - } def check_input(self, data: dict[str, Any]) -> None: @@ -179,10 +157,7 @@ def check_input(self, data: dict[str, Any]) -> None: def _sample_training_flags(self) -> tuple[bool, bool]: """Sample booleans controlling whether/how features are shown in training.""" - is_nucleic_ss_example = bool( - self.add_nucleic_ss_feats - and (np.random.rand() < self.p_is_nucleic_ss_example) - ) + is_nucleic_ss_example = bool(np.random.rand() < self.p_is_nucleic_ss_example) give_partial_feats = bool( np.random.rand() < self.p_show_partial_feats ) @@ -194,28 +169,41 @@ def forward(self, data: dict) -> dict: # Calculate n_tokens (assuming one token per residue for simplicity) token_starts = get_token_starts(atom_array) token_level_array = atom_array[token_starts] - token_ids = [int(t) for t in token_level_array.token_id] n_tokens = len(token_starts) - #TODO print(" DO I NEED TO CHANGE TO TOKEN_ID???") - # Handle the training case with ground truth and masking: - if not self.is_inference and (np.random.rand() < self.sampling_prob): + + # Defaults for feature visibility + is_nucleic_ss_example = True + give_partial_feats = False + token_mask_to_show = np.ones(n_tokens, dtype=bool) + + # Handle the training case with ground truth and masking + if not self.is_inference: # First, annotate as usual - # atom_array = annotate_na_ss(atom_array, **kwargs) atom_array = annotate_na_ss(atom_array, NA_only=self.NA_only, planar_only=self.planar_only, p_canonical_bp_filter=self.p_canonical_bp_filter, ) - - # Sample mask on token level: + + # Generate symmetric partner annotations at the token level for masking purposes. + # choice for object-consistency: if already masked/undefined: be a list mapping to self-index. + partner_sym_map = { + i: atom_array.bp_partners[ts_i] if atom_array.bp_partners[ts_i] is not None else [i] + for i, ts_i in enumerate(token_starts) + } + + # # Sample mask on token level: is_nucleic_ss_example, give_partial_feats = self._sample_training_flags() - is_ss_shown = self._sample_where_to_show_ss(n_tokens, - is_nucleic_ss_example=is_nucleic_ss_example, - give_partial_feats=give_partial_feats) # Mask vec for tokens where ss shown - # Spread mask to atom level - is_ss_shown = spread_token_wise(atom_array, is_ss_shown) + token_mask_to_show = self._sample_where_to_show_ss( + n_tokens, + is_nucleic_ss_example=is_nucleic_ss_example, + give_partial_feats=give_partial_feats, + partner_sym_map=partner_sym_map, + ) # Mask vec for tokens where ss shown + # Spread mask to atom level + is_ss_shown = spread_token_wise(atom_array, token_mask_to_show) # Extract the base pair annotations bp_partners_atom = atom_array.get_annotation("bp_partners") @@ -233,11 +221,7 @@ def forward(self, data: dict) -> dict: - 1). Single dot-bracket string - 2). multiple dot bracket strings with chain/ind ranges specified - 3). Lists of paired indices - """ - #is_nucleic_ss_example=True - #give_partial_feats=False - atom_array = annotate_na_ss_from_data_specification( data, overwrite=True, @@ -247,28 +231,34 @@ def forward(self, data: dict) -> dict: if "feats" not in data: data["feats"] = {} - # data["feats"].update(nucleic_features) data.setdefault("log_dict", {}) log_dict = data["log_dict"] data["log_dict"] = log_dict data["atom_array"] = atom_array - + return data def _sample_where_to_show_ss(self, n_tokens: int, is_nucleic_ss_example: bool = True, give_partial_feats: bool = True, + partner_sym_map: dict[int, list[int]] = None, ) -> np.ndarray: - """Sample token-level islands indicating which SS rows/cols to reveal.""" + """Sample token-level islands indicating which SS rows/cols to reveal. + This custom function allows for enforcing symmetry in the shown features according + to the partner_sym_map, which encodes which tokens are partners in the SS + matrix and thus should be masked/unmasked together to maintain consistency. + + """ # If NOT is_nucleic_ss_example, set is_shown to all False if not is_nucleic_ss_example: - return np.zeros((n_tokens,), dtype=bool) + token_mask_to_show = np.zeros((n_tokens,), dtype=bool) # If NOT give_partial_feats, set is_shown to all True if not give_partial_feats: - return np.ones((n_tokens,), dtype=bool) + token_mask_to_show = np.ones((n_tokens,), dtype=bool) else: + # Get numerical parameters for that govern the mask pattern frac_shown = ( self.nucleic_ss_min_shown + (self.nucleic_ss_max_shown - self.nucleic_ss_min_shown) * np.random.rand() @@ -276,15 +266,15 @@ def _sample_where_to_show_ss(self, n_tokens: int, frac_shown = float(np.clip(frac_shown, 0.0, 1.0)) max_length = int(np.ceil(frac_shown * n_tokens)) if max_length <= 0: - return np.zeros((n_tokens,), dtype=bool) - + token_mask_to_show = np.zeros((n_tokens,), dtype=bool) island_len_min = max(1, int(frac_shown * n_tokens // max(int(self.n_islands_max), 1))) island_len_max = max(1, int(frac_shown * n_tokens // max(int(self.n_islands_min), 1))) island_len_min = min(island_len_min, n_tokens) island_len_max = min(island_len_max, n_tokens) island_len_max = max(island_len_max, island_len_min) - - return sample_island_tokens( + + # Sample the actual mask using the utility function: + token_mask_to_show = sample_island_tokens( n_tokens, island_len_min=island_len_min, island_len_max=island_len_max, @@ -292,4 +282,17 @@ def _sample_where_to_show_ss(self, n_tokens: int, n_islands_max=self.n_islands_max, max_length=max_length, ) + + # Handle symmetry by iterating through the partner_sym_map items and setting + # `partner_mask_to_show` at partner positions to match `token_mask_to_show` + # initialize as all shown so effect comes from hiding + logical AND condition + partner_mask_to_show = np.ones_like(token_mask_to_show) + for token_i, partner_ind_list in partner_sym_map.items(): + for partner_ind in partner_ind_list: + partner_mask_to_show[partner_ind] = token_mask_to_show[token_i] + + # Combine the original mask with the partner mask to ensure symmetry + token_mask_to_show = token_mask_to_show & partner_mask_to_show + + return token_mask_to_show diff --git a/models/rfd3/src/rfd3/transforms/na_geom_utils.py b/models/rfd3/src/rfd3/transforms/na_geom_utils.py index 29be56f8..8ab2e71c 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom_utils.py +++ b/models/rfd3/src/rfd3/transforms/na_geom_utils.py @@ -4,9 +4,11 @@ from typing import Dict, Optional import math import numpy as np +import biotite.structure as struc from biotite.structure import AtomArray from atomworks.constants import ( + STANDARD_AA, STANDARD_DNA, STANDARD_RNA, ) @@ -26,72 +28,63 @@ from atomworks.ml.encoding_definitions import AF3SequenceEncoding +from rfd3.constants import ( +ATOM_REGION_BY_RESI, +PLANAR_ATOMS_BY_RESI, +) + + +# Derived: True when the residue has any planar sidechain atoms +HAS_PLANAR_SC = {res: bool(atoms) for res, atoms in PLANAR_ATOMS_BY_RESI.items()} DEFAULT_NA_SS_FEATURE_INFO: dict[str, int] = { "NA_SS_MASK": 0, "NA_SS_PAIR": 1, "NA_SS_LOOP": 2, - "num_classes_nucleic_ss": 3, } +AA_PLANAR_ATOMS = sorted(set( + atom for res in STANDARD_AA if res in PLANAR_ATOMS_BY_RESI + for atom in PLANAR_ATOMS_BY_RESI[res] +)) -# Move to function scope to avoid module-level memory retention -def _get_sequence_encoding_data(): - """Get sequence encoding data on demand to avoid persistent module-level variables.""" - sequence_encoding = AF3SequenceEncoding() - return { - 'aa_like_res_names': sequence_encoding.all_res_names[sequence_encoding.is_aa_like], - 'rna_like_res_names': sequence_encoding.all_res_names[sequence_encoding.is_rna_like], - 'dna_like_res_names': sequence_encoding.all_res_names[sequence_encoding.is_dna_like], - 'sequence_encoding': sequence_encoding - } - +NA_PLANAR_ATOMS = sorted(set( + atom for res in (*STANDARD_RNA, *STANDARD_DNA) if res in PLANAR_ATOMS_BY_RESI + for atom in PLANAR_ATOMS_BY_RESI[res] +)) class NucMolInfo: - """ - Initializes constants and parameters relevant for computing nucleic acid geometry and interactions. - """ - def __init__(self, - cutoff_HA_dist = 2.5, - cutoff_DA_dist = 3.9, - ): - """ - Args: - kwargs: Optional keyword arguments for customization. - """ - - - # Optional parameters with default values - # self.incl_protein = True - self.eps = 1e-8 - # self.clamp_pairwise_params = True - # self.use_eigennormals = kwargs.get('use_eigennormals', True) - # self.use_all_base_atoms_for_MBD = kwargs.get('use_all_base_atoms_for_MBD', False) - self.edges_to_compute = ['S'] # list base edges to compute, if we want to analyze WC/Hoog/etc - self.perp_base_edge = 'S' # edge orthogonal to x- and z-directions in base frames (which is generally the sugar edge) - - self.cutoff_HA_dist = cutoff_HA_dist - self.cutoff_DA_dist = cutoff_DA_dist - self.seq_cutoff = 2 - self.gap_length = 200 + """Constants and parameters for nucleic-acid geometry and interaction scoring. + All parameters are set to empirically validated defaults. No constructor + arguments are currently accepted. + """ + def __init__(self) -> None: - # Hbond interaction type inds when counting: - self.BB_BB = 0 - self.BB_SC = 1 - self.SC_SC = 2 + # Hbond interaction-class indices of the `hbond_count`` array: + # `hbond_count`` array is (L, L, 3), where the last dimension + # encodes interaction type between tokens i & j + self.BB_BB = 0 # backbone-backbone hbond interactions + self.BB_SC = 1 # backbone-sidechain hbond interactions + self.SC_SC = 2 # sidechain-sidechain hbond interactions + # We sum over the last dimension of the hbond_count array, scaling + # count by the following weights to get the interaction score: self.bp_weight_BB_BB = 0.0 self.bp_weight_BB_SC = 0.5 self.bp_weight_SC_SC = 1.0 - self.bp_summation_weights = [self.bp_weight_BB_BB, self.bp_weight_BB_SC, self.bp_weight_SC_SC] + # Parameters fo sigmoid function that gives us a continuous step function for + # meeting basepair interaction criteria based on hbond counts alone (1st filter). + # Calibrated such that: + # >= 2 base-base H-bonds -> ~1.0 + # 1 base-base H-bond + 1 base-backbone H-bond -> ~0.5 self.min_hbonds_for_bp = 2.0 self.bp_hbond_coeff = 9.8 # determined heuristically self.bp_val_cutoff = 0.5 # minimum basepairing score for binarizing basepairs when needed @@ -102,91 +95,8 @@ def __init__(self, self.base_geometry_limits['P_ij'] = math.pi/5 self.base_geometry_limits['B_ij'] = math.pi/5 - # For interaction-edge classification (Watson-Crick, Hoogstein, Sugar, Base-other): - # self.edge_to_ind = {'W':0 , 'H':1 , 'S':2 ,'B':3} self.rep_atom_dict={"protein": "CA", "rna": "C1'", "dna": "C1'"} - self.has_planar_sc = { - 'ALA': False, - 'ARG': True, - 'ASN': True, - 'ASP': True, - 'CYS': False, - 'GLN': True, - 'GLU': True, - 'GLY': False, - 'HIS': True, - 'ILE': False, - 'LEU': False, - 'LYS': False, - 'MET': False, - 'PHE': True, - 'PRO': False, - 'SER': False, - 'THR': False, - 'TRP': True, - 'TYR': True, - 'VAL': False, - 'UNK': False, - 'MAS': False, - 'DA': True, - 'DC': True, - 'DG': True, - 'DT': True, - 'DX': False, - 'A': True, - 'C': True, - 'G': True, - 'U': True, - 'X': False, - 'HIS_D': True, - } - - - - # Make self.planar_atom_list_dict based on known planar atoms for each residue type: - self.planar_atom_list_dict = { - 'ALA': [], - 'ARG': ['NH1', 'NH2', 'CZ', 'NE', 'CD'], - 'ASN': ['OD1', 'ND2', 'CG', 'CB'], - 'ASP': ['OD1', 'OD2', 'CG', 'CB'], - 'CYS': [], - 'GLN': ['OE1', 'NE2', 'CD', 'CG'], - 'GLU': ['OE1', 'OE2', 'CD', 'CG'], - 'GLY': [], - 'HIS': ['ND1', 'CE1', 'NE2', 'CD2', 'CG', 'CB'], - 'ILE': [], - 'LEU': [], - 'LYS': [], - 'MET': [], - 'PHE': ['CZ', 'CE1', 'CE2', 'CD1', 'CD2', 'CG', 'CB'], - 'PRO': [], - 'SER': [], - 'THR': [], - 'TRP': ['CH2', 'CZ3', 'CZ2', 'CE3', 'CE2', 'CD2', 'NE1', 'CD1', 'CG', 'CB'], - 'TYR': ['OH', 'CZ', 'CE1', 'CE2', 'CD1', 'CD2', 'CG', 'CB'], - 'VAL': [], - 'UNK': [], - 'MAS': [], - 'DA': ['N6', 'C6', 'N1', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], - 'DC': ['N4', 'C4', 'N3', 'O2', 'C2', 'C5', 'C6', 'N1'], - 'DG': ['O6', 'C6', 'N1', 'N2', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], - 'DT': ['O4', 'O2', 'N3', 'C4', 'C2', 'C5', 'C6', 'N1', 'C7'], - 'DX': [], - 'A': ['N6', 'C6', 'N1', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], - 'C': ['N4', 'C4', 'N3', 'O2', 'C2', 'C5', 'C6', 'N1'], - 'G': ['O6', 'C6', 'N1', 'N2', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], - 'U': ['O4', 'O2', 'N3', 'C4', 'C2', 'C5', 'C6', 'N1'], - 'X': [], - 'HIS_D': ['ND1', 'CD2', 'CE1', 'NE2', 'CG', 'CB'], - } - - - # from pdb import set_trace; set_trace() - - self.nuc_resi_3letter = ["DA","DG","DC","DT","A","G","C","U"] - self.ring_atom_list = ["N1","C2","N3","C4","C6","C5"] - # go through self.vec_atom_dict and remove spaces from atom names (values in inner dicts), and remove spaces from keys + replace 'R' with '' in outer dict keys self.vec_atom_dict = { "DA": {"W_start":"N1", "W_stop":"N6", "H_start":"N7", "H_stop":"N6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, @@ -201,96 +111,154 @@ def __init__(self, - self.atom_region_dict = { - 'ALA': {'bb':('N','CA','C','O'), - 'sc':('CB')}, - 'ARG': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD','NE','CZ','NH1','NH2')}, - 'ASN': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','OD1','ND2')}, - 'ASP': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','OD1','OD2')}, - 'CYS': {'bb':('N','CA','C','O'), - 'sc':('CB','SG')}, - 'GLN': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD','OE1','NE2')}, - 'GLU': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD','OE1','OE2')}, - 'GLY': {'bb':('N','CA','C','O'), - 'sc':()}, - 'HIS': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','ND1','CD2','CE1','NE2')}, - 'ILE': {'bb':('N','CA','C','O'), - 'sc':('CB','CG1','CG2','CD1')}, - 'LEU': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD1','CD2')}, - 'LYS': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD','CE','NZ')}, - 'MET': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','SD','CE')}, - 'PHE': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ')}, - 'PRO': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD')}, - 'SER': {'bb':('N','CA','C','O'), - 'sc':('CB','OG')}, - 'THR': {'bb':('N','CA','C','O'), - 'sc':('CB','OG1','CG2')}, - 'TRP': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD1','CD2','CE2','CE3','NE1','CZ2','CZ3','CH2')}, - 'TYR': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ','OH')}, - 'VAL': {'bb':('N','CA','C','O'), - 'sc':('CB','CG1','CG2')}, - 'UNK': {'bb':('N','CA','C','O'), - 'sc':('CB')}, - 'MAS': {'bb':('N','CA','C','O'), - 'sc':('CB')}, - 'DA': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N6')}, - 'DC': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, - 'DG': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N2','O6')}, - 'DT': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':('N1','C2','O2','N3','C4','O4','C5','C7','C6')}, - 'DX': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':()}, - 'A': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':('N1','C2','N3','C4','C5','C6','N6','N7','C8','N9')}, - 'C': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, - 'G': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':('N1','C2','N2','N3','C4','C5','C6','O6','N7','C8','N9')}, - 'U': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':('N1','C2','O2','N3','C4','O4','C5','C6')}, - 'X': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':()}, - 'HIS_D': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','NE2','CD2','CE1','ND1')}, - } - - - self.aa_planar_atoms = ['NH1', 'NH2', 'CZ', 'NE', 'OD1', 'ND2', - 'OD2', 'OE1', 'NE2', 'CD', 'OE2', 'ND1', - 'CD2', 'CE1', 'CD1', 'CE2', 'NE1', 'CZ2', - 'CZ3', 'CH2', 'CE3', 'OH', 'CG', 'CB',] - - self.na_planar_atoms = ['C4', 'N3', 'C2', 'C6', 'C5', 'N7', 'C8', - 'N6', 'O2', 'N4', 'N2', 'O6', 'O4', 'C7', - 'N9', 'N1'] +def calculate_hb_counts( + atom_array: AtomArray, + token_level_data: dict, + mol_info: NucMolInfo, + cutoff_HA_dist: float = 2.5, + cutoff_DA_dist: float = 3.9, + ): + """Count hydrogen bonds between residue pairs using HBPLUS. + + Args: + atom_array: Structure to analyse. + token_level_data: Token-level metadata dict (must contain + ``token_id_list`` and ``resi2index``). + mol_info: Molecular-info object for backbone/sidechain atom lookup. + cutoff_HA_dist: H–A distance cutoff (Å) passed to HBPLUS. + cutoff_DA_dist: D–A distance cutoff (Å) passed to HBPLUS. + + Returns: + np.ndarray of shape ``(I, I, 3)`` (int32) where the last axis + encodes: 0 = BB–BB, 1 = BB–SC, 2 = SC–SC H-bond counts. + """ + + dtstr = datetime.now().strftime("%Y%m%d%H%M%S") + pdb_path = f"{dtstr}_{np.random.randint(10000)}.pdb" + + atom_array, nan_mask, chain_map = save_atomarray_to_pdb(atom_array, pdb_path) + subprocess.call( + [ + "/projects/ml/hbplus", + "-h", + str(cutoff_HA_dist), + "-d", + str(cutoff_DA_dist), + pdb_path, + pdb_path, + ], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + + num_resis_total = len(token_level_data["token_id_list"]) + + hbond_count = np.zeros((num_resis_total, num_resis_total, 3), dtype=np.int32) + + hb2_path = pdb_path.replace("pdb", "hb2") + with open(hb2_path, "r") as hb2_f: + for i, line in enumerate(hb2_f): + if i < 8: + continue + if len(line) < 28: + continue + + d_chain_iid = chain_map[line[0]] + d_resi = int(line[1:5].strip()) + d_resn = line[6:9].strip() + d_atom_name = line[9:13].strip() + + # Initialize donor/acceptor sidechain/backbone flags: + # then replace with True if valid for summation + d_is_sc = False + d_is_bb = False + a_is_sc = False + a_is_bb = False + + d_mask = ( + (atom_array.atom_name == d_atom_name) + & (atom_array.res_name == d_resn) + & (atom_array.res_id == d_resi) + & (atom_array.chain_iid == d_chain_iid) + ) + # d_atm = atom_array[d_mask] + # d_idx = d_atm.token_id + d_idx = token_level_data["resi2index"].get(f"{d_chain_iid}__{d_resi}", None) + if d_idx is None: + continue + + # Handle standard polymer residues for donor atom: + if d_resn in ATOM_REGION_BY_RESI.keys(): + d_is_sc = (d_atom_name in ATOM_REGION_BY_RESI[d_resn]['sc']) + d_is_bb = (d_atom_name in ATOM_REGION_BY_RESI[d_resn]['bb']) + else: + # If non-polymer, define any ligand HBonding atom as backbone: + if d_mask.sum() > 0: + d_is_bb = atom_array[d_mask][0].is_ligand + + a_chain_iid = chain_map[line[14]] + a_resi = int(line[15:19].strip()) + a_resn = line[20:23].strip() + a_atom_name = line[23:27].strip() + + a_mask = ( + (atom_array.atom_name == a_atom_name) + & (atom_array.res_name == a_resn) + & (atom_array.res_id == a_resi) + & (atom_array.chain_iid == a_chain_iid) + ) + a_idx = token_level_data["resi2index"].get(f"{a_chain_iid}__{a_resi}", None) + if a_idx is None: + continue + + # Handle standard polymer residues for acceptor atom: + if a_resn in ATOM_REGION_BY_RESI.keys(): + a_is_sc = (a_atom_name in ATOM_REGION_BY_RESI[a_resn]['sc']) + a_is_bb = (a_atom_name in ATOM_REGION_BY_RESI[a_resn]['bb']) + else: + # If non-polymer, define any ligand HBonding atom as backbone: + if a_mask.sum() > 0: + a_is_bb = atom_array[a_mask][0].is_ligand + + # 0 -> both backbone (BB-BB) + hbond_count[a_idx, d_idx, 0] += (a_is_bb * d_is_bb) + hbond_count[d_idx, a_idx, 0] += (d_is_bb * a_is_bb) + + # 1 -> one backbone, one sidechain (BB-SC) + hbond_count[a_idx, d_idx, 1] += (a_is_bb * d_is_sc) | (a_is_sc * d_is_bb) + hbond_count[d_idx, a_idx, 1] += (d_is_bb * a_is_sc) | (d_is_sc * a_is_bb) + + # 2 -> both sidechain (SC-SC) + hbond_count[a_idx, d_idx, 2] += (a_is_sc * d_is_sc) + hbond_count[d_idx, a_idx, 2] += (d_is_sc * a_is_sc) + + os.remove(pdb_path) + os.remove(hb2_path) + + return hbond_count + def find_planar_positions( atom_array: AtomArray, mol_info: NucMolInfo, tol: float = 1e-2, ) -> Dict: - """ - Finds residues with planar sidechains based on four tip-most atoms, - but also checks for valid atoms to use for this type of calculation. + """Identify residues with planar sidechains via known atom lists or PCA plane-fitting. + + For canonical residues the planar atoms are looked up from ``mol_info``; + for non-canonical residues a plane is fitted to the four tip-most sidechain + atoms, and all atoms within *tol* of that plane are returned. + + Args: + atom_array: Structure to analyse. + mol_info: Molecular-info object supplying per-residue planar atom lists. + tol: Distance tolerance (Å) from the fitted plane for an atom to be + considered planar. Returns: - dict of planar atom lists + Dictionary ``{(chain_iid, res_id): [atom_name, ...]}`` mapping each + unique residue position to its list of planar sidechain atom names. """ unique_positions_list = [] for atm in atom_array: @@ -312,11 +280,11 @@ def find_planar_positions( res_atoms = atom_array[mask] # If possible, speed up by using known planar atoms for this residue type: - if res_name in mol_info.planar_atom_list_dict.keys(): + if res_name in PLANAR_ATOMS_BY_RESI.keys(): # Shared atoms between residue and known planar atoms for that residue type: planar_atom_list = list( set([atm.atom_name for atm in res_atoms]) & - set(mol_info.planar_atom_list_dict[res_name]) + set(PLANAR_ATOMS_BY_RESI[res_name]) ) planar_atom_list_dict[(chain_iid, res_id)] = planar_atom_list @@ -327,11 +295,11 @@ def find_planar_positions( for atm in res_atoms: # Can pre-filter protein planar atoms: - if atm.is_protein and (atm.atom_name in mol_info.aa_planar_atoms): + if atm.is_protein and (atm.atom_name in AA_PLANAR_ATOMS): candidate_planar_atm_names.append(atm.atom_name) candidate_planar_atm_coords.append(atm.coord) # Can pre-filter nucleic acid planar atoms: - elif (atm.is_rna or atm.is_dna) and (atm.atom_name in mol_info.na_planar_atoms): + elif (atm.is_rna or atm.is_dna) and (atm.atom_name in NA_PLANAR_ATOMS): candidate_planar_atm_names.append(atm.atom_name) candidate_planar_atm_coords.append(atm.coord) # Otherwise, consider all atoms for plane fitting: @@ -389,144 +357,25 @@ def find_planar_positions( return planar_atom_list_dict - - -def calculate_hb_counts( - atom_array: AtomArray, - token_level_data: dict, - mol_info: NucMolInfo, - cutoff_HA_dist: float = 2.5, - cutoff_DA_dist: float = 3.9, - ): - """ - Compute hbond counts between residues and return an (L, L, 3) - numpy array where the last dimension encodes: - 0 -> both backbone (BB-BB) - 1 -> one backbone, one sidechain (BB-SC) - 2 -> both sidechain (SC-SC) - """ - dtstr = datetime.now().strftime("%Y%m%d%H%M%S") - pdb_path = f"{dtstr}_{np.random.randint(10000)}.pdb" - - atom_array, nan_mask, chain_map = save_atomarray_to_pdb(atom_array, pdb_path) - subprocess.call( - [ - "/projects/ml/hbplus", - "-h", - str(cutoff_HA_dist), - "-d", - str(cutoff_DA_dist), - pdb_path, - pdb_path, - ], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - ) - - - num_resis_total = len(token_level_data["token_id_list"]) - - hbond_count = np.zeros((num_resis_total, num_resis_total, 3), dtype=np.int32) - - hb2_path = pdb_path.replace("pdb", "hb2") - with open(hb2_path, "r") as hb2_f: - for i, line in enumerate(hb2_f): - if i < 8: - continue - if len(line) < 28: - continue - - # Initialize donor/acceptor sidechain/backbone flags: - # then replace with True if valid for summation - d_is_sc = False - d_is_bb = False - a_is_sc = False - a_is_bb = False - - d_chain_iid = chain_map[line[0]] - d_resi = int(line[1:5].strip()) - d_resn = line[6:9].strip() - d_atom_name = line[9:13].strip() - - d_mask = ( - (atom_array.atom_name == d_atom_name) - & (atom_array.res_name == d_resn) - & (atom_array.res_id == d_resi) - & (atom_array.chain_iid == d_chain_iid) - ) - d_atm = atom_array[d_mask] - d_idx = d_atm.token_id - - # Handle standard polymer residues for donor atom: - if d_resn in mol_info.atom_region_dict.keys(): - d_is_sc = (d_atom_name in mol_info.atom_region_dict[d_resn]['sc']) - d_is_bb = (d_atom_name in mol_info.atom_region_dict[d_resn]['bb']) - else: - # If non-polymer, define any ligand HBonding atom as backbone: - if d_mask.sum() > 0: - d_is_bb = atom_array[d_mask][0].is_ligand - - a_chain_iid = chain_map[line[14]] - a_resi = int(line[15:19].strip()) - a_resn = line[20:23].strip() - a_atom_name = line[23:27].strip() - - a_mask = ( - (atom_array.atom_name == a_atom_name) - & (atom_array.res_name == a_resn) - & (atom_array.res_id == a_resi) - & (atom_array.chain_iid == a_chain_iid) - ) - a_atm = atom_array[a_mask] - a_idx = a_atm.token_id - - # Handle standard polymer residues for acceptor atom: - if a_resn in mol_info.atom_region_dict.keys(): - a_is_sc = (a_atom_name in mol_info.atom_region_dict[a_resn]['sc']) - a_is_bb = (a_atom_name in mol_info.atom_region_dict[a_resn]['bb']) - else: - # If non-polymer, define any ligand HBonding atom as backbone: - if a_mask.sum() > 0: - a_is_bb = atom_array[a_mask][0].is_ligand - - # 0 -> both backbone (BB-BB) - hbond_count[a_idx, d_idx, 0] += (a_is_bb * d_is_bb) - hbond_count[d_idx, a_idx, 0] += (d_is_bb * a_is_bb) - - # 1 -> one backbone, one sidechain (BB-SC) - hbond_count[a_idx, d_idx, 1] += (a_is_bb * d_is_sc) | (a_is_sc * d_is_bb) - hbond_count[d_idx, a_idx, 1] += (d_is_bb * a_is_sc) | (d_is_sc * a_is_bb) - - # 2 -> both sidechain (SC-SC) - hbond_count[a_idx, d_idx, 2] += (a_is_sc * d_is_sc) - hbond_count[d_idx, a_idx, 2] += (d_is_sc * a_is_sc) - - os.remove(pdb_path) - os.remove(hb2_path) - - return hbond_count - - - - def make_coord_list(atom_array: AtomArray, residue_list: list[str], chain_list: list[str], atom_list: list[str], ) -> list[list[str]]: - """ - Given an atom array, and lists of residues, chains, and atom names, - return a list of coordinates for the specified atoms in the specified residues and chains. - If the atom is not found, return [NaN, NaN, NaN] for that atom. - The the three input lists must be of the same length, and the output list will have the same length as well. + """Extract per-residue representative coordinates from an AtomArray. + + All three input lists must have the same length. Missing atoms are + filled with ``[NaN, NaN, NaN]``. + Args: - atom_array: BioTite atom_array object - residue_list: list of residue names to consider - chain_list: list of chain identifiers to consider - atom_list: list of atom names to extract coordinates for - Returns: - coord_list: list of lists of coordinates for the specified atoms + atom_array: Biotite AtomArray to query. + residue_list: Residue IDs (one per token). + chain_list: Chain identifiers (one per token). + atom_list: Atom names to extract (use ``"atomized"`` to take the + first atom of the residue). + Returns: + List of ``[x, y, z]`` coordinate lists, same length as input. """ coord_list = [] for res_id, chain_id, atom_name in zip(residue_list, chain_list, atom_list): @@ -565,31 +414,49 @@ def get_token_level_metadata( *, NA_only: bool = False, planar_only: bool = True, + seq_cutoff = 2, + gap_length = 200 ) -> dict: - """Lightweight token-level metadata. + """Build lightweight token-level metadata (no coordinate geometry). - This intentionally avoids expensive coordinate-derived computations - (e.g., planar plane-fitting and geometry coordinate extraction). + Sufficient for SS reconstruction, loop labeling from ``bp_partners``, + and inference-time SS specification parsing. For geometry keys + (``xyz_planar``, ``frame_xyz``, ``M_i``), follow up with + :func:`add_token_level_geometry_data`. - It is sufficient for: - - SS reconstruction / loop labeling from ``bp_partners`` - - inference-time SS specification parsing + Args: + atom_array: Structure to analyse. + mol_info: Molecular-info constants. + NA_only: If True, restrict filter_mask to nucleic-acid tokens. + planar_only: If True, restrict filter_mask to tokens with planar + sidechains. + seq_cutoff: Sequence-distance threshold for the ``seq_neighbors`` + boolean mask. + gap_length: Artificial gap inserted between chains for relative + sequence position computation. - If you later need geometry keys (``xyz_planar``, ``frame_xyz``, ``M_i``), - call :func:`add_token_level_geometry_data`. + Returns: + Dict with keys: ``token_starts``, ``token_index``, ``is_na``, + ``is_planar``, ``chain_list``, ``chain_iid_list``, ``resi_list``, + ``resn_list``, ``token_id_list``, ``resi2index``, ``len_s``, + ``seq_neighbors``, ``na_inds``, ``na_tensor_inds``, + ``filter_mask``, ``rep_atom_list``, ``S_start_atom_list``, + ``S_stop_atom_list``, ``include_geometry`` (False). """ - token_starts = get_token_starts(atom_array) + # Use residue starts (not token starts) so atomized atoms within one residue + # map to a single NA-SS position. + token_starts = struc.get_residue_starts(atom_array) token_level_array = atom_array[token_starts] token_index = np.arange(len(token_starts)) # molecule type flags - seq_data = _get_sequence_encoding_data() - is_protein = np.isin(token_level_array.res_name, seq_data["aa_like_res_names"]) - is_rna = np.isin(token_level_array.res_name, seq_data["rna_like_res_names"]) - is_dna = np.isin(token_level_array.res_name, seq_data["dna_like_res_names"]) - del seq_data + # Instantiate encoding locally to avoid retaining large arrays at module scope. + sequence_encoding = AF3SequenceEncoding() + is_protein = np.isin(token_level_array.res_name, sequence_encoding.all_res_names[sequence_encoding.is_aa_like]) + is_rna = np.isin(token_level_array.res_name, sequence_encoding.all_res_names[sequence_encoding.is_rna_like]) + is_dna = np.isin(token_level_array.res_name, sequence_encoding.all_res_names[sequence_encoding.is_dna_like]) is_na_arr = (is_dna | is_rna).astype(bool) @@ -613,8 +480,8 @@ def get_token_level_metadata( res_name_list.append(atm.res_name) token_id_list.append(str(atm.token_id)) - if atm.is_polymer and (atm.res_name in mol_info.has_planar_sc.keys()): - sc_planarity_list.append(bool(mol_info.has_planar_sc[atm.res_name])) + if atm.is_polymer and (atm.res_name in HAS_PLANAR_SC.keys()): + sc_planarity_list.append(bool(HAS_PLANAR_SC[atm.res_name])) else: sc_planarity_list.append(False) @@ -658,16 +525,16 @@ def get_token_level_metadata( # relative sequence positions w/ chain gaps rel_pos_list: list[int] = [] current_chain = "" - chn_bias = -mol_info.gap_length + chn_bias = -gap_length for r, c in zip(resi_list, chain_iid_list): if c != current_chain: - chn_bias += mol_info.gap_length + chn_bias += gap_length current_chain = c rel_pos_list.append(int(r + chn_bias)) rel_pos = np.asarray(rel_pos_list, dtype=np.int64) seq_neighbors = ( - np.abs(rel_pos[:, None] - rel_pos[None, :]) <= int(mol_info.seq_cutoff) + np.abs(rel_pos[:, None] - rel_pos[None, :]) <= int(seq_cutoff) ) na_inds = np.nonzero(is_na_arr)[0].tolist() @@ -717,13 +584,24 @@ def add_token_level_geometry_data( NA_only: bool = False, planar_only: bool = True, ) -> dict: - """Augment a metadata-only token_level_data dict with geometry fields. + """Augment token-level metadata with coordinate-derived geometry fields. + + Populates ``xyz_planar``, ``xyz_S_start``, ``xyz_S_stop``, + ``frame_xyz``, ``M_i`` and updates ``is_planar`` / ``filter_mask`` + using coordinate-derived planarity. Sets ``include_geometry=True``. - Populates: - - xyz_planar, xyz_S_start, xyz_S_stop - - frame_xyz, M_i - - updates is_planar and filter_mask using coordinate-derived planarity - - sets include_geometry=True + No-ops if geometry was already computed. + + Args: + atom_array: Structure to extract coordinates from. + mol_info: Molecular-info constants. + token_level_data: Dict produced by :func:`get_token_level_metadata` + (modified in-place and returned). + NA_only: Restrict filter_mask to nucleic-acid tokens. + planar_only: Restrict filter_mask to tokens with planar sidechains. + + Returns: + The same ``token_level_data`` dict, augmented with geometry keys. """ if bool(token_level_data.get("include_geometry", False)): @@ -755,12 +633,12 @@ def add_token_level_geometry_data( S_start_atom_list: list[str | None] = token_level_data["S_start_atom_list"] S_stop_atom_list: list[str | None] = token_level_data["S_stop_atom_list"] - planar_atom_list_dict = find_planar_positions(atom_array, mol_info) + planar_atom_list_dict = find_planar_positions(atom_array, mol_info) # {(chain_iid, res_id): [atom_name, ...]} has_planar_sc: list[bool] = [] - xyz_planar: list[list[list[float]]] = [] - xyz_S_start: list[list[float]] = [] - xyz_S_stop: list[list[float]] = [] + xyz_planar: list[list[list[float]]] = [] # list[I] of [K_i, 3] (K_i varies per residue) + xyz_S_start: list[list[float]] = [] # list[I] of [3] + xyz_S_stop: list[list[float]] = [] # list[I] of [3] for c, r, S_start_atm, S_stop_atm in zip( chain_iid_list, @@ -806,21 +684,21 @@ def add_token_level_geometry_data( del atom_array_i # frame coordinates and backbone direction - frame_xyz = np.asarray( + frame_xyz = np.asarray( # [I, 3] representative-atom coordinates make_coord_list(atom_array, resi_list, chain_list, rep_atom_list), dtype=np.float32, ) - padded_centers = np.concatenate([frame_xyz[:1], frame_xyz, frame_xyz[-1:]], axis=0) - M_i = ( + padded_centers = np.concatenate([frame_xyz[:1], frame_xyz, frame_xyz[-1:]], axis=0) # [I+2, 3] + M_i = ( # [I, 3] smoothed backbone-direction vectors (padded_centers[1:-1] - padded_centers[:-2]) + (padded_centers[2:] - padded_centers[1:-1]) ) / 2.0 - is_planar_arr = np.asarray(has_planar_sc, dtype=bool) + is_planar_arr = np.asarray(has_planar_sc, dtype=bool) # [I] token_level_data["is_planar"] = is_planar_arr - is_na_arr = np.asarray(token_level_data["is_na"], dtype=bool) + is_na_arr = np.asarray(token_level_data["is_na"], dtype=bool) # [I] if NA_only and planar_only: filter_mask = is_na_arr & is_planar_arr elif NA_only and (not planar_only): @@ -829,7 +707,7 @@ def add_token_level_geometry_data( filter_mask = is_planar_arr.copy() else: filter_mask = np.ones_like(is_na_arr, dtype=bool) - token_level_data["filter_mask"] = filter_mask + token_level_data["filter_mask"] = filter_mask # [I] bool token_level_data.update( { @@ -846,288 +724,414 @@ def add_token_level_geometry_data( return token_level_data -def _compute_nucleic_ss_impl( - mol_info, - token_level_data, - hbond_count, - clamp_pairwise_params=True, - eps=1e-8, - *, - return_local_params: bool = False, - return_pairwise_geometry: bool = False, - return_opening_angle: bool = False, - return_basepairs_only: bool = False, -): - """ - Compute nucleic secondary structure–related quantities and pairwise base params. - - Notes - ----- - This function is used in two modes: - - - Fast annotation mode (default): computes only what is needed to derive - ``basepairs_bool_ij`` and does *not* retain large intermediate pairwise - geometry arrays (X_ij/Y_ij/Z_ij/O_ij). - - Diagnostic mode: set ``return_pairwise_geometry=True`` (and optionally - ``return_local_params=True`` / ``return_opening_angle=True``) to also - return additional geometry arrays. - """ +# --------------------------------------------------------------------------- +# Sub-calculations used by compute_nucleic_ss +# --------------------------------------------------------------------------- - mask_1d = np.asarray(token_level_data["filter_mask"], dtype=bool) - len_mask = int(mask_1d.sum()) - # len_full = len(mask_1d) - - # unpack 1D data from token_level_data and apply filters - M_i = np.asarray(token_level_data["M_i"], dtype=np.float32)[mask_1d] - frame_xyz = np.asarray(token_level_data["frame_xyz"], dtype=np.float32)[mask_1d] - - is_na = np.asarray(token_level_data["is_na"], dtype=bool)[mask_1d] - - xyz_S_start = [xyz_list_i for xyz_list_i, keep_i in zip(token_level_data["xyz_S_start"], mask_1d) if keep_i] - xyz_S_stop = [xyz_list_i for xyz_list_i, keep_i in zip(token_level_data["xyz_S_stop"], mask_1d) if keep_i] - xyz_planar = [xyz_list_i for xyz_list_i, keep_i in zip(token_level_data["xyz_planar"], mask_1d) if keep_i] - - # unpack 2D data from token_level_data and apply filters - hbond_count = np.asarray(hbond_count)[mask_1d, :][:, mask_1d] - seq_neighbors = np.asarray(token_level_data["seq_neighbors"], dtype=bool)[mask_1d, :][:, mask_1d] +def _compute_local_frames( + xyz_planar: list[np.ndarray], + planar_centers: np.ndarray, + M_i: np.ndarray, + *, + xyz_S_start: list | None = None, + xyz_S_stop: list | None = None, + compute_full_frame: bool = False, + eps: float = 1e-8, +) -> dict[str, np.ndarray]: + """Build per-residue local coordinate frames from planar sidechain atoms. - # --- CALC 0: precompute displacement vectors / distances ---- - planar_centers = np.stack( - [ - np.nanmean(np.asarray(xyz_i, dtype=np.float32), axis=0) - for xyz_i in xyz_planar - ], - axis=0, - ).astype(np.float32) + The base-normal direction Z_i is always computed via PCA on the planar + atom cloud, corrected for backbone direction. When *compute_full_frame* + is True the sugar-edge vector is used to derive X_i and Y_i as well. - - frame_D_ij_vec = frame_xyz[None, :, :] - frame_xyz[:, None, :] # [L, L, 3] - sc_D_ij_vec = planar_centers[None, :, :] - planar_centers[:, None, :] # [L, L, 3] - # D_ij = frame_D_ij_vec.norm(dim=-1) # [L, L] + Args: + xyz_planar: Per-residue planar-atom coordinates, list[I] of [K_i, 3]. + planar_centers: Sidechain planar-atom centroids, [I, 3]. + M_i: Backbone-direction vectors, [I, 3]. + xyz_S_start: Sugar-edge start coordinates, list[I] of [3]. + Required when *compute_full_frame* is True. + xyz_S_stop: Sugar-edge stop coordinates, list[I] of [3]. + Required when *compute_full_frame* is True. + compute_full_frame: If True, also compute X_i and Y_i. + eps: Small constant for numerical stability. + Returns: + Dict with ``"Z_i"`` (always), and ``"X_i"``, ``"Y_i"`` when + *compute_full_frame* is True. Each array has shape ``[I, 3]``. + """ + n_tokens = len(xyz_planar) - # --- CALC I: local base params (canonical frames) ------------ - centered_points = [ + # Mean-centre the planar atoms per residue + centered_points = [ # list[I] of [K_i, 3] np.asarray(xyz_i, dtype=np.float32) - cen_i for xyz_i, cen_i in zip(xyz_planar, planar_centers) ] - # eigenvectors per residue: [L, 3, 3] (NaNs where invalid) - eigenvectors = np.full((len_mask, 3, 3), np.nan, dtype=np.float32) + # PCA → eigenvectors per residue + eigenvectors = np.full((n_tokens, 3, 3), np.nan, dtype=np.float32) # [I, 3, 3] for i, xyz_i in enumerate(centered_points): xyz_i = xyz_i[~np.isnan(xyz_i).any(axis=1)] if xyz_i.shape[0] >= 3: - cov_matrix = np.einsum("ij,ik->jk", xyz_i, xyz_i) / max( + cov_matrix = np.einsum("ij,ik->jk", xyz_i, xyz_i) / max( # [3, 3] xyz_i.shape[0] - 1, 1 ) - _, eigvecs = np.linalg.eigh(cov_matrix) + _, eigvecs = np.linalg.eigh(cov_matrix) # [3, 3] eigenvectors[i] = eigvecs - - # base-normal (principal) direction N_i, then corrected Z_i - N_i = eigenvectors[:, :, 0] + # Base-normal: smallest-eigenvalue direction, corrected for backbone dir + N_i = eigenvectors[:, :, 0] # [I, 3] N_i = N_i / (np.linalg.norm(N_i, axis=1, keepdims=True) + eps) - Z_i = N_i * np.sum(M_i * N_i, axis=-1, keepdims=True) + Z_i = N_i * np.sum(M_i * N_i, axis=-1, keepdims=True) # [I, 3] Z_i = Z_i / (np.linalg.norm(Z_i, axis=-1, keepdims=True) + eps) - # Only compute full local frames when requested. - # Basepair filters only need Z_i (via Z_ij) and do not require X_i/Y_i. - local_base_params = None - if return_local_params or return_opening_angle: - # Sugar-edge vectors X_s_i built from S_start/stop - X_s_i = ( + result: dict[str, np.ndarray] = {"Z_i": Z_i} + + if compute_full_frame: + if xyz_S_start is None or xyz_S_stop is None: + raise ValueError("xyz_S_start and xyz_S_stop are required for full frame") + + X_s_i = ( # [I, 3] sugar-edge direction np.asarray(xyz_S_stop, dtype=np.float32) - np.asarray(xyz_S_start, dtype=np.float32) ) X_s_i = X_s_i / (np.linalg.norm(X_s_i, axis=-1, keepdims=True) + eps) - X_i = np.cross(Z_i, X_s_i) + X_i = np.cross(Z_i, X_s_i) # [I, 3] X_i = X_i / (np.linalg.norm(X_i, axis=-1, keepdims=True) + eps) + result["X_i"] = X_i - if return_local_params: - Y_i = np.cross(X_i, Z_i) - Y_i = Y_i / (np.linalg.norm(Y_i, axis=-1, keepdims=True) + eps) - local_base_params = {"X_i": X_i, "Y_i": Y_i, "Z_i": Z_i} - else: - # Opening needs X_i but not the local params dict. - local_base_params = None + Y_i = np.cross(X_i, Z_i) # [I, 3] + Y_i = Y_i / (np.linalg.norm(Y_i, axis=-1, keepdims=True) + eps) + result["Y_i"] = Y_i - # --- CALC II: pairwise base parameters ----------------------- + return result - # stack mean Z-direction vectors for parallel (0) and antiparallel (1) - Z_sum = Z_i[:, None, :] + Z_i[None, :, :] - Z_diff = Z_i[:, None, :] - Z_i[None, :, :] - Z_ij_oris = 0.5 * np.stack((Z_sum, Z_diff), axis=0) # [2, L, L, 3] - base_ori_ij = ( +def _compute_pairwise_geometry( + Z_i: np.ndarray, + frame_D_ij_vec: np.ndarray, + sc_D_ij_vec: np.ndarray, + *, + X_i: np.ndarray | None = None, + clamp: bool = True, + compute_opening: bool = False, + eps: float = 1e-8, +) -> dict[str, np.ndarray]: + """Compute pairwise base-step geometry between all residue pairs. + + Derives the pairwise coordinate frame (X_ij, Y_ij, Z_ij) and the + base-pair geometry parameters: rise (H_ij), buckle (B_ij), propeller + (P_ij), and optionally opening angle (O_ij). + + Args: + Z_i: Per-residue base-normal vectors, [I, 3]. + frame_D_ij_vec: Pairwise backbone displacement vectors, [I, I, 3]. + sc_D_ij_vec: Pairwise sidechain-centroid displacement vectors, [I, I, 3]. + X_i: Per-residue local X-axis, [I, 3]. Required when + *compute_opening* is True. + clamp: Clamp cosines to [-1, 1] before ``arccos``. + compute_opening: If True, compute opening angle O_ij. + eps: Small constant for numerical stability. + + Returns: + Dict with keys ``"H_ij"`` [I, I], ``"B_ij"`` [I, I], + ``"P_ij"`` [I, I], ``"base_ori_ij"`` [I, I], + ``"X_ij"`` [I, I, 3], ``"Y_ij"`` [I, I, 3], + ``"Z_ij"`` [I, I, 3], and optionally ``"O_ij"`` [I, I]. + """ + # Orientation-selected pairwise Z-axis + Z_sum = Z_i[:, None, :] + Z_i[None, :, :] # [I, I, 3] + Z_diff = Z_i[:, None, :] - Z_i[None, :, :] # [I, I, 3] + Z_ij_oris = 0.5 * np.stack((Z_sum, Z_diff), axis=0) # [2, I, I, 3] + + base_ori_ij = ( # [I, I] 0=parallel, 1=antiparallel np.linalg.norm(Z_ij_oris[1], axis=-1) > np.linalg.norm(Z_ij_oris[0], axis=-1) - ).astype(np.int64) # [L, L] + ).astype(np.int64) - Z_ij = np.where(base_ori_ij[..., None] == 0, Z_ij_oris[0], Z_ij_oris[1]) + Z_ij = np.where(base_ori_ij[..., None] == 0, Z_ij_oris[0], Z_ij_oris[1]) # [I, I, 3] Z_ij = Z_ij / (np.linalg.norm(Z_ij, axis=-1, keepdims=True) + eps) - Y_ij = frame_D_ij_vec / (np.linalg.norm(frame_D_ij_vec, axis=-1, keepdims=True) + eps) - X_ij = np.cross(Z_ij, Y_ij) + # Pairwise Y (inter-residue direction) and X axes + Y_ij = frame_D_ij_vec / (np.linalg.norm(frame_D_ij_vec, axis=-1, keepdims=True) + eps) # [I, I, 3] + X_ij = np.cross(Z_ij, Y_ij) # [I, I, 3] X_ij = X_ij / (np.linalg.norm(X_ij, axis=-1, keepdims=True) + eps) - # vertical displacement using sidechain centroids - H_ij = np.sum(sc_D_ij_vec * Z_ij, axis=-1) - # H_ij_vec = H_ij[..., None] * Z_ij - - # Opening (O_ij) is purely diagnostic; compute only if requested. - O_ij = None - if return_opening_angle: - if not (return_local_params or return_opening_angle): - raise RuntimeError("Internal error: opening angle requested without local frame") - - proj_X_i_XY = ( - np.sum(X_i[:, None, :] * X_ij, axis=-1, keepdims=True) * X_ij - + np.sum(X_i[:, None, :] * Y_ij, axis=-1, keepdims=True) * Y_ij - ) - proj_X_i_XY_norm = proj_X_i_XY / ( - np.linalg.norm(proj_X_i_XY, axis=-1, keepdims=True) + eps - ) - cos_opening = np.sum( - proj_X_i_XY_norm * proj_X_i_XY_norm.swapaxes(0, 1), - axis=-1, - ) - if clamp_pairwise_params: - cos_opening = np.clip(cos_opening, -1.0, 1.0) - O_ij = np.arccos(cos_opening) + # Rise (H_ij) + H_ij = np.sum(sc_D_ij_vec * Z_ij, axis=-1) # [I, I] # Buckle (B_ij) - proj_Z_i_YZ = ( + proj_Z_i_YZ = ( # [I, I, 3] np.sum(Z_i[:, None, :] * Y_ij, axis=-1, keepdims=True) * Y_ij + np.sum(Z_i[:, None, :] * Z_ij, axis=-1, keepdims=True) * Z_ij ) - proj_Z_i_YZ_norm = proj_Z_i_YZ / ( - np.linalg.norm(proj_Z_i_YZ, axis=-1, keepdims=True) + eps - ) - cos_buckle = np.sum( - proj_Z_i_YZ_norm * (-proj_Z_i_YZ_norm.swapaxes(0, 1)), - axis=-1, - ) + proj_Z_i_YZ_norm = proj_Z_i_YZ / (np.linalg.norm(proj_Z_i_YZ, axis=-1, keepdims=True) + eps) + cos_buckle = np.sum(proj_Z_i_YZ_norm * (-proj_Z_i_YZ_norm.swapaxes(0, 1)), axis=-1) # [I, I] # Propeller (P_ij) - proj_Z_i_ZX = ( + proj_Z_i_ZX = ( # [I, I, 3] np.sum(Z_i[:, None, :] * Z_ij, axis=-1, keepdims=True) * Z_ij + np.sum(Z_i[:, None, :] * X_ij, axis=-1, keepdims=True) * X_ij ) - proj_Z_i_ZX_norm = proj_Z_i_ZX / ( - np.linalg.norm(proj_Z_i_ZX, axis=-1, keepdims=True) + eps - ) - cos_propeller = np.sum( - proj_Z_i_ZX_norm * (-proj_Z_i_ZX_norm.swapaxes(0, 1)), - axis=-1, - ) + proj_Z_i_ZX_norm = proj_Z_i_ZX / (np.linalg.norm(proj_Z_i_ZX, axis=-1, keepdims=True) + eps) + cos_propeller = np.sum(proj_Z_i_ZX_norm * (-proj_Z_i_ZX_norm.swapaxes(0, 1)), axis=-1) # [I, I] - if clamp_pairwise_params: + if clamp: cos_buckle = np.clip(cos_buckle, -1.0, 1.0) cos_propeller = np.clip(cos_propeller, -1.0, 1.0) - B_ij = np.arccos(cos_buckle) - P_ij = np.arccos(cos_propeller) + B_ij = np.arccos(cos_buckle) # [I, I] + P_ij = np.arccos(cos_propeller) # [I, I] + + result: dict[str, np.ndarray] = { + "H_ij": H_ij, + "B_ij": B_ij, + "P_ij": P_ij, + "base_ori_ij": base_ori_ij, + "X_ij": X_ij, + "Y_ij": Y_ij, + "Z_ij": Z_ij, + } - pair_params: dict | None - if return_basepairs_only: - pair_params = None - else: - pair_params = { - "H_ij": H_ij, - "B_ij": B_ij, - "P_ij": P_ij, - "base_ori_ij": base_ori_ij, - } + # Opening angle (O_ij) — purely diagnostic + if compute_opening: + if X_i is None: + raise ValueError("X_i is required to compute opening angle") + + proj_X_i_XY = ( # [I, I, 3] + np.sum(X_i[:, None, :] * X_ij, axis=-1, keepdims=True) * X_ij + + np.sum(X_i[:, None, :] * Y_ij, axis=-1, keepdims=True) * Y_ij + ) + proj_X_i_XY_norm = proj_X_i_XY / (np.linalg.norm(proj_X_i_XY, axis=-1, keepdims=True) + eps) + cos_opening = np.sum(proj_X_i_XY_norm * proj_X_i_XY_norm.swapaxes(0, 1), axis=-1) # [I, I] + if clamp: + cos_opening = np.clip(cos_opening, -1.0, 1.0) + result["O_ij"] = np.arccos(cos_opening) # [I, I] - if return_opening_angle and O_ij is not None: - pair_params["O_ij"] = O_ij + return result - if return_pairwise_geometry: - pair_params["X_ij"] = X_ij - pair_params["Y_ij"] = Y_ij - pair_params["Z_ij"] = Z_ij - # --- CALC III: basepair filters / probabilities -------------- - hbond_summation = np.tensordot( +def _compute_basepair_mask( + hbond_count: np.ndarray, + seq_neighbors: np.ndarray, + H_ij: np.ndarray, + B_ij: np.ndarray, + P_ij: np.ndarray, + mol_info, + *, + bool_only: bool = False, + eps: float = 1e-8, +) -> dict[str, np.ndarray] | np.ndarray: + """Identify base pairs by combining H-bond scores with geometry filters. + + Computes a sigmoid-based base-pair probability from weighted H-bond + counts and gates it with rise / buckle / propeller geometry limits. + + Args: + hbond_count: H-bond counts, [I, I, 3] (BB-BB / BB-SC / SC-SC). + seq_neighbors: Sequence-neighbor boolean mask, [I, I]. + H_ij: Rise displacement, [I, I]. + B_ij: Buckle angle (radians), [I, I]. + P_ij: Propeller angle (radians), [I, I]. + mol_info: Molecular-info object with ``bp_summation_weights``, + ``bp_hbond_coeff``, ``min_hbonds_for_bp``, ``bp_val_cutoff``, + and ``base_geometry_limits``. + bool_only: If True, return only the boolean mask array. + eps: Small constant for numerical stability. + + Returns: + If *bool_only*: ``np.ndarray`` of shape ``(I, I)`` (bool). + Otherwise: dict with ``"basepairs_bool_ij"`` [I, I] (bool), + ``"basepairs_ij"`` [I, I] (float), and + ``"hbond_summation"`` [I, I] (float). + """ + hbond_summation = np.tensordot( # [I, I] hbond_count.astype(np.float32), np.asarray(mol_info.bp_summation_weights, dtype=np.float32), axes=([2], [0]), - ) # [L, L] + ) - logits = mol_info.bp_hbond_coeff * ( + logits = mol_info.bp_hbond_coeff * ( # [I, I] hbond_summation - (mol_info.min_hbonds_for_bp - 1) ) - bp_preds = (1.0 / (1.0 + np.exp(-logits))) + eps + bp_preds = (1.0 / (1.0 + np.exp(-logits))) + eps # [I, I] - # Filter Height geometry - H_ij_filter = (H_ij >= -mol_info.base_geometry_limits["H_ij"]) & ( - H_ij <= mol_info.base_geometry_limits["H_ij"] + # Geometry filters + H_ij_filter = ( # [I, I] + (H_ij >= -mol_info.base_geometry_limits["H_ij"]) + & (H_ij <= mol_info.base_geometry_limits["H_ij"]) ) - # Filter Buckle geometry - B_ij_filter = (B_ij <= mol_info.base_geometry_limits["B_ij"]) | ( - B_ij >= math.pi - mol_info.base_geometry_limits["B_ij"] + B_ij_filter = ( # [I, I] + (B_ij <= mol_info.base_geometry_limits["B_ij"]) + | (B_ij >= math.pi - mol_info.base_geometry_limits["B_ij"]) ) - # Filter Propeller geometry - P_ij_filter = (P_ij <= mol_info.base_geometry_limits["P_ij"]) | ( - P_ij >= math.pi - mol_info.base_geometry_limits["P_ij"] + P_ij_filter = ( # [I, I] + (P_ij <= mol_info.base_geometry_limits["P_ij"]) + | (P_ij >= math.pi - mol_info.base_geometry_limits["P_ij"]) ) - - bp_geom_filter = (H_ij_filter & B_ij_filter & P_ij_filter) + bp_geom_filter = H_ij_filter & B_ij_filter & P_ij_filter # [I, I] - if return_basepairs_only: - # Avoid allocating basepairs_ij float matrix when only the boolean mask is needed. - basepairs_bool_ij = (~seq_neighbors) & bp_geom_filter & ( - bp_preds >= float(mol_info.bp_val_cutoff) + if bool_only: + basepairs_bool_ij = ( # [I, I] + (~seq_neighbors) & bp_geom_filter + & (bp_preds >= float(mol_info.bp_val_cutoff)) ) - basepairs_ij = None - else: - basepairs_ij = (~seq_neighbors).astype(np.float32) * ( - bp_geom_filter.astype(np.float32) * bp_preds.astype(np.float32) - ) - basepairs_bool_ij = basepairs_ij >= mol_info.bp_val_cutoff - - if return_basepairs_only: - # Cleanup intermediate tensors to free memory - del frame_D_ij_vec, sc_D_ij_vec - del hbond_summation, bp_preds - del H_ij_filter, B_ij_filter, P_ij_filter, bp_geom_filter - - # Explicitly drop the largest pairwise arrays. - del X_ij, Y_ij, Z_ij - if O_ij is not None: - del O_ij - if local_base_params is not None: - del local_base_params return basepairs_bool_ij - assert pair_params is not None + basepairs_ij = ( # [I, I] + (~seq_neighbors).astype(np.float32) + * bp_geom_filter.astype(np.float32) + * bp_preds.astype(np.float32) + ) + basepairs_bool_ij = basepairs_ij >= mol_info.bp_val_cutoff # [I, I] - pair_params["basepairs_bool_ij"] = basepairs_bool_ij - pair_params["hbond_summation"] = hbond_summation - pair_params["basepairs_ij"] = basepairs_ij + return { + "basepairs_bool_ij": basepairs_bool_ij, + "basepairs_ij": basepairs_ij, + "hbond_summation": hbond_summation, + } - nucleic_ss_data = {"pair_params": pair_params} - if return_local_params and local_base_params is not None: - nucleic_ss_data["local_params"] = local_base_params - # Cleanup intermediate tensors to free memory - del frame_D_ij_vec, sc_D_ij_vec - del hbond_summation, bp_preds - del H_ij_filter, B_ij_filter, P_ij_filter, bp_geom_filter +def compute_nucleic_ss( + mol_info, + token_level_data, + hbond_count, + clamp_pairwise_params=True, + eps=1e-8, + *, + return_local_params: bool = False, + return_pairwise_geometry: bool = False, + return_opening_angle: bool = False, + return_basepairs_only: bool = False, +): + """Compute nucleic-acid pairwise base-pair geometry and filters. + + Operates in two modes: + + * **Fast annotation** (default / ``return_basepairs_only=True``): returns + only ``basepairs_bool_ij`` and frees intermediate arrays. + * **Diagnostic**: additionally returns local/pairwise geometry when + ``return_pairwise_geometry``, ``return_local_params``, or + ``return_opening_angle`` are set. + + Args: + mol_info: Molecular-info constants (geometry limits, H-bond weights). + token_level_data: Token-level dict with geometry (from + :func:`add_token_level_geometry_data`). + hbond_count: H-bond count array, shape ``(I_full, I_full, 3)``. + clamp_pairwise_params: Clamp cosines to [-1, 1] before ``arccos``. + eps: Small constant for numerical stability. + return_local_params: Return per-residue X/Y/Z local frames. + return_pairwise_geometry: Return pairwise X_ij/Y_ij/Z_ij arrays. + return_opening_angle: Return pairwise opening angle O_ij. + return_basepairs_only: Return only the boolean base-pair mask + (fastest path). + + Returns: + If ``return_basepairs_only``: ``np.ndarray`` of shape ``(I, I)`` + (bool) — the base-pair boolean mask. + + Otherwise: dict ``{"pair_params": {...}, "local_params": {...}}`` + containing the requested geometry arrays (all shape ``(I, I)`` or + ``(I, 3)``). + """ + + mask_1d = np.asarray(token_level_data["filter_mask"], dtype=bool) # [I_full] + + # --- Unpack and filter token-level data ---------------------- + M_i = np.asarray(token_level_data["M_i"], dtype=np.float32)[mask_1d] # [I, 3] + frame_xyz = np.asarray(token_level_data["frame_xyz"], dtype=np.float32)[mask_1d] # [I, 3] + xyz_S_start = [v for v, k in zip(token_level_data["xyz_S_start"], mask_1d) if k] # list[I] of [3] + xyz_S_stop = [v for v, k in zip(token_level_data["xyz_S_stop"], mask_1d) if k] # list[I] of [3] + xyz_planar = [v for v, k in zip(token_level_data["xyz_planar"], mask_1d) if k] # list[I] of [K_i, 3] + + hbond_count = np.asarray(hbond_count)[mask_1d, :][:, mask_1d] # [I, I, 3] + seq_neighbors = np.asarray(token_level_data["seq_neighbors"], dtype=bool)[mask_1d, :][:, mask_1d] # [I, I] + + # --- Precompute centroids and displacement vectors ----------- + planar_centers = np.stack( # [I, 3] + [np.nanmean(np.asarray(xyz_i, dtype=np.float32), axis=0) for xyz_i in xyz_planar], + axis=0, + ).astype(np.float32) + + frame_D_ij_vec = frame_xyz[None, :, :] - frame_xyz[:, None, :] # [I, I, 3] + sc_D_ij_vec = planar_centers[None, :, :] - planar_centers[:, None, :] # [I, I, 3] + + # --- CALC I: per-residue local coordinate frames ------------- + need_full_frame = return_local_params or return_opening_angle + local_frames = _compute_local_frames( + xyz_planar, + planar_centers, + M_i, + xyz_S_start=xyz_S_start if need_full_frame else None, + xyz_S_stop=xyz_S_stop if need_full_frame else None, + compute_full_frame=need_full_frame, + eps=eps, + ) + Z_i = local_frames["Z_i"] # [I, 3] + X_i = local_frames.get("X_i") # [I, 3] or None + + # --- CALC II: pairwise base-step geometry -------------------- + pw_geom = _compute_pairwise_geometry( + Z_i, + frame_D_ij_vec, + sc_D_ij_vec, + X_i=X_i, + clamp=clamp_pairwise_params, + compute_opening=return_opening_angle, + eps=eps, + ) + + # --- CALC III: base-pair identification ---------------------- + bp_result = _compute_basepair_mask( + hbond_count, + seq_neighbors, + pw_geom["H_ij"], + pw_geom["B_ij"], + pw_geom["P_ij"], + mol_info, + bool_only=return_basepairs_only, + eps=eps, + ) - # If not returning, explicitly drop the largest pairwise arrays. - if not return_pairwise_geometry: - del X_ij, Y_ij, Z_ij - if not return_opening_angle and O_ij is not None: - del O_ij - if not return_local_params and local_base_params is not None: - del local_base_params + if return_basepairs_only: + return bp_result # np.ndarray [I, I] bool + + # --- Assemble output dict ------------------------------------ + assert isinstance(bp_result, dict) + + pair_params: dict[str, np.ndarray] = { + "H_ij": pw_geom["H_ij"], + "B_ij": pw_geom["B_ij"], + "P_ij": pw_geom["P_ij"], + "base_ori_ij": pw_geom["base_ori_ij"], + "basepairs_bool_ij": bp_result["basepairs_bool_ij"], + "basepairs_ij": bp_result["basepairs_ij"], + "hbond_summation": bp_result["hbond_summation"], + } + + if return_opening_angle and "O_ij" in pw_geom: + pair_params["O_ij"] = pw_geom["O_ij"] + + if return_pairwise_geometry: + pair_params["X_ij"] = pw_geom["X_ij"] + pair_params["Y_ij"] = pw_geom["Y_ij"] + pair_params["Z_ij"] = pw_geom["Z_ij"] + + nucleic_ss_data: dict = {"pair_params": pair_params} + if return_local_params and "Y_i" in local_frames: + nucleic_ss_data["local_params"] = { + "X_i": local_frames["X_i"], + "Y_i": local_frames["Y_i"], + "Z_i": local_frames["Z_i"], + } return nucleic_ss_data + + def annotate_na_ss( atom_array: AtomArray, *, @@ -1137,41 +1141,47 @@ def annotate_na_ss( mol_info: Optional[NucMolInfo] = None, overwrite: bool = True, token_level_data: Optional[dict] = None, + cutoff_HA_dist: float = 3.5, + cutoff_DA_dist: float = 3.5, ) -> AtomArray: - """Annotate base-pair partners directly onto the AtomArray. - - This computes nucleic-acid base pairing similarly to - :func:`get_gt_nucleic_geom_feats` but instead of returning an integer - secondary-structure matrix, it writes an AtomArray annotation - ``bp_partners``. - - The annotation is stored on the *full* ``atom_array`` (length N atoms), - but only nucleic-acid token-representative atoms (indices ``token_starts`` - from :func:`get_token_starts`) that are included in this call's - ``annotation_mask`` get a list value. - - Semantics: - - ``[]`` (empty list): explicitly unpaired nucleic-acid loop - - ``[token_id, ...]``: paired nucleic-acid token(s) - - ``None``: unannotated/masked (non-NA tokens, or tokens filtered out) - - Each list element is the partner token identifier (``token_id`` as int) - for the paired residue. This is sufficient to recover the partner's - token-representative atom via ``token_starts`` + token_id mapping. - - Notes - ----- - - ``token_level_data`` may be metadata-only; this function will augment it - with geometry as needed. - - If ``p_canonical_bp_filter > 0``, then with that probability we discard - any non-canonical NA basepairs (keeps only A-U, A-T, G-C). + """Compute base pairs and write a ``bp_partners`` annotation onto *atom_array*. + + Uses H-bond counts and pairwise geometry filters to identify base pairs, + then stores the result as a per-atom annotation with the following + semantics: + + * ``[]`` — explicitly unpaired (loop) + * ``[token_id, ...]`` — paired partner token IDs + * ``None`` — unannotated / masked (non-NA or filtered-out tokens) + + Args: + atom_array: Structure to annotate (modified in-place). + NA_only: Restrict geometry filter to nucleic-acid tokens. + planar_only: Restrict geometry filter to tokens with planar + sidechains. + p_canonical_bp_filter: Probability of discarding non-canonical + base pairs (keeps only A–U, A–T, G–C). + mol_info: Molecular-info constants; created if ``None``. + overwrite: If False, merge with existing ``bp_partners``. + token_level_data: Pre-computed metadata dict; augmented with + geometry as needed. + cutoff_HA_dist: H–A distance cutoff (Å) for HBPLUS. + cutoff_DA_dist: D–A distance cutoff (Å) for HBPLUS. + + Returns: + The same *atom_array* with the ``bp_partners`` annotation set. """ if mol_info is None: mol_info = NucMolInfo() - # Token representatives (0..L-1) and their corresponding atom indices (into atom_array) - token_starts = get_token_starts(atom_array) + # Residue representatives (0..L-1) and their corresponding atom indices. + # Keep this aligned with get_token_level_metadata(), which uses residue starts. + if token_level_data is not None and "token_starts" in token_level_data: + token_starts = np.asarray(token_level_data["token_starts"], dtype=int) + else: + token_starts = struc.get_residue_starts(atom_array) + residue_start_end = np.concatenate([token_starts, [atom_array.array_length()]]) token_level_array = atom_array[token_starts] # token_id is assigned token-wise and matches get_token_starts() segmentation. token_ids: list[int] = [int(t) for t in list(token_level_array.token_id)] @@ -1204,11 +1214,11 @@ def annotate_na_ss( atom_array, token_level_data, mol_info, - cutoff_HA_dist=mol_info.cutoff_HA_dist, - cutoff_DA_dist=mol_info.cutoff_DA_dist, + cutoff_HA_dist=cutoff_HA_dist, + cutoff_DA_dist=cutoff_DA_dist, ) bp_bool = np.asarray( - _compute_nucleic_ss_impl( + compute_nucleic_ss( mol_info, token_level_data, hbond_count, @@ -1222,6 +1232,18 @@ def annotate_na_ss( dtype=bool, ) + # Apply optional filters + if NA_only: + bp_bool &= is_na_full[:, None] + bp_bool &= is_na_full[None, :] + if planar_only: + n_tokens = bp_bool.shape[0] + has_planar_sc = np.asarray( + token_level_data.get("has_planar_sc", np.ones(n_tokens, dtype=bool)), dtype=bool + ) + bp_bool &= has_planar_sc[:, None] + bp_bool &= has_planar_sc[None, :] + # Optional: filter to canonical Watson-Crick basepairs only. # Sampled probabilistically to allow mixed supervision during training. do_canonical_filter = bool(p_canonical_bp_filter and (np.random.rand() < float(p_canonical_bp_filter))) @@ -1255,16 +1277,18 @@ def _base_letter(res_name: str) -> str | None: bp_bool = np.asarray(bp_bool, dtype=bool) bp_rows, bp_cols = np.nonzero(bp_bool) - # Prepare/overwrite annotation array + # Build residue-level annotation first, then spread to all atoms in each residue. if (not overwrite) and ("bp_partners" in atom_array.get_annotation_categories()): - bp_partners_ann = atom_array.bp_partners - if len(bp_partners_ann) != len(atom_array): - raise ValueError( - "Existing bp_partners annotation has wrong length" - ) + existing_ann = atom_array.bp_partners + if len(existing_ann) != len(atom_array): + raise ValueError("Existing bp_partners annotation has wrong length") + residue_bp_partners = np.empty(len(token_starts), dtype=object) + residue_bp_partners[:] = None + for i, start in enumerate(token_starts.tolist()): + residue_bp_partners[i] = existing_ann[int(start)] else: - bp_partners_ann = np.empty(len(atom_array), dtype=object) - bp_partners_ann[:] = None + residue_bp_partners = np.empty(len(token_starts), dtype=object) + residue_bp_partners[:] = None # Explicit-loop semantics: # - Only nucleic-acid token-start atoms *within subset_idxs* get a list container. @@ -1273,9 +1297,8 @@ def _base_letter(res_name: str) -> str | None: for full_i in subset_idxs.tolist(): if not bool(is_na_full[int(full_i)]): continue - atom_i = int(token_starts[int(full_i)]) - if bp_partners_ann[atom_i] is None: - bp_partners_ann[atom_i] = [] + if residue_bp_partners[int(full_i)] is None: + residue_bp_partners[int(full_i)] = [] # Populate partners using token_id ints # We only process each unordered pair once to avoid duplicates. @@ -1296,149 +1319,58 @@ def _base_letter(res_name: str) -> str | None: if full_j < full_i: continue - atom_i = int(token_starts[full_i]) - atom_j = int(token_starts[full_j]) partner_i = int(token_ids[full_j]) partner_j = int(token_ids[full_i]) - if bp_partners_ann[atom_i] is None: - bp_partners_ann[atom_i] = [] - if bp_partners_ann[atom_j] is None: - bp_partners_ann[atom_j] = [] + if residue_bp_partners[full_i] is None: + residue_bp_partners[full_i] = [] + if residue_bp_partners[full_j] is None: + residue_bp_partners[full_j] = [] # Add if not present - if partner_i not in bp_partners_ann[atom_i]: - bp_partners_ann[atom_i].append(partner_i) - if partner_j not in bp_partners_ann[atom_j]: - bp_partners_ann[atom_j].append(partner_j) + if partner_i not in residue_bp_partners[full_i]: + residue_bp_partners[full_i].append(partner_i) + if partner_j not in residue_bp_partners[full_j]: + residue_bp_partners[full_j].append(partner_j) + + # Project residue-level annotations back to atom-level storage: + # - atomized residues: spread to all atoms in that residue + # - non-atomized residues: keep only on token-start representative atom + bp_partners_ann = np.empty(len(atom_array), dtype=object) + bp_partners_ann[:] = None + for i, start in enumerate(token_starts.tolist()): + stop = int(residue_start_end[i + 1]) + value = residue_bp_partners[i] + if value is None: + continue + # A residue is treated as atomized if any atom in the residue carries atomize=True. + if "atomize" in atom_array.get_annotation_categories(): + residue_is_atomized = bool(np.any(np.asarray(atom_array.atomize[int(start):stop], dtype=bool))) + else: + residue_is_atomized = False + if residue_is_atomized: + for atom_idx in range(int(start), stop): + bp_partners_ann[atom_idx] = list(value) + else: + bp_partners_ann[int(start)] = list(value) atom_array.set_annotation("bp_partners", bp_partners_ann) return atom_array -def bp_partner_to_ss_matrix( - atom_array: AtomArray, - *, - feature_info: Optional[dict] = None, - mol_info: Optional[NucMolInfo] = None, - NA_only: Optional[bool] = False, - planar_only: Optional[bool] = False, - include_loops: bool = True, - token_level_data: Optional[dict] = None, -) -> np.ndarray: - """Reconstruct an integer NA secondary-structure matrix from annotations. - - Requires that ``atom_array`` has a ``bp_partners`` annotation created by - :func:`annotate_na_ss`. - - Returns - ------- - ss_matrix : np.ndarray - Shape (L, L) with values from ``feature_info``. - - Loop semantics: - - Only nucleic-acid tokens can be loops. - - Only tokens with an explicit empty list ``bp_partners == []`` are loops. - Unannotated tokens (``bp_partners is None``) remain masked. - """ - - if mol_info is None: - mol_info = NucMolInfo() - - if feature_info is None: - feature_info = DEFAULT_NA_SS_FEATURE_INFO - - if "bp_partners" not in atom_array.get_annotation_categories(): - raise ValueError( - "atom_array is missing bp_partners annotation; run annotate_na_ss() first" - ) - - token_starts = get_token_starts(atom_array) - token_level_array = atom_array[token_starts] - token_ids_int: list[int] = [int(t) for t in list(token_level_array.token_id)] - token_id_to_index_int = {int(tid): i for i, tid in enumerate(token_ids_int)} - L = len(token_starts) - - ss_matrix = feature_info["NA_SS_MASK"] * np.ones((L, L), dtype=np.int64) - - if token_level_data is None: - token_level_data = get_token_level_metadata( - atom_array, - mol_info, - # NA_only=NA_only, - # planar_only=planar_only, - ) - - mask_1d = np.asarray(token_level_data["filter_mask"], dtype=bool) - subset_idxs = np.nonzero(mask_1d)[0] - subset_set = set(int(x) for x in subset_idxs.tolist()) - is_na = np.asarray(token_level_data["is_na"], dtype=bool) - subset_na_idxs = subset_idxs[np.asarray(is_na[subset_idxs], dtype=bool)] - subset_na_set = set(int(x) for x in subset_na_idxs.tolist()) - - # Fill base-pair edges (only within subset, and only NA-NA) - bp_partners_ann = atom_array.bp_partners - for i in subset_idxs.tolist(): - if not bool(is_na[int(i)]): - continue - atom_i = int(token_starts[int(i)]) - partners = bp_partners_ann[atom_i] - if partners is None: - continue - if not isinstance(partners, (list, tuple, np.ndarray)): - continue - for partner_token_id in partners: - # Support int, numpy scalar, and legacy stringified token_id. - try: - partner_tid_int = int(partner_token_id) - except Exception: - partner_tid_int = None - j = token_id_to_index_int.get(partner_tid_int) if partner_tid_int is not None else None - if j is None or j == i: - continue - if int(j) not in subset_set: - continue - if not bool(is_na[int(j)]): - continue - ss_matrix[i, j] = feature_info["NA_SS_PAIR"] - ss_matrix[j, i] = feature_info["NA_SS_PAIR"] - - if not include_loops: - return ss_matrix - - # Loop labeling is explicit and NA-only: - # - only nucleic tokens can be loops - # - only tokens with an explicit empty list annotation are loops - loop_idxs_list: list[int] = [] - for i in subset_idxs.tolist(): - if not bool(is_na[int(i)]): - continue - atom_i = int(token_starts[int(i)]) - partners = bp_partners_ann[atom_i] - if not isinstance(partners, (list, tuple, np.ndarray)): - continue - if len(partners) == 0: - loop_idxs_list.append(int(i)) - - loop_idxs = np.asarray(loop_idxs_list, dtype=np.int64) - if loop_idxs.size > 0: - ss_matrix[loop_idxs[:, None], subset_na_idxs[None, :]] = feature_info["NA_SS_LOOP"] - ss_matrix[subset_na_idxs[:, None], loop_idxs[None, :]] = feature_info["NA_SS_LOOP"] - - return ss_matrix - - def parse_dot_bracket(dot_bracket: str) -> tuple[list[tuple[int, int]], list[int]]: """Parse a dot-bracket string into base pairs and unpaired positions. - Supports (), [], {}, <>, and A..E / a..e bracket pairs. + Supports standard ``()``, ``[]``, ``{}``, ``<>`` and pseudoknot + brackets ``A``–``E`` / ``a``–``e``. - Returns - ------- - pairs : list of (i, j) - 0-based indices in the string for paired positions. - unpaired : list of int - 0-based indices that are '.' (unpaired). + Args: + dot_bracket: Dot-bracket notation string. + + Returns: + Tuple of ``(pairs, unpaired)`` where *pairs* is a list of 0-based + ``(i, j)`` index tuples and *unpaired* is a list of 0-based indices + corresponding to ``.`` characters. """ stack: dict[str, list[int]] = {} @@ -1480,19 +1412,27 @@ def annotate_na_ss_from_specification( *, overwrite: bool = True, ) -> AtomArray: - """Annotate ``bp_partners`` from an inference-time specification. - - This is the inference analogue of :func:`annotate_na_ss`, except instead - of computing base pairs from geometry/H-bonds, it interprets a user-provided - specification (dot-bracket strings and/or residue ranges/positions) and - writes the same ``bp_partners`` annotation on token-representative atoms. - - Supported spec keys (all optional): - - ``ss_dbn``: global dot-bracket string applied to the first L tokens. - - ``ss_dbn_dict``: mapping like {"A5-15": dbn_str, ...}. - - ``paired_region_list``: list of "A5-15,B1-11" entries. - - ``paired_position_list``: list of "A19,A61,A20" groups. - - ``loop_region_list``: list of "A5-10" regions forced unpaired. + """Write ``bp_partners`` annotation from an inference-time specification. + + Inference analogue of :func:`annotate_na_ss`: interprets user-provided + dot-bracket strings and/or residue ranges rather than computing base + pairs from geometry. + + Supported *specification* keys (all optional): + + * ``ss_dbn``: global dot-bracket string (applied to the first *L* tokens). + * ``ss_dbn_dict``: ``{"-": dbn_str, ...}``. + * ``paired_region_list``: ``["A5-15,B1-11", ...]``. + * ``paired_position_list``: ``["A19,A61,A20", ...]``. + * ``loop_region_list``: ``["A5-10", ...]`` (forced unpaired). + + Args: + atom_array: Structure to annotate (modified in-place). + specification: Specification dict as described above. + overwrite: If False, merge with existing ``bp_partners``. + + Returns: + The same *atom_array* with the ``bp_partners`` annotation set. """ spec = specification or {} @@ -1502,11 +1442,17 @@ def annotate_na_ss_from_specification( n_tokens = len(token_starts) # Explicit loops are only meaningful for nucleic-acid tokens. - seq_data = _get_sequence_encoding_data() - is_rna_like = np.isin(token_level_array.res_name, seq_data["rna_like_res_names"]) - is_dna_like = np.isin(token_level_array.res_name, seq_data["dna_like_res_names"]) + # Instantiate encoding locally to avoid retaining large arrays at module scope. + sequence_encoding = AF3SequenceEncoding() + is_rna_like = np.isin( + token_level_array.res_name, + sequence_encoding.all_res_names[sequence_encoding.is_rna_like], + ) + is_dna_like = np.isin( + token_level_array.res_name, + sequence_encoding.all_res_names[sequence_encoding.is_dna_like], + ) is_na_token = np.asarray(is_rna_like | is_dna_like, dtype=bool) - del seq_data # Prepare/overwrite annotation array if (not overwrite) and ("bp_partners" in atom_array.get_annotation_categories()): @@ -1703,8 +1649,18 @@ def annotate_na_ss_from_data_specification( *, overwrite: bool = True, ) -> AtomArray: - """Convenience wrapper: annotate bp partners from ``data['specification']``.""" + """Annotate ``bp_partners`` from ``data["specification"]``. + + Convenience wrapper around :func:`annotate_na_ss_from_specification`. + + Args: + data: Pipeline data dict containing ``atom_array`` and optionally + ``specification``. + overwrite: If False, merge with existing ``bp_partners``. + + Returns: + The annotated AtomArray (also stored back in *data*). + """ atom_array = data["atom_array"] spec = data.get("specification", {}) or {} return annotate_na_ss_from_specification(atom_array, spec, overwrite=overwrite) - From fc8514bb041f0655f9ae9f9973eb4777ebc69e7b Mon Sep 17 00:00:00 2001 From: afavor Date: Mon, 16 Feb 2026 18:15:42 -0800 Subject: [PATCH 20/49] fixed behavior for conditional sampling of NA SS condition --- models/rfd3/configs/datasets/design_base.yaml | 5 + .../configs/datasets/design_base_rfd3na.yaml | 4 +- .../rfd3/configs/datasets/val/pseudoknot.yaml | 1 + models/rfd3/configs/experiment/rfd3na-ss.yaml | 21 ++- .../src/rfd3/metrics/nucleic_ss_metrics.py | 175 +++++++++--------- models/rfd3/src/rfd3/transforms/na_geom.py | 37 ++-- .../rfd3/src/rfd3/transforms/na_geom_utils.py | 54 ++++-- 7 files changed, 161 insertions(+), 136 deletions(-) diff --git a/models/rfd3/configs/datasets/design_base.yaml b/models/rfd3/configs/datasets/design_base.yaml index 02ee92a6..c862900c 100644 --- a/models/rfd3/configs/datasets/design_base.yaml +++ b/models/rfd3/configs/datasets/design_base.yaml @@ -98,3 +98,8 @@ global_transform_args: # PPI add_ppi_hotspots: 0.75 full_binder_crop: 0.75 + + # Nucleic SS: + p_is_nucleic_ss_example: 0.0 + p_nucleic_ss_show_partial_feats: 0.0 + \ No newline at end of file diff --git a/models/rfd3/configs/datasets/design_base_rfd3na.yaml b/models/rfd3/configs/datasets/design_base_rfd3na.yaml index 71816174..dbebee88 100644 --- a/models/rfd3/configs/datasets/design_base_rfd3na.yaml +++ b/models/rfd3/configs/datasets/design_base_rfd3na.yaml @@ -81,7 +81,9 @@ global_transform_args: # Used to create simple boolean flags for downstream conditioning meta_conditioning_probabilities: - calculate_NA_SS: 1.0 + # calculate_NA_SS: 1.0 + p_is_nucleic_ss_example: 0.1 + p_nucleic_ss_show_partial_feats: 0.7 calculate_hbonds: 0.2 calculate_rasa: 0.6 diff --git a/models/rfd3/configs/datasets/val/pseudoknot.yaml b/models/rfd3/configs/datasets/val/pseudoknot.yaml index 7cf5ce14..895e6c21 100644 --- a/models/rfd3/configs/datasets/val/pseudoknot.yaml +++ b/models/rfd3/configs/datasets/val/pseudoknot.yaml @@ -6,4 +6,5 @@ defaults: dataset: name: pseudoknot eval_every_n: 1 + # data: ${paths.data.design_benchmark_data_dir}/pseudoknot_debug.json data: ${paths.data.design_benchmark_data_dir}/pseudoknot.json diff --git a/models/rfd3/configs/experiment/rfd3na-ss.yaml b/models/rfd3/configs/experiment/rfd3na-ss.yaml index 6d2245c5..082ed819 100644 --- a/models/rfd3/configs/experiment/rfd3na-ss.yaml +++ b/models/rfd3/configs/experiment/rfd3na-ss.yaml @@ -2,6 +2,7 @@ # Training configuration for RFD3 defaults: + # - /debug/default - /debug/default - override /model: rfd3_base - override /logger: null @@ -54,6 +55,10 @@ datasets: crop_size: 256 max_atoms_in_crop: 2560 # ~10x crop size. global_transform_args: + meta_conditioning_probabilities: + p_is_nucleic_ss_example: 1.0 + p_nucleic_ss_show_partial_feats: 0.7 + p_canonical_bp_filter: 0.2 association_scheme: atom23 #add_na_pair_features: true train_conditions: @@ -70,19 +75,23 @@ datasets: train: # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. pdb: - probability: 0.5 + # probability: 0.5 + probability: 0.75 + # probability: 0.0 rna_monomer_distillation: - probability: 0.5 + # probability: 0.2 + probability: 0.25 + # probability: 1.0 val: pseudoknot: dataset: # eval_every_n: 10 - eval_every_n: 1 + eval_every_n: 5 trainer: - devices_per_node: 1 - limit_train_batches: 10 - limit_val_batches: 1 + #devices_per_node: 1 + #limit_train_batches: 10 + #limit_val_batches: 1 validate_every_n_epochs: 5 prevalidate: true diff --git a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py index 6a0c8d44..62d077f5 100644 --- a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py +++ b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py @@ -16,6 +16,14 @@ global_logger = RankedLogger(__name__, rank_zero_only=False) +def _get_bp_partners_annotation(atom_array: AtomArray): + """Return bp-partners annotation.""" + categories = atom_array.get_annotation_categories() + if "bp_partners" in categories: + return atom_array.bp_partners + raise ValueError("atom_array missing bp_partners annotation") + + def _safe_f1_from_sizes(intersection_n: int, pred_n: int, gt_n: int) -> float: """Return F1 with sensible empty-set handling.""" if pred_n == 0 and gt_n == 0: @@ -76,19 +84,16 @@ def _extract_bp_pairs( *, allowed_token_ids: set[int], ) -> set[tuple[int, int]]: - """Extract unordered base-pair edges from bp_partner annotations. + """Extract unordered base-pair edges from bp-partner annotations. Pairs are represented as (min_token_id, max_token_id). """ - if "bp_partner" not in atom_array.get_annotation_categories(): - raise ValueError("atom_array missing bp_partner annotation") - token_starts = get_token_starts(atom_array) token_level_array = atom_array[token_starts] token_ids = np.asarray(token_level_array.token_id, dtype=int) token_id_to_pos = {int(tid): i for i, tid in enumerate(token_ids.tolist())} - bp_partner_ann = atom_array.bp_partner + bp_partner_ann = _get_bp_partners_annotation(atom_array) pairs: set[tuple[int, int]] = set() for pos, start_idx in enumerate(token_starts.tolist()): @@ -126,15 +131,12 @@ def _extract_loop_and_paired_token_ids( allowed_token_ids: set[int], ) -> tuple[set[int], set[int]]: """Return (loop_token_ids, paired_token_ids) within the allowed token set.""" - if "bp_partner" not in atom_array.get_annotation_categories(): - raise ValueError("atom_array missing bp_partner annotation") - token_starts = get_token_starts(atom_array) token_level_array = atom_array[token_starts] token_ids = np.asarray(token_level_array.token_id, dtype=int) token_id_to_pos = {int(tid): i for i, tid in enumerate(token_ids.tolist())} - bp_partner_ann = atom_array.bp_partner + bp_partner_ann = _get_bp_partners_annotation(atom_array) loop_token_ids: set[int] = set() paired_token_ids: set[int] = set() @@ -176,9 +178,9 @@ class NucleicSSSimilarityMetrics(Metric): """Secondary-structure similarity for nucleic acids. Reports: - - `pair_f1`: F1 over the set of basepair edges implied by token-level `bp_partner`. - - `loop_f1`: F1 over explicitly-unpaired loop tokens (`bp_partner == []`). - Unannotated tokens (`bp_partner is None`) are masked. + - `pair_f1`: F1 over basepair edges from token-level bp-partner annotation. + - `loop_f1`: F1 over explicitly-unpaired loop tokens (`bp_partners == []`). + Unannotated tokens (`bp_partners is None`) are masked. - `weighted_f1`: GT-weighted average of `pair_f1` and `loop_f1`, weighted by the prevalence of paired vs loop tokens in the GT. """ @@ -217,91 +219,84 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): n_valid = 0 for gt_arr, pred_arr in zip(ground_truth_atom_array_stack, predicted_atom_array_stack): - try: - if "bp_partner" not in gt_arr.get_annotation_categories(): - continue - - # Important: predicted AtomArrays are built from a template AtomArray. - # If that template already carries bp_partner (often GT-derived), the - # prediction can inherit it, yielding artificially perfect scores. - # Optionally recompute bp_partner from the *predicted coordinates*. - - if self.annotate_predicted_fresh: - annotate_na_ss( - pred_arr, - NA_only=self.annotation_NA_only, - planar_only=self.annotation_planar_only, - overwrite=True, - p_canonical_bp_filter=0.0, - ) - - if "bp_partner" not in pred_arr.get_annotation_categories(): - continue - - # Basic sanity check: token counts should match for aligned comparisons. - gt_token_ids = _get_token_ids(gt_arr) - pred_token_ids = _get_token_ids(pred_arr) - if len(gt_token_ids) != len(pred_token_ids): - continue - - # Restrict to token_ids that are valid in both arrays. - gt_allowed = _get_candidate_token_ids( - gt_arr, - restrict_to_nucleic=self.restrict_to_nucleic, - compute_for_diffused_region_only=self.compute_for_diffused_region_only, - ) - pred_allowed = _get_candidate_token_ids( + gt_categories = gt_arr.get_annotation_categories() + if "bp_partners" not in gt_categories: + continue + + # Important: predicted AtomArrays are built from a template AtomArray. + # If that template already carries bp_partners (often GT-derived), the + # prediction can inherit it, yielding artificially perfect scores. + # Optionally recompute bp_partners from the *predicted coordinates*. + if self.annotate_predicted_fresh: + annotate_na_ss( pred_arr, - restrict_to_nucleic=self.restrict_to_nucleic, - compute_for_diffused_region_only=self.compute_for_diffused_region_only, + NA_only=self.annotation_NA_only, + planar_only=self.annotation_planar_only, + overwrite=True, + p_canonical_bp_filter=0.0, ) - allowed = gt_allowed & pred_allowed - if len(allowed) == 0: - continue + pred_categories = pred_arr.get_annotation_categories() + if "bp_partners" not in pred_categories: + continue - gt_pairs = _extract_bp_pairs(gt_arr, allowed_token_ids=allowed) - pred_pairs = _extract_bp_pairs(pred_arr, allowed_token_ids=allowed) + # Basic sanity check: token counts should match for aligned comparisons. + gt_token_ids = _get_token_ids(gt_arr) + pred_token_ids = _get_token_ids(pred_arr) + if len(gt_token_ids) != len(pred_token_ids): + continue - gt_loop, gt_paired_tokens = _extract_loop_and_paired_token_ids( - gt_arr, allowed_token_ids=allowed - ) - pred_loop, _pred_paired_tokens = _extract_loop_and_paired_token_ids( - pred_arr, allowed_token_ids=allowed + # Restrict to token_ids that are valid in both arrays. + gt_allowed = _get_candidate_token_ids( + gt_arr, + restrict_to_nucleic=self.restrict_to_nucleic, + compute_for_diffused_region_only=self.compute_for_diffused_region_only, + ) + pred_allowed = _get_candidate_token_ids( + pred_arr, + restrict_to_nucleic=self.restrict_to_nucleic, + compute_for_diffused_region_only=self.compute_for_diffused_region_only, + ) + allowed = gt_allowed & pred_allowed + + if len(allowed) == 0: + continue + + gt_pairs = _extract_bp_pairs(gt_arr, allowed_token_ids=allowed) + pred_pairs = _extract_bp_pairs(pred_arr, allowed_token_ids=allowed) + + gt_loop, gt_paired_tokens = _extract_loop_and_paired_token_ids( + gt_arr, allowed_token_ids=allowed + ) + pred_loop, _pred_paired_tokens = _extract_loop_and_paired_token_ids( + pred_arr, allowed_token_ids=allowed + ) + + pair_tp = len(gt_pairs & pred_pairs) + pair_pred_n = len(pred_pairs) + pair_gt_n = len(gt_pairs) + + loop_tp = len(gt_loop & pred_loop) + loop_pred_n = len(pred_loop) + loop_gt_n = len(gt_loop) + + pair_f1 = _safe_f1_from_sizes(pair_tp, pair_pred_n, pair_gt_n) + loop_f1 = _safe_f1_from_sizes(loop_tp, loop_pred_n, loop_gt_n) + + pair_weight = len(gt_paired_tokens) + loop_weight = len(gt_loop) + total_weight = pair_weight + loop_weight + if total_weight == 0: + weighted_f1 = 1.0 + else: + weighted_f1 = float( + (pair_weight * pair_f1 + loop_weight * loop_f1) / total_weight ) - pair_tp = len(gt_pairs & pred_pairs) - pair_pred_n = len(pred_pairs) - pair_gt_n = len(gt_pairs) - - loop_tp = len(gt_loop & pred_loop) - loop_pred_n = len(pred_loop) - loop_gt_n = len(gt_loop) - - pair_f1 = _safe_f1_from_sizes(pair_tp, pair_pred_n, pair_gt_n) - loop_f1 = _safe_f1_from_sizes(loop_tp, loop_pred_n, loop_gt_n) - - pair_weight = len(gt_paired_tokens) - loop_weight = len(gt_loop) - total_weight = pair_weight + loop_weight - if total_weight == 0: - weighted_f1 = 1.0 - else: - weighted_f1 = float( - (pair_weight * pair_f1 + loop_weight * loop_f1) / total_weight - ) - - pair_f1_list.append(pair_f1) - loop_f1_list.append(loop_f1) - weighted_f1_list.append(weighted_f1) - n_valid += 1 - - except bdb.BdbQuit: - # Allow interactive debuggers (pdb) to cleanly abort without being swallowed. - raise - except Exception as e: - global_logger.error(f"Error computing nucleic-SS similarity: {e} | Skipping") - continue + pair_f1_list.append(pair_f1) + loop_f1_list.append(loop_f1) + weighted_f1_list.append(weighted_f1) + n_valid += 1 if n_valid == 0: return {} diff --git a/models/rfd3/src/rfd3/transforms/na_geom.py b/models/rfd3/src/rfd3/transforms/na_geom.py index a1c8565d..f1f400a9 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom.py +++ b/models/rfd3/src/rfd3/transforms/na_geom.py @@ -100,12 +100,12 @@ class CalculateNucleicAcidGeomFeats(Transform): Training: - Computes geometry/H-bond-based base pairs and writes them onto the AtomArray - via the ``bp_partner`` annotation (annotation-first), then reconstructs the + via the ``bp_partners`` annotation (annotation-first), then reconstructs the matrix (and optionally masks parts of it) before one-hot encoding. Inference: - Interprets user-provided secondary-structure specifications, writes the same - ``bp_partner`` annotation, then follows the same matrix + one-hot path. + ``bp_partners`` annotation, then follows the same matrix + one-hot path. Note: helical-parameter features are not implemented/used in this refactored path. """ @@ -113,16 +113,14 @@ class CalculateNucleicAcidGeomFeats(Transform): def __init__( self, is_inference, - add_nucleic_ss_feats: bool = True, - # Conditional sampling parameters: - p_is_nucleic_ss_example: float = 0.3, - p_show_partial_feats: float = 0.7, + # Conditional sampling parameters all stored in this dict: + meta_conditioning_probabilities: dict[str, float] = None, + # Mask control paramerers: nucleic_ss_min_shown: float = 0.2, nucleic_ss_max_shown: float = 1.0, n_islands_min: int = 1, n_islands_max: int = 6, - p_canonical_bp_filter: float = 0.0, # USE_RF2AA_NAMES: bool = False, NA_only: bool = False, @@ -131,21 +129,27 @@ def __init__( ): # Critical, must always have to know how to handle self.is_inference = is_inference + + self.meta_conditioning_probabilities = meta_conditioning_probabilities or {} + + # Control whether we show some nucleic SS or default to full 2D mask + self.p_is_nucleic_ss_example = self.meta_conditioning_probabilities.get("p_is_nucleic_ss_example", 0.0) + + # Control whether we define full SS or just part of it (only applies if is NA SS example) + self.p_show_partial_feats = self.meta_conditioning_probabilities.get("p_nucleic_ss_show_partial_feats", 0.0) - self.add_nucleic_ss_feats = add_nucleic_ss_feats - self.p_canonical_bp_filter = p_canonical_bp_filter # enforce that bp labels are only canonical - self.p_is_nucleic_ss_example = p_is_nucleic_ss_example - self.p_show_partial_feats = p_show_partial_feats + # Some frac of time default to only showing canonical base pairs + self.p_canonical_bp_filter = self.meta_conditioning_probabilities.get("p_canonical_bp_filter", 0.5) + + # mask patterning control to make things resemble design scenarios self.nucleic_ss_min_shown = nucleic_ss_min_shown self.nucleic_ss_max_shown = nucleic_ss_max_shown self.n_islands_min = n_islands_min self.n_islands_max = n_islands_max - # Filters for what can be considered a planar contact interaction self.NA_only = NA_only # only annotate base-like interactions for nucleic acid residues self.planar_only = planar_only # only consider planar atoms in sidechains for geometry calculations, - self.p_canonical_bp_filter = p_canonical_bp_filter # probability of enforcing canonical base pair filter @@ -168,13 +172,8 @@ def forward(self, data: dict) -> dict: # Calculate n_tokens (assuming one token per residue for simplicity) token_starts = get_token_starts(atom_array) - token_level_array = atom_array[token_starts] n_tokens = len(token_starts) - - # Defaults for feature visibility - is_nucleic_ss_example = True - give_partial_feats = False - token_mask_to_show = np.ones(n_tokens, dtype=bool) + # token_level_array = atom_array[token_starts] # Handle the training case with ground truth and masking if not self.is_inference: diff --git a/models/rfd3/src/rfd3/transforms/na_geom_utils.py b/models/rfd3/src/rfd3/transforms/na_geom_utils.py index 8ab2e71c..23292a87 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom_utils.py +++ b/models/rfd3/src/rfd3/transforms/na_geom_utils.py @@ -1050,6 +1050,40 @@ def compute_nucleic_ss( hbond_count = np.asarray(hbond_count)[mask_1d, :][:, mask_1d] # [I, I, 3] seq_neighbors = np.asarray(token_level_data["seq_neighbors"], dtype=bool)[mask_1d, :][:, mask_1d] # [I, I] + # Nothing passed NA/planar filtering for this structure. + # Return empty outputs instead of failing downstream on np.stack([]). + if len(xyz_planar) == 0: + if return_basepairs_only: + return np.zeros((0, 0), dtype=bool) + + pair_params: dict[str, np.ndarray] = { + "H_ij": np.zeros((0, 0), dtype=np.float32), + "B_ij": np.zeros((0, 0), dtype=np.float32), + "P_ij": np.zeros((0, 0), dtype=np.float32), + "base_ori_ij": np.zeros((0, 0), dtype=np.float32), + "basepairs_bool_ij": np.zeros((0, 0), dtype=bool), + "basepairs_ij": np.zeros((0, 0), dtype=np.float32), + "hbond_summation": np.zeros((0, 0), dtype=np.float32), + } + + if return_opening_angle: + pair_params["O_ij"] = np.zeros((0, 0), dtype=np.float32) + + if return_pairwise_geometry: + pair_params["X_ij"] = np.zeros((0, 0), dtype=np.float32) + pair_params["Y_ij"] = np.zeros((0, 0), dtype=np.float32) + pair_params["Z_ij"] = np.zeros((0, 0), dtype=np.float32) + + nucleic_ss_data: dict = {"pair_params": pair_params} + if return_local_params: + nucleic_ss_data["local_params"] = { + "X_i": np.zeros((0, 3), dtype=np.float32), + "Y_i": np.zeros((0, 3), dtype=np.float32), + "Z_i": np.zeros((0, 3), dtype=np.float32), + } + + return nucleic_ss_data + # --- Precompute centroids and displacement vectors ----------- planar_centers = np.stack( # [I, 3] [np.nanmean(np.asarray(xyz_i, dtype=np.float32), axis=0) for xyz_i in xyz_planar], @@ -1441,19 +1475,6 @@ def annotate_na_ss_from_specification( token_ids: list[int] = [int(t) for t in list(token_level_array.token_id)] n_tokens = len(token_starts) - # Explicit loops are only meaningful for nucleic-acid tokens. - # Instantiate encoding locally to avoid retaining large arrays at module scope. - sequence_encoding = AF3SequenceEncoding() - is_rna_like = np.isin( - token_level_array.res_name, - sequence_encoding.all_res_names[sequence_encoding.is_rna_like], - ) - is_dna_like = np.isin( - token_level_array.res_name, - sequence_encoding.all_res_names[sequence_encoding.is_dna_like], - ) - is_na_token = np.asarray(is_rna_like | is_dna_like, dtype=bool) - # Prepare/overwrite annotation array if (not overwrite) and ("bp_partners" in atom_array.get_annotation_categories()): bp_partners_ann = atom_array.bp_partners @@ -1528,8 +1549,6 @@ def _add_pair(i: int, j: int) -> None: return if i == j: return - if (not bool(is_na_token[int(i)])) or (not bool(is_na_token[int(j)])): - return if i in loop_token_idxs or j in loop_token_idxs: return partners[i].add(j) @@ -1619,9 +1638,6 @@ def _add_pair(i: int, j: int) -> None: for i in list(loop_token_idxs): if not (0 <= i < n_tokens): continue - if not bool(is_na_token[int(i)]): - loop_token_idxs.discard(int(i)) - continue for j in list(partners[i]): partners[j].discard(i) partners[i].clear() @@ -1630,8 +1646,6 @@ def _add_pair(i: int, j: int) -> None: # Unspecified tokens remain unannotated (None) -> NA_SS_MASK. for i in range(n_tokens): atom_i = int(token_starts[i]) - if not bool(is_na_token[int(i)]): - continue if len(partners[i]) > 0: bp_partners_ann[atom_i] = [] for j in sorted(partners[i]): From 1f0d9115f6f6d49dd36d1978b881e251ac95822d Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Mon, 16 Feb 2026 18:53:46 -0800 Subject: [PATCH 21/49] val metric logging fix --- models/rfd3/configs/callbacks/design_callbacks.yaml | 1 + models/rfd3/configs/datasets/design_base_rfd3na.yaml | 8 ++++---- models/rfd3/configs/experiment/rfd3na-ss.yaml | 11 ++++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/models/rfd3/configs/callbacks/design_callbacks.yaml b/models/rfd3/configs/callbacks/design_callbacks.yaml index 309b492a..68c9a4ce 100644 --- a/models/rfd3/configs/callbacks/design_callbacks.yaml +++ b/models/rfd3/configs/callbacks/design_callbacks.yaml @@ -1,5 +1,6 @@ defaults: - train_logging + - metrics_logging - _self_ log_learning_rate_callback: diff --git a/models/rfd3/configs/datasets/design_base_rfd3na.yaml b/models/rfd3/configs/datasets/design_base_rfd3na.yaml index dbebee88..46bfb852 100644 --- a/models/rfd3/configs/datasets/design_base_rfd3na.yaml +++ b/models/rfd3/configs/datasets/design_base_rfd3na.yaml @@ -9,9 +9,9 @@ defaults: - train/rna_monomer_distillation@train # Customized validation datasets - - val/unconditional@val.unconditional - - val/unconditional_deep@val.unconditional_deep - - val/indexed@val.indexed + #- val/unconditional@val.unconditional + #- val/unconditional_deep@val.unconditional_deep + #- val/indexed@val.indexed - val/pseudoknot@val.pseudoknot # Customized train masks @@ -81,9 +81,9 @@ global_transform_args: # Used to create simple boolean flags for downstream conditioning meta_conditioning_probabilities: - # calculate_NA_SS: 1.0 p_is_nucleic_ss_example: 0.1 p_nucleic_ss_show_partial_feats: 0.7 + calculate_NA_SS: 0.5 calculate_hbonds: 0.2 calculate_rasa: 0.6 diff --git a/models/rfd3/configs/experiment/rfd3na-ss.yaml b/models/rfd3/configs/experiment/rfd3na-ss.yaml index 082ed819..1c1a7454 100644 --- a/models/rfd3/configs/experiment/rfd3na-ss.yaml +++ b/models/rfd3/configs/experiment/rfd3na-ss.yaml @@ -2,14 +2,13 @@ # Training configuration for RFD3 defaults: - # - /debug/default - - /debug/default + #- /debug/default - override /model: rfd3_base - - override /logger: null + - override /logger: wandb - override /datasets: design_base_rfd3na - _self_ -name: rfd3na-SScond +name: rfd3na tags: [print-model] ckpt_path: null @@ -59,6 +58,8 @@ datasets: p_is_nucleic_ss_example: 1.0 p_nucleic_ss_show_partial_feats: 0.7 p_canonical_bp_filter: 0.2 + calculate_NA_SS: 0.3 + association_scheme: atom23 #add_na_pair_features: true train_conditions: @@ -94,4 +95,4 @@ trainer: #limit_train_batches: 10 #limit_val_batches: 1 validate_every_n_epochs: 5 - prevalidate: true + prevalidate: false From 3dfa04ac20737437374eeeb61e73b6434d1537fe Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Mon, 16 Feb 2026 19:19:29 -0800 Subject: [PATCH 22/49] prevalidate on --- models/rfd3/configs/experiment/rfd3na-ss.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/rfd3/configs/experiment/rfd3na-ss.yaml b/models/rfd3/configs/experiment/rfd3na-ss.yaml index 1c1a7454..cfed3a6d 100644 --- a/models/rfd3/configs/experiment/rfd3na-ss.yaml +++ b/models/rfd3/configs/experiment/rfd3na-ss.yaml @@ -95,4 +95,4 @@ trainer: #limit_train_batches: 10 #limit_val_batches: 1 validate_every_n_epochs: 5 - prevalidate: false + prevalidate: true From 91a0eb22ec366cfb104d4a86576c658cd1850c94 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Tue, 17 Feb 2026 11:06:26 -0800 Subject: [PATCH 23/49] skip ss computation when not ss example --- models/rfd3/src/rfd3/transforms/na_geom.py | 61 ++++++++++++---------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/models/rfd3/src/rfd3/transforms/na_geom.py b/models/rfd3/src/rfd3/transforms/na_geom.py index f1f400a9..ba45c7f4 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom.py +++ b/models/rfd3/src/rfd3/transforms/na_geom.py @@ -179,39 +179,44 @@ def forward(self, data: dict) -> dict: if not self.is_inference: # First, annotate as usual - atom_array = annotate_na_ss(atom_array, + is_nucleic_ss_example, give_partial_feats = self._sample_training_flags() + + if is_nucleic_ss_example: + + atom_array = annotate_na_ss(atom_array, NA_only=self.NA_only, planar_only=self.planar_only, p_canonical_bp_filter=self.p_canonical_bp_filter, ) - # Generate symmetric partner annotations at the token level for masking purposes. - # choice for object-consistency: if already masked/undefined: be a list mapping to self-index. - partner_sym_map = { - i: atom_array.bp_partners[ts_i] if atom_array.bp_partners[ts_i] is not None else [i] - for i, ts_i in enumerate(token_starts) - } - - # # Sample mask on token level: - is_nucleic_ss_example, give_partial_feats = self._sample_training_flags() - token_mask_to_show = self._sample_where_to_show_ss( - n_tokens, - is_nucleic_ss_example=is_nucleic_ss_example, - give_partial_feats=give_partial_feats, - partner_sym_map=partner_sym_map, - ) # Mask vec for tokens where ss shown - - # Spread mask to atom level - is_ss_shown = spread_token_wise(atom_array, token_mask_to_show) - - # Extract the base pair annotations - bp_partners_atom = atom_array.get_annotation("bp_partners") - - # Remove unshown positions from bp_partners annotation - bp_partners_atom[~is_ss_shown] = None - - # Reset the annotation with newly hidden positions - atom_array.set_annotation("bp_partners", bp_partners_atom) + # Generate symmetric partner annotations at the token level for masking purposes. + # choice for object-consistency: if already masked/undefined: be a list mapping to self-index. + partner_sym_map = { + i: atom_array.bp_partners[ts_i] if atom_array.bp_partners[ts_i] is not None else [i] + for i, ts_i in enumerate(token_starts) + } + + # # Sample mask on token level: + token_mask_to_show = self._sample_where_to_show_ss( + n_tokens, + is_nucleic_ss_example=is_nucleic_ss_example, + give_partial_feats=give_partial_feats, + partner_sym_map=partner_sym_map, + ) # Mask vec for tokens where ss shown + + # Spread mask to atom level + is_ss_shown = spread_token_wise(atom_array, token_mask_to_show) + + # Extract the base pair annotations + bp_partners_atom = atom_array.get_annotation("bp_partners") + + # Remove unshown positions from bp_partners annotation + bp_partners_atom[~is_ss_shown] = None + + # Reset the annotation with newly hidden positions + atom_array.set_annotation("bp_partners", bp_partners_atom) + else: + atom_array.set_annotation("bp_partners", np.array([None]*len(atom_array))) # Inference case: create from commandline args else: From de06df8cbfcc02a88f31d6af837c4fadf78efa60 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Tue, 17 Feb 2026 12:26:13 -0800 Subject: [PATCH 24/49] cleanup; aptamer metric; monomer dist on; send trainininggit status --- .../configs/datasets/design_base_rfd3na.yaml | 2 +- .../train/pdb/rfd3_train_interface.yaml | 3 +- .../train/pdb/rfd3_train_pn_unit.yaml | 1 + models/rfd3/configs/experiment/rfd3na-ss.yaml | 98 ---------------- models/rfd3/configs/experiment/rfd3na.yaml | 42 ++++--- .../trainer/metrics/design_metrics.yaml | 4 + .../src/rfd3/metrics/rna_aptamer_metrics.py | 109 ++++++++++++++++++ 7 files changed, 145 insertions(+), 114 deletions(-) delete mode 100644 models/rfd3/configs/experiment/rfd3na-ss.yaml create mode 100644 models/rfd3/src/rfd3/metrics/rna_aptamer_metrics.py diff --git a/models/rfd3/configs/datasets/design_base_rfd3na.yaml b/models/rfd3/configs/datasets/design_base_rfd3na.yaml index 46bfb852..661b2fb0 100644 --- a/models/rfd3/configs/datasets/design_base_rfd3na.yaml +++ b/models/rfd3/configs/datasets/design_base_rfd3na.yaml @@ -5,7 +5,7 @@ defaults: # Grab datasets - train/pdb/rfd3_train_interface@train.pdb.sub_datasets.interface - train/pdb/rfd3_train_pn_unit@train.pdb.sub_datasets.pn_unit - #- train/rfd3_monomer_distillation@train + - train/rfd3_monomer_distillation@train - train/rna_monomer_distillation@train # Customized validation datasets diff --git a/models/rfd3/configs/datasets/train/pdb/rfd3_train_interface.yaml b/models/rfd3/configs/datasets/train/pdb/rfd3_train_interface.yaml index d5df571b..9ff698a8 100644 --- a/models/rfd3/configs/datasets/train/pdb/rfd3_train_interface.yaml +++ b/models/rfd3/configs/datasets/train/pdb/rfd3_train_interface.yaml @@ -12,6 +12,7 @@ dataset: # filters common across all PDB datasets - 'pdb_id not in ["7rte", "7m5w", "7n5u"]' - 'pdb_id not in ["3di3", "5o45", "1z92", "2gy5", "4zxb"]' + - 'pdb_id not in ["1drz", "2m8k", "2miy", "3q3z", "4oqu", "4plx", "4znp", "7kd1", "7kga", "7qr4"]' - "deposition_date < '2024-12-16'" - "resolution < 9.0" - "num_polymer_pn_units <= 300" @@ -19,4 +20,4 @@ dataset: # interface specific filters - "~(pn_unit_1_non_polymer_res_names.notnull() and pn_unit_1_non_polymer_res_names.str.contains('${resolve_import:atomworks.constants,AF3_EXCLUDED_LIGANDS_REGEX}', regex=True))" - "~(pn_unit_2_non_polymer_res_names.notnull() and pn_unit_2_non_polymer_res_names.str.contains('${resolve_import:atomworks.constants,AF3_EXCLUDED_LIGANDS_REGEX}', regex=True))" - - "is_inter_molecule" \ No newline at end of file + - "is_inter_molecule" diff --git a/models/rfd3/configs/datasets/train/pdb/rfd3_train_pn_unit.yaml b/models/rfd3/configs/datasets/train/pdb/rfd3_train_pn_unit.yaml index dfd548fc..19d31e8b 100644 --- a/models/rfd3/configs/datasets/train/pdb/rfd3_train_pn_unit.yaml +++ b/models/rfd3/configs/datasets/train/pdb/rfd3_train_pn_unit.yaml @@ -15,6 +15,7 @@ dataset: # filters common across all PDB datasets - 'pdb_id not in ["7rte", "7m5w", "7n5u"]' - 'pdb_id not in ["3di3", "5o45", "1z92", "2gy5", "4zxb"]' + - 'pdb_id not in ["1drz", "2m8k", "2miy", "3q3z", "4oqu", "4plx", "4znp", "7kd1", "7kga", "7qr4"]' - "deposition_date < '2024-12-16'" - "resolution < 9.0" - "num_polymer_pn_units <= 300" diff --git a/models/rfd3/configs/experiment/rfd3na-ss.yaml b/models/rfd3/configs/experiment/rfd3na-ss.yaml deleted file mode 100644 index cfed3a6d..00000000 --- a/models/rfd3/configs/experiment/rfd3na-ss.yaml +++ /dev/null @@ -1,98 +0,0 @@ -# @package _global_ -# Training configuration for RFD3 - -defaults: - #- /debug/default - - override /model: rfd3_base - - override /logger: wandb - - override /datasets: design_base_rfd3na - - _self_ - -name: rfd3na -tags: [print-model] -ckpt_path: null - -model: - net: - token_initializer: - token_1d_features: - ref_motif_token_type: 3 - restype: 32 - is_dna_token: 1 - is_rna_token: 1 - is_protein_token: 1 - token_2d_features: - bp_partners: 3 # Unspecified, pair, loop - atom_1d_features: - ref_atom_name_chars: 256 - ref_element: 128 - ref_charge: 1 - ref_mask: 1 - ref_is_motif_atom_with_fixed_coord: 1 - ref_is_motif_atom_unindexed: 1 - has_zero_occupancy: 1 - ref_pos: 3 - - # Guided features - ref_atomwise_rasa: 3 - active_donor: 1 - active_acceptor: 1 - is_atom_level_hotspot: 1 - diffusion_module: - n_recycle: 2 - use_local_token_attention: True - diffusion_transformer: - n_local_tokens: 32 - n_keys: 128 - - inference_sampler: - num_timesteps: 100 - - -datasets: - diffusion_batch_size_train: 16 - crop_size: 256 - max_atoms_in_crop: 2560 # ~10x crop size. - global_transform_args: - meta_conditioning_probabilities: - p_is_nucleic_ss_example: 1.0 - p_nucleic_ss_show_partial_feats: 0.7 - p_canonical_bp_filter: 0.2 - calculate_NA_SS: 0.3 - - association_scheme: atom23 - #add_na_pair_features: true - train_conditions: - unconditional: - frequency: 2.0 - island: - frequency: 2.0 - sequence_design: - frequency: 0.5 - tipatom: - frequency: 5.0 - ppi: - frequency: 0.0 - train: - # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. - pdb: - # probability: 0.5 - probability: 0.75 - # probability: 0.0 - rna_monomer_distillation: - # probability: 0.2 - probability: 0.25 - # probability: 1.0 - - val: - pseudoknot: - dataset: - # eval_every_n: 10 - eval_every_n: 5 - -trainer: - #devices_per_node: 1 - #limit_train_batches: 10 - #limit_val_batches: 1 - validate_every_n_epochs: 5 - prevalidate: true diff --git a/models/rfd3/configs/experiment/rfd3na.yaml b/models/rfd3/configs/experiment/rfd3na.yaml index 6d807209..32e43827 100644 --- a/models/rfd3/configs/experiment/rfd3na.yaml +++ b/models/rfd3/configs/experiment/rfd3na.yaml @@ -2,14 +2,13 @@ # Training configuration for RFD3 defaults: - - /debug/default + #- /debug/default - override /model: rfd3_base - #- override /datasets: all - - override /logger: csv - #- override /logger: wandb + - override /logger: wandb + - override /datasets: design_base_rfd3na - _self_ -name: train-base +name: rfd3na_scratch tags: [print-model] ckpt_path: null @@ -22,6 +21,8 @@ model: is_dna_token: 1 is_rna_token: 1 is_protein_token: 1 + token_2d_features: + bp_partners: 3 # Unspecified, pair, loop atom_1d_features: ref_atom_name_chars: 256 ref_element: 128 @@ -53,7 +54,14 @@ datasets: crop_size: 256 max_atoms_in_crop: 2560 # ~10x crop size. global_transform_args: + meta_conditioning_probabilities: + p_is_nucleic_ss_example: 0.25 + p_nucleic_ss_show_partial_feats: 0.7 + p_canonical_bp_filter: 0.2 + #calculate_NA_SS: 0.3 + association_scheme: atom23 + #add_na_pair_features: true train_conditions: unconditional: frequency: 2.0 @@ -67,16 +75,22 @@ datasets: frequency: 0.0 train: # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. - #pdb: - #probability: 0.10 - #monomer_distillation: - #probability: 0.90 pdb: - probability: 1.0 + probability: 0.5 + rna_monomer_distillation: + probability: 0.3 + monomer_distillation: + probability: 0.2 + + val: + pseudoknot: + dataset: + # eval_every_n: 10 + eval_every_n: 5 trainer: - devices_per_node: 1 - limit_train_batches: 10 - limit_val_batches: 1 + #devices_per_node: 1 + #limit_train_batches: 10 + #limit_val_batches: 1 validate_every_n_epochs: 5 - prevalidate: false + prevalidate: true diff --git a/models/rfd3/configs/trainer/metrics/design_metrics.yaml b/models/rfd3/configs/trainer/metrics/design_metrics.yaml index b73bd840..c0bde00d 100644 --- a/models/rfd3/configs/trainer/metrics/design_metrics.yaml +++ b/models/rfd3/configs/trainer/metrics/design_metrics.yaml @@ -29,3 +29,7 @@ nucleic_ss_similarity: annotation_NA_only: False annotation_planar_only: True +rna_aptamer_contacts: + _target_: rfd3.metrics.rna_aptamer_metrics.LigandContactMetrics + restrict_to_nucleic: True + diff --git a/models/rfd3/src/rfd3/metrics/rna_aptamer_metrics.py b/models/rfd3/src/rfd3/metrics/rna_aptamer_metrics.py new file mode 100644 index 00000000..c4071ca3 --- /dev/null +++ b/models/rfd3/src/rfd3/metrics/rna_aptamer_metrics.py @@ -0,0 +1,109 @@ +import logging + + +from foundry.metrics.metric import Metric +from foundry.utils.ddp import RankedLogger + +logging.basicConfig(level=logging.INFO) +global_logger = RankedLogger(__name__, rank_zero_only=False) + + +import numpy as np + + +def calculate_ligand_contacts( + atom_array_stack, + cutoff_distance=4.0, +): + """ + Count number of atom contacts within cutoff of any ligand atom. + + Parameters + ---------- + atom_array_stack : AtomArrayStack + Shape: (n_models, n_atoms) + cutoff_distance : float + Distance cutoff in Å + + Returns + ------- + total_contacts : int + mean_contacts_per_model : float + """ + + cutoff_sq = cutoff_distance ** 2 + contacts_per_model = [] + + n_models = len(atom_array_stack) + + for i in range(n_models): + + atoms = atom_array_stack[i] + + coords = atoms.coord + hetero_mask = atoms.hetero.astype(bool) + + # Skip if no ligand + if not np.any(hetero_mask): + contacts_per_model.append(0) + continue + + ligand_coords = coords[hetero_mask] + non_ligand_coords = coords[~hetero_mask] + + if len(non_ligand_coords) == 0: + contacts_per_model.append(0) + continue + + # Pairwise squared distances + diff = non_ligand_coords[:, None, :] - ligand_coords[None, :, :] + dist_sq = np.sum(diff ** 2, axis=-1) + + # Any ligand within cutoff + contact_mask = np.any(dist_sq < cutoff_sq, axis=1) + + n_contacts = np.sum(contact_mask) + contacts_per_model.append(n_contacts) + + contacts_per_model = np.array(contacts_per_model) + + return int(np.sum(contacts_per_model)), float(np.mean(contacts_per_model)), float(np.mean(contacts_per_model))/hetero_mask.sum() + + +class LigandContactMetrics(Metric): + def __init__( + self, + *, + cutoff_distance: float = 4.0, + restrict_to_nucleic: bool = True, + ): + super().__init__() + self.cutoff_distance = cutoff_distance + self.restrict_to_nucleic = restrict_to_nucleic + + @property + def kwargs_to_compute_args(self): + return { + "predicted_atom_array_stack": ("predicted_atom_array_stack",), + } + + def compute(self, *, predicted_atom_array_stack): + if self.restrict_to_nucleic: + if (predicted_atom_array_stack[0].is_rna.sum() + predicted_atom_array_stack[0].is_dna.sum()== 0): + return {} + try: + total_contacts, mean_contacts, mean_contacts_per_atom = calculate_ligand_contacts( + atom_array_stack=predicted_atom_array_stack, + cutoff_distance=self.cutoff_distance, + ) + except Exception as e: + global_logger.error( + f"Error calculating ligand contact metrics: {e} | Skipping" + ) + return {} + + return { + "mean_ligand_contacts_per_model": float(mean_contacts), + "mean_ligand_contacts_per_atom": float(mean_contacts_per_atom), + } + From bcaa6b79a8beb1dd91a8418c72bf3b3a7c4e59b8 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Wed, 18 Feb 2026 12:59:23 -0800 Subject: [PATCH 25/49] run time fixes; inference fix for readout seq from struct --- models/rfd3/src/rfd3/trainer/trainer_utils.py | 12 +- .../src/rfd3/transforms/design_transforms.py | 1 - .../rfd3/src/rfd3/transforms/hbonds_hbplus.py | 2 + .../rfd3/src/rfd3/transforms/na_geom_utils.py | 220 ++++++++++-------- 4 files changed, 129 insertions(+), 106 deletions(-) diff --git a/models/rfd3/src/rfd3/trainer/trainer_utils.py b/models/rfd3/src/rfd3/trainer/trainer_utils.py index 80d1f878..652665ad 100644 --- a/models/rfd3/src/rfd3/trainer/trainer_utils.py +++ b/models/rfd3/src/rfd3/trainer/trainer_utils.py @@ -25,6 +25,7 @@ from foundry.common import exists from foundry.utils.ddp import RankedLogger +from atomworks.constants import STANDARD_DNA, STANDARD_RNA global_logger = RankedLogger(__name__, rank_zero_only=False) @@ -221,11 +222,15 @@ def _readout_seq_from_struc( # There might be a better way to do this. CA_coord = cur_res_atom_array.coord[cur_res_atom_array.atom_name == "CA"] CB_coord = cur_res_atom_array.coord[cur_res_atom_array.atom_name == "CB"] - if np.linalg.norm(CA_coord - CB_coord) < threshold: + + if cur_res_atom_array.is_dna[0] or cur_res_atom_array.is_rna[0]: + cur_central_atom = "C1'" + elif np.linalg.norm(CA_coord - CB_coord) < threshold: cur_central_atom = "CA" else: cur_central_atom = central_atom + central_mask = cur_res_atom_array.atom_name == cur_central_atom # ... Calculate the distance to the central atom @@ -258,8 +263,12 @@ def _readout_seq_from_struc( ATOM_NAMES = ATOM14_ATOM_NAMES if restype in STANDARD_DNA: ATOM_NAMES = ATOM23_ATOM_NAMES_DNA + if not cur_res_atom_array.is_dna[0]: + continue if restype in STANDARD_RNA: ATOM_NAMES = ATOM23_ATOM_NAMES_RNA + if not cur_res_atom_array.is_rna[0]: + continue atom_name_idx_in_atom14_scheme = np.array( [ @@ -269,7 +278,6 @@ def _readout_seq_from_struc( ) # five backbone atoms + some virtual atoms, returning e.g. [0, 1, 2, 3, 4, 11, 7] atom14_scheme_mask = np.zeros_like(ATOM_NAMES, dtype=bool) atom14_scheme_mask[atom_name_idx_in_atom14_scheme] = True - # ... Find the matched restype by checking if all the non-None posititons and None positions match # This is designed to keep virtual atoms and doesn't assign the atom names for now, which will be handled later. if all(x is not None for x in atom_names[atom14_scheme_mask]) and all( diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index c1193a30..04f1500d 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -870,7 +870,6 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: return data for feature_name, n_dims in self.token_2d_features.items(): data = self.generate_token_feature(feature_name, n_dims, data) - return data diff --git a/models/rfd3/src/rfd3/transforms/hbonds_hbplus.py b/models/rfd3/src/rfd3/transforms/hbonds_hbplus.py index 58e855cf..f49dcdb8 100644 --- a/models/rfd3/src/rfd3/transforms/hbonds_hbplus.py +++ b/models/rfd3/src/rfd3/transforms/hbonds_hbplus.py @@ -248,3 +248,5 @@ def subsample_one_hot_np(array, fraction): new_array[i, j] = 1 return new_array + + diff --git a/models/rfd3/src/rfd3/transforms/na_geom_utils.py b/models/rfd3/src/rfd3/transforms/na_geom_utils.py index 23292a87..5a055779 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom_utils.py +++ b/models/rfd3/src/rfd3/transforms/na_geom_utils.py @@ -32,7 +32,7 @@ ATOM_REGION_BY_RESI, PLANAR_ATOMS_BY_RESI, ) - +import tempfile # Derived: True when the residue has any planar sidechain atoms HAS_PLANAR_SC = {res: bool(atoms) for res, atoms in PLANAR_ATOMS_BY_RESI.items()} @@ -132,110 +132,124 @@ def calculate_hb_counts( np.ndarray of shape ``(I, I, 3)`` (int32) where the last axis encodes: 0 = BB–BB, 1 = BB–SC, 2 = SC–SC H-bond counts. """ + hbplus_exe = os.environ.get("HBPLUS_PATH") - dtstr = datetime.now().strftime("%Y%m%d%H%M%S") - pdb_path = f"{dtstr}_{np.random.randint(10000)}.pdb" - - atom_array, nan_mask, chain_map = save_atomarray_to_pdb(atom_array, pdb_path) - subprocess.call( - [ - "/projects/ml/hbplus", - "-h", - str(cutoff_HA_dist), - "-d", - str(cutoff_DA_dist), - pdb_path, - pdb_path, - ], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - ) - - - num_resis_total = len(token_level_data["token_id_list"]) - - hbond_count = np.zeros((num_resis_total, num_resis_total, 3), dtype=np.int32) - - hb2_path = pdb_path.replace("pdb", "hb2") - with open(hb2_path, "r") as hb2_f: - for i, line in enumerate(hb2_f): - if i < 8: - continue - if len(line) < 28: - continue - - d_chain_iid = chain_map[line[0]] - d_resi = int(line[1:5].strip()) - d_resn = line[6:9].strip() - d_atom_name = line[9:13].strip() - - # Initialize donor/acceptor sidechain/backbone flags: - # then replace with True if valid for summation - d_is_sc = False - d_is_bb = False - a_is_sc = False - a_is_bb = False - - d_mask = ( - (atom_array.atom_name == d_atom_name) - & (atom_array.res_name == d_resn) - & (atom_array.res_id == d_resi) - & (atom_array.chain_iid == d_chain_iid) - ) - # d_atm = atom_array[d_mask] - # d_idx = d_atm.token_id - d_idx = token_level_data["resi2index"].get(f"{d_chain_iid}__{d_resi}", None) - if d_idx is None: - continue - - # Handle standard polymer residues for donor atom: - if d_resn in ATOM_REGION_BY_RESI.keys(): - d_is_sc = (d_atom_name in ATOM_REGION_BY_RESI[d_resn]['sc']) - d_is_bb = (d_atom_name in ATOM_REGION_BY_RESI[d_resn]['bb']) - else: - # If non-polymer, define any ligand HBonding atom as backbone: - if d_mask.sum() > 0: - d_is_bb = atom_array[d_mask][0].is_ligand - - a_chain_iid = chain_map[line[14]] - a_resi = int(line[15:19].strip()) - a_resn = line[20:23].strip() - a_atom_name = line[23:27].strip() - - a_mask = ( - (atom_array.atom_name == a_atom_name) - & (atom_array.res_name == a_resn) - & (atom_array.res_id == a_resi) - & (atom_array.chain_iid == a_chain_iid) - ) - a_idx = token_level_data["resi2index"].get(f"{a_chain_iid}__{a_resi}", None) - if a_idx is None: - continue - - # Handle standard polymer residues for acceptor atom: - if a_resn in ATOM_REGION_BY_RESI.keys(): - a_is_sc = (a_atom_name in ATOM_REGION_BY_RESI[a_resn]['sc']) - a_is_bb = (a_atom_name in ATOM_REGION_BY_RESI[a_resn]['bb']) - else: - # If non-polymer, define any ligand HBonding atom as backbone: - if a_mask.sum() > 0: - a_is_bb = atom_array[a_mask][0].is_ligand - - # 0 -> both backbone (BB-BB) - hbond_count[a_idx, d_idx, 0] += (a_is_bb * d_is_bb) - hbond_count[d_idx, a_idx, 0] += (d_is_bb * a_is_bb) - - # 1 -> one backbone, one sidechain (BB-SC) - hbond_count[a_idx, d_idx, 1] += (a_is_bb * d_is_sc) | (a_is_sc * d_is_bb) - hbond_count[d_idx, a_idx, 1] += (d_is_bb * a_is_sc) | (d_is_sc * a_is_bb) - - # 2 -> both sidechain (SC-SC) - hbond_count[a_idx, d_idx, 2] += (a_is_sc * d_is_sc) - hbond_count[d_idx, a_idx, 2] += (d_is_sc * a_is_sc) - - os.remove(pdb_path) - os.remove(hb2_path) + if hbplus_exe is None or hbplus_exe == "": + raise ValueError( + "HBPLUS_PATH environment variable not set. " + "Please set it to the path of the hbplus executable in order to calculate hydrogen bonds." + ) + with tempfile.TemporaryDirectory() as tmpdir: + dtstr = datetime.now().strftime("%Y%m%d%H%M%S") + pdb_filename = f"{dtstr}_{np.random.randint(10000)}.pdb" + pdb_path = os.path.join(tmpdir, pdb_filename) + atom_array, nan_mask, chain_map = save_atomarray_to_pdb(atom_array, pdb_path) + + subprocess.call( + [ + hbplus_exe, + "-h", + str(cutoff_HA_dist), + "-d", + str(cutoff_DA_dist), + pdb_path, + pdb_path, + ], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + cwd=tmpdir, + ) + num_resis_total = len(token_level_data["token_id_list"]) + + hbond_count = np.zeros((num_resis_total, num_resis_total, 3), dtype=np.int32) + + hb2_path = pdb_path.replace("pdb", "hb2") + if not os.path.exists(hb2_path): + print("WARNING: HB2 file could not be found; skipping NA SS metric") + return hbond_count + with open(hb2_path, "r") as hb2_f: + for i, line in enumerate(hb2_f): + if i < 8: + continue + if len(line) < 28: + continue + + d_chain_iid = chain_map[line[0]] + d_resi = int(line[1:5].strip()) + d_resn = line[6:9].strip() + d_atom_name = line[9:13].strip() + + # Initialize donor/acceptor sidechain/backbone flags: + # then replace with True if valid for summation + d_is_sc = False + d_is_bb = False + a_is_sc = False + a_is_bb = False + + d_mask = ( + (atom_array.atom_name == d_atom_name) + & (atom_array.res_name == d_resn) + & (atom_array.res_id == d_resi) + & (atom_array.chain_iid == d_chain_iid) + ) + # d_atm = atom_array[d_mask] + # d_idx = d_atm.token_id + d_idx = token_level_data["resi2index"].get(f"{d_chain_iid}__{d_resi}", None) + if d_idx is None: + continue + + # Handle standard polymer residues for donor atom: + if d_resn in ATOM_REGION_BY_RESI.keys(): + d_is_sc = (d_atom_name in ATOM_REGION_BY_RESI[d_resn]['sc']) + d_is_bb = (d_atom_name in ATOM_REGION_BY_RESI[d_resn]['bb']) + else: + # If non-polymer, define any ligand HBonding atom as backbone: + if d_mask.sum() > 0: + d_is_bb = atom_array[d_mask][0].is_ligand + + a_chain_iid = chain_map[line[14]] + a_resi = int(line[15:19].strip()) + a_resn = line[20:23].strip() + a_atom_name = line[23:27].strip() + + a_mask = ( + (atom_array.atom_name == a_atom_name) + & (atom_array.res_name == a_resn) + & (atom_array.res_id == a_resi) + & (atom_array.chain_iid == a_chain_iid) + ) + a_idx = token_level_data["resi2index"].get(f"{a_chain_iid}__{a_resi}", None) + if a_idx is None: + continue + + # Handle standard polymer residues for acceptor atom: + if a_resn in ATOM_REGION_BY_RESI.keys(): + a_is_sc = (a_atom_name in ATOM_REGION_BY_RESI[a_resn]['sc']) + a_is_bb = (a_atom_name in ATOM_REGION_BY_RESI[a_resn]['bb']) + else: + # If non-polymer, define any ligand HBonding atom as backbone: + if a_mask.sum() > 0: + a_is_bb = atom_array[a_mask][0].is_ligand + + # 0 -> both backbone (BB-BB) + hbond_count[a_idx, d_idx, 0] += (a_is_bb * d_is_bb) + hbond_count[d_idx, a_idx, 0] += (d_is_bb * a_is_bb) + + # 1 -> one backbone, one sidechain (BB-SC) + hbond_count[a_idx, d_idx, 1] += (a_is_bb * d_is_sc) | (a_is_sc * d_is_bb) + hbond_count[d_idx, a_idx, 1] += (d_is_bb * a_is_sc) | (d_is_sc * a_is_bb) + + # 2 -> both sidechain (SC-SC) + hbond_count[a_idx, d_idx, 2] += (a_is_sc * d_is_sc) + hbond_count[d_idx, a_idx, 2] += (d_is_sc * a_is_sc) + ''' + try: + os.remove(pdb_path) + os.remove(hb2_path) + except: + print("temp pdb/hb already removed or not created to begin with") + ''' return hbond_count From c8d1e6be1033e449cbbd1373f7c516c07b63b892 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Wed, 18 Feb 2026 17:47:44 -0800 Subject: [PATCH 26/49] time to fix ss metric line 242 --- .../rfd3/configs/datasets/val/pseudoknot.yaml | 4 +- models/rfd3/configs/experiment/rfd3na.yaml | 13 ++- .../configs/experiment/rfd3na_fine_tune.yaml | 96 +++++++++++++++++++ .../configs/experiment/rfd3na_no_distill.yaml | 96 +++++++++++++++++++ models/rfd3/configs/experiment/rfd3na_rm.yaml | 90 +++++++++++++++++ .../src/rfd3/metrics/nucleic_ss_metrics.py | 6 +- models/rfd3/src/rfd3/trainer/trainer_utils.py | 1 - 7 files changed, 297 insertions(+), 9 deletions(-) create mode 100644 models/rfd3/configs/experiment/rfd3na_fine_tune.yaml create mode 100644 models/rfd3/configs/experiment/rfd3na_no_distill.yaml create mode 100644 models/rfd3/configs/experiment/rfd3na_rm.yaml diff --git a/models/rfd3/configs/datasets/val/pseudoknot.yaml b/models/rfd3/configs/datasets/val/pseudoknot.yaml index 895e6c21..d3fa6f7e 100644 --- a/models/rfd3/configs/datasets/val/pseudoknot.yaml +++ b/models/rfd3/configs/datasets/val/pseudoknot.yaml @@ -6,5 +6,5 @@ defaults: dataset: name: pseudoknot eval_every_n: 1 - # data: ${paths.data.design_benchmark_data_dir}/pseudoknot_debug.json - data: ${paths.data.design_benchmark_data_dir}/pseudoknot.json + data: ${paths.data.design_benchmark_data_dir}/pseudoknot_debug.json + #data: ${paths.data.design_benchmark_data_dir}/pseudoknot.json diff --git a/models/rfd3/configs/experiment/rfd3na.yaml b/models/rfd3/configs/experiment/rfd3na.yaml index 32e43827..e1194be6 100644 --- a/models/rfd3/configs/experiment/rfd3na.yaml +++ b/models/rfd3/configs/experiment/rfd3na.yaml @@ -2,15 +2,18 @@ # Training configuration for RFD3 defaults: - #- /debug/default + - /debug/default - override /model: rfd3_base - - override /logger: wandb + #- override /logger: wandb - override /datasets: design_base_rfd3na - _self_ -name: rfd3na_scratch +name: rfd3na_scratch_clean_test tags: [print-model] -ckpt_path: null + +#ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na-fine-tune/2026-02-17_15-21_JOB_3608285/ckpt/epoch-0590.ckpt +#ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na_scratch/2026-02-17_17-56_JOB_3620867/ckpt/epoch-0030.ckpt + model: net: @@ -55,7 +58,7 @@ datasets: max_atoms_in_crop: 2560 # ~10x crop size. global_transform_args: meta_conditioning_probabilities: - p_is_nucleic_ss_example: 0.25 + p_is_nucleic_ss_example: 1.0 p_nucleic_ss_show_partial_feats: 0.7 p_canonical_bp_filter: 0.2 #calculate_NA_SS: 0.3 diff --git a/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml b/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml new file mode 100644 index 00000000..e7310633 --- /dev/null +++ b/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml @@ -0,0 +1,96 @@ +# @package _global_ +# Training configuration for RFD3 + +defaults: + #- /debug/default + - override /model: rfd3_base + - override /logger: wandb + - override /datasets: design_base_rfd3na + - _self_ + +name: rfd3na-fine-tune +tags: [print-model] +ckpt_path: /projects/ml/aa_design/models/rfd3_latest_foundry.ckpt + +model: + net: + token_initializer: + token_1d_features: + ref_motif_token_type: 3 + restype: 32 + is_dna_token: 1 + is_rna_token: 1 + is_protein_token: 1 + token_2d_features: + bp_partners: 3 # Unspecified, pair, loop + atom_1d_features: + ref_atom_name_chars: 256 + ref_element: 128 + ref_charge: 1 + ref_mask: 1 + ref_is_motif_atom_with_fixed_coord: 1 + ref_is_motif_atom_unindexed: 1 + has_zero_occupancy: 1 + ref_pos: 3 + + # Guided features + ref_atomwise_rasa: 3 + active_donor: 1 + active_acceptor: 1 + is_atom_level_hotspot: 1 + diffusion_module: + n_recycle: 2 + use_local_token_attention: True + diffusion_transformer: + n_local_tokens: 32 + n_keys: 128 + + inference_sampler: + num_timesteps: 100 + + +datasets: + diffusion_batch_size_train: 16 + crop_size: 256 + max_atoms_in_crop: 2560 # ~10x crop size. + global_transform_args: + meta_conditioning_probabilities: + p_is_nucleic_ss_example: 0.25 + p_nucleic_ss_show_partial_feats: 0.7 + p_canonical_bp_filter: 0.2 + #calculate_NA_SS: 0.3 + + association_scheme: atom23 + #add_na_pair_features: true + train_conditions: + unconditional: + frequency: 2.0 + island: + frequency: 2.0 + sequence_design: + frequency: 0.5 + tipatom: + frequency: 5.0 + ppi: + frequency: 0.0 + train: + # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. + pdb: + probability: 0.5 + rna_monomer_distillation: + probability: 0.3 + monomer_distillation: + probability: 0.2 + + val: + pseudoknot: + dataset: + # eval_every_n: 10 + eval_every_n: 5 + +trainer: + #devices_per_node: 1 + #limit_train_batches: 10 + #limit_val_batches: 1 + validate_every_n_epochs: 5 + prevalidate: true diff --git a/models/rfd3/configs/experiment/rfd3na_no_distill.yaml b/models/rfd3/configs/experiment/rfd3na_no_distill.yaml new file mode 100644 index 00000000..e3642cce --- /dev/null +++ b/models/rfd3/configs/experiment/rfd3na_no_distill.yaml @@ -0,0 +1,96 @@ +# @package _global_ +# Training configuration for RFD3 + +defaults: + #- /debug/default + - override /model: rfd3_base + - override /logger: wandb + - override /datasets: design_base_rfd3na + - _self_ + +name: rfd3na_no_distill +tags: [print-model] +ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na_no_distill/2026-02-17_15-21_JOB_3608348/ckpt/epoch-0020.ckpt + +model: + net: + token_initializer: + token_1d_features: + ref_motif_token_type: 3 + restype: 32 + is_dna_token: 1 + is_rna_token: 1 + is_protein_token: 1 + token_2d_features: + bp_partners: 3 # Unspecified, pair, loop + atom_1d_features: + ref_atom_name_chars: 256 + ref_element: 128 + ref_charge: 1 + ref_mask: 1 + ref_is_motif_atom_with_fixed_coord: 1 + ref_is_motif_atom_unindexed: 1 + has_zero_occupancy: 1 + ref_pos: 3 + + # Guided features + ref_atomwise_rasa: 3 + active_donor: 1 + active_acceptor: 1 + is_atom_level_hotspot: 1 + diffusion_module: + n_recycle: 2 + use_local_token_attention: True + diffusion_transformer: + n_local_tokens: 32 + n_keys: 128 + + inference_sampler: + num_timesteps: 100 + + +datasets: + diffusion_batch_size_train: 16 + crop_size: 256 + max_atoms_in_crop: 2560 # ~10x crop size. + global_transform_args: + meta_conditioning_probabilities: + p_is_nucleic_ss_example: 0.25 + p_nucleic_ss_show_partial_feats: 0.7 + p_canonical_bp_filter: 0.2 + #calculate_NA_SS: 0.3 + + association_scheme: atom23 + #add_na_pair_features: true + train_conditions: + unconditional: + frequency: 2.0 + island: + frequency: 2.0 + sequence_design: + frequency: 0.5 + tipatom: + frequency: 5.0 + ppi: + frequency: 0.0 + train: + # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. + pdb: + probability: 0.6 + rna_monomer_distillation: + probability: 0.4 + monomer_distillation: + probability: 0.0 + + val: + pseudoknot: + dataset: + # eval_every_n: 10 + eval_every_n: 5 + +trainer: + #devices_per_node: 1 + #limit_train_batches: 10 + #limit_val_batches: 1 + validate_every_n_epochs: 5 + prevalidate: true diff --git a/models/rfd3/configs/experiment/rfd3na_rm.yaml b/models/rfd3/configs/experiment/rfd3na_rm.yaml new file mode 100644 index 00000000..1596cb12 --- /dev/null +++ b/models/rfd3/configs/experiment/rfd3na_rm.yaml @@ -0,0 +1,90 @@ +# @package _global_ +# Training configuration for RFD3 + +defaults: + #- /debug/default + - override /model: rfd3_base + - override /logger: wandb + - override /datasets: design_base_rfd3na + - _self_ + +name: rfd3na +tags: [print-model] +ckpt_path: null + +model: + net: + token_initializer: + token_1d_features: + ref_motif_token_type: 3 + restype: 32 + is_dna_token: 1 + is_rna_token: 1 + is_protein_token: 1 + #token_2d_features: + #bp_partners: 3 # Unspecified, pair, loop + atom_1d_features: + ref_atom_name_chars: 256 + ref_element: 128 + ref_charge: 1 + ref_mask: 1 + ref_is_motif_atom_with_fixed_coord: 1 + ref_is_motif_atom_unindexed: 1 + has_zero_occupancy: 1 + ref_pos: 3 + + # Guided features + ref_atomwise_rasa: 3 + active_donor: 1 + active_acceptor: 1 + is_atom_level_hotspot: 1 + diffusion_module: + n_recycle: 2 + use_local_token_attention: True + diffusion_transformer: + n_local_tokens: 32 + n_keys: 128 + + inference_sampler: + num_timesteps: 100 + + +datasets: + diffusion_batch_size_train: 16 + crop_size: 256 + max_atoms_in_crop: 2560 # ~10x crop size. + global_transform_args: + meta_conditioning_probabilities: + calculate_NA_SS: 0.0 + association_scheme: atom23 + #add_na_pair_features: true + train_conditions: + unconditional: + frequency: 2.0 + island: + frequency: 2.0 + sequence_design: + frequency: 0.5 + tipatom: + frequency: 5.0 + ppi: + frequency: 0.0 + train: + # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. + pdb: + probability: 0.5 + rna_monomer_distillation: + probability: 0.5 + + val: + pseudoknot: + dataset: + # eval_every_n: 10 + eval_every_n: 5 + +trainer: + #devices_per_node: 1 + #limit_train_batches: 10 + limit_val_batches: 1 + validate_every_n_epochs: 5 + prevalidate: false diff --git a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py index 62d077f5..cc7633e1 100644 --- a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py +++ b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py @@ -12,6 +12,8 @@ from foundry.metrics.metric import Metric from foundry.utils.ddp import RankedLogger +from rfd3.trainer.trainer_utils import _readout_seq_from_struc, _cleanup_virtual_atoms_and_assign_atom_name_elements + logging.basicConfig(level=logging.INFO) global_logger = RankedLogger(__name__, rank_zero_only=False) @@ -228,6 +230,8 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): # prediction can inherit it, yielding artificially perfect scores. # Optionally recompute bp_partners from the *predicted coordinates*. if self.annotate_predicted_fresh: + #pred_arr = _cleanup_virtual_atoms_and_assign_atom_name_elements(pred_arr, association_scheme = "atom23") + pred_arr = _readout_seq_from_struc(pred_arr, central_atom="C1'", threshold=0.5, association_scheme = "atom23") annotate_na_ss( pred_arr, NA_only=self.annotation_NA_only, @@ -235,7 +239,7 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): overwrite=True, p_canonical_bp_filter=0.0, ) - + import pdb; pdb.set_trace()#TODO pred_categories = pred_arr.get_annotation_categories() if "bp_partners" not in pred_categories: continue diff --git a/models/rfd3/src/rfd3/trainer/trainer_utils.py b/models/rfd3/src/rfd3/trainer/trainer_utils.py index 652665ad..436d80e5 100644 --- a/models/rfd3/src/rfd3/trainer/trainer_utils.py +++ b/models/rfd3/src/rfd3/trainer/trainer_utils.py @@ -152,7 +152,6 @@ def _cleanup_virtual_atoms_and_assign_atom_name_elements( is_seq_known = all( np.array(res_array.is_motif_atom_with_fixed_seq, dtype=bool) ) or all(np.array(res_array.is_motif_atom_unindexed, dtype=bool)) - # ... If sequence is known for the original atom array, just skip if is_seq_known: ret_mask += [True] * len(res_array) From 3578002956a6baf78fe799f29e2d2da8d1b85f78 Mon Sep 17 00:00:00 2001 From: afavor Date: Wed, 18 Feb 2026 21:53:29 -0800 Subject: [PATCH 27/49] fixed na ss metric calculation --- models/rfd3/configs/experiment/rfd3na_af.yaml | 99 +++++++++++++++++++ .../src/rfd3/metrics/nucleic_ss_metrics.py | 30 +++++- 2 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 models/rfd3/configs/experiment/rfd3na_af.yaml diff --git a/models/rfd3/configs/experiment/rfd3na_af.yaml b/models/rfd3/configs/experiment/rfd3na_af.yaml new file mode 100644 index 00000000..e9331b7a --- /dev/null +++ b/models/rfd3/configs/experiment/rfd3na_af.yaml @@ -0,0 +1,99 @@ +# @package _global_ +# Training configuration for RFD3 + +defaults: + - /debug/default + - override /model: rfd3_base + # - override /logger: wandb + - override /datasets: design_base_rfd3na + - _self_ + +name: rfd3na-fine-tune +tags: [print-model] +ckpt_path: /projects/ml/aa_design/models/rfd3_latest_foundry.ckpt + +model: + net: + token_initializer: + token_1d_features: + ref_motif_token_type: 3 + restype: 32 + is_dna_token: 1 + is_rna_token: 1 + is_protein_token: 1 + token_2d_features: + bp_partners: 3 # Unspecified, pair, loop + atom_1d_features: + ref_atom_name_chars: 256 + ref_element: 128 + ref_charge: 1 + ref_mask: 1 + ref_is_motif_atom_with_fixed_coord: 1 + ref_is_motif_atom_unindexed: 1 + has_zero_occupancy: 1 + ref_pos: 3 + + # Guided features + ref_atomwise_rasa: 3 + active_donor: 1 + active_acceptor: 1 + is_atom_level_hotspot: 1 + diffusion_module: + n_recycle: 2 + use_local_token_attention: True + diffusion_transformer: + n_local_tokens: 32 + n_keys: 128 + + inference_sampler: + num_timesteps: 100 + + +datasets: + diffusion_batch_size_train: 16 + crop_size: 256 + max_atoms_in_crop: 2560 # ~10x crop size. + global_transform_args: + meta_conditioning_probabilities: + # p_is_nucleic_ss_example: 0.25 + # p_nucleic_ss_show_partial_feats: 0.7 + # p_canonical_bp_filter: 0.2 + p_is_nucleic_ss_example: 1.0 + p_nucleic_ss_show_partial_feats: 0.0 + p_canonical_bp_filter: 0.0 + #calculate_NA_SS: 0.3 + + association_scheme: atom23 + #add_na_pair_features: true + train_conditions: + unconditional: + frequency: 2.0 + island: + frequency: 2.0 + sequence_design: + frequency: 0.5 + tipatom: + frequency: 5.0 + ppi: + frequency: 0.0 + train: + # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. + pdb: + probability: 0.0 + rna_monomer_distillation: + probability: 1.0 + monomer_distillation: + probability: 0.0 + + val: + pseudoknot: + dataset: + # eval_every_n: 10 + eval_every_n: 5 + +trainer: + #devices_per_node: 1 + #limit_train_batches: 10 + #limit_val_batches: 1 + validate_every_n_epochs: 5 + prevalidate: true diff --git a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py index cc7633e1..345c26b0 100644 --- a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py +++ b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py @@ -230,8 +230,24 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): # prediction can inherit it, yielding artificially perfect scores. # Optionally recompute bp_partners from the *predicted coordinates*. if self.annotate_predicted_fresh: - #pred_arr = _cleanup_virtual_atoms_and_assign_atom_name_elements(pred_arr, association_scheme = "atom23") - pred_arr = _readout_seq_from_struc(pred_arr, central_atom="C1'", threshold=0.5, association_scheme = "atom23") + + # Infer res name from geometry first + pred_arr = _readout_seq_from_struc( + pred_arr, + central_atom="C1'", + threshold=0.5, + association_scheme="atom23", + ) + # strip virtuals and set final atom names/elements + pred_arr = _cleanup_virtual_atoms_and_assign_atom_name_elements( + pred_arr, + association_scheme="atom23", + ) + # clear annotation to avoid potential info leak + if "bp_partners" in pred_arr.get_annotation_categories(): + pred_arr.del_annotation("bp_partners") + + # add nucleic-ss annotations annotate_na_ss( pred_arr, NA_only=self.annotation_NA_only, @@ -239,7 +255,7 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): overwrite=True, p_canonical_bp_filter=0.0, ) - import pdb; pdb.set_trace()#TODO + pred_categories = pred_arr.get_annotation_categories() if "bp_partners" not in pred_categories: continue @@ -304,7 +320,13 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): if n_valid == 0: return {} - + aaa = { + "pair_f1": float(np.mean(pair_f1_list)), + "loop_f1": float(np.mean(loop_f1_list)), + "weighted_f1": float(np.mean(weighted_f1_list)), + "n_valid_samples": int(n_valid), + } + print(aaa) return { "pair_f1": float(np.mean(pair_f1_list)), "loop_f1": float(np.mean(loop_f1_list)), From 3d016cd38965df669d2e64a2b4628f345ad8b0ac Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Wed, 18 Feb 2026 22:51:57 -0800 Subject: [PATCH 28/49] fix atom14 scheme cases --- models/rfd3/src/rfd3/trainer/trainer_utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/models/rfd3/src/rfd3/trainer/trainer_utils.py b/models/rfd3/src/rfd3/trainer/trainer_utils.py index 436d80e5..84b8829c 100644 --- a/models/rfd3/src/rfd3/trainer/trainer_utils.py +++ b/models/rfd3/src/rfd3/trainer/trainer_utils.py @@ -264,10 +264,14 @@ def _readout_seq_from_struc( ATOM_NAMES = ATOM23_ATOM_NAMES_DNA if not cur_res_atom_array.is_dna[0]: continue - if restype in STANDARD_RNA: + elif restype in STANDARD_RNA: ATOM_NAMES = ATOM23_ATOM_NAMES_RNA if not cur_res_atom_array.is_rna[0]: continue + else: + #ATOM_NAMES = ATOM23_ATOM_NAMES_RNA + if not cur_res_atom_array.is_protein[0]: + continue atom_name_idx_in_atom14_scheme = np.array( [ From 84648be95a98af88da0a098c32eceb91aab7449f Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Thu, 19 Feb 2026 00:05:08 -0800 Subject: [PATCH 29/49] fix: permute U in association_schemes_stripped --- models/rfd3/src/rfd3/constants.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index 1e023eda..c7d43c62 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -226,10 +226,7 @@ strip_list = lambda x: [(x.strip() if x is not None else None) for x in x] # noqa -association_schemes_stripped = { - name: {k: strip_list(v) for k, v in scheme.items()} - for name, scheme in association_schemes.items() -} + SELECTION_PROTEIN = ["POLYPEPTIDE(D)", "POLYPEPTIDE(L)"] SELECTION_NONPROTEIN = [ "POLYDEOXYRIBONUCLEOTIDE", From 212082581b1c0df27ea04398b3b3f8adb930e115 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Wed, 18 Feb 2026 17:47:44 -0800 Subject: [PATCH 30/49] time to fix ss metric line 242 --- models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py index 345c26b0..302e6e1e 100644 --- a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py +++ b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py @@ -230,7 +230,6 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): # prediction can inherit it, yielding artificially perfect scores. # Optionally recompute bp_partners from the *predicted coordinates*. if self.annotate_predicted_fresh: - # Infer res name from geometry first pred_arr = _readout_seq_from_struc( pred_arr, @@ -255,7 +254,6 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): overwrite=True, p_canonical_bp_filter=0.0, ) - pred_categories = pred_arr.get_annotation_categories() if "bp_partners" not in pred_categories: continue From d04989f65f6bae4bcb2aaef06568b827dabf0cae Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Thu, 19 Feb 2026 01:59:11 -0800 Subject: [PATCH 31/49] add failsafe for nucleic ss metric --- .../rfd3/configs/datasets/val/pseudoknot.yaml | 4 +-- .../src/rfd3/metrics/nucleic_ss_metrics.py | 30 +++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/models/rfd3/configs/datasets/val/pseudoknot.yaml b/models/rfd3/configs/datasets/val/pseudoknot.yaml index d3fa6f7e..bb312c05 100644 --- a/models/rfd3/configs/datasets/val/pseudoknot.yaml +++ b/models/rfd3/configs/datasets/val/pseudoknot.yaml @@ -6,5 +6,5 @@ defaults: dataset: name: pseudoknot eval_every_n: 1 - data: ${paths.data.design_benchmark_data_dir}/pseudoknot_debug.json - #data: ${paths.data.design_benchmark_data_dir}/pseudoknot.json + #data: ${paths.data.design_benchmark_data_dir}/pseudoknot_debug.json + data: ${paths.data.design_benchmark_data_dir}/pseudoknot.json diff --git a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py index 302e6e1e..f0216390 100644 --- a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py +++ b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py @@ -230,18 +230,24 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): # prediction can inherit it, yielding artificially perfect scores. # Optionally recompute bp_partners from the *predicted coordinates*. if self.annotate_predicted_fresh: - # Infer res name from geometry first - pred_arr = _readout_seq_from_struc( - pred_arr, - central_atom="C1'", - threshold=0.5, - association_scheme="atom23", - ) - # strip virtuals and set final atom names/elements - pred_arr = _cleanup_virtual_atoms_and_assign_atom_name_elements( - pred_arr, - association_scheme="atom23", - ) + try: + # Infer res name from geometry first + pred_arr = _readout_seq_from_struc( + pred_arr, + central_atom="C1'", + threshold=0.5, + association_scheme="atom23", + ) + + # strip virtuals and set final atom names/elements + pred_arr = _cleanup_virtual_atoms_and_assign_atom_name_elements( + pred_arr, + association_scheme="atom23", + ) + except: + # this can fail early in training + print("could not cleanup virtuals for nucleic ss metric compute") + pass # clear annotation to avoid potential info leak if "bp_partners" in pred_arr.get_annotation_categories(): pred_arr.del_annotation("bp_partners") From ad3d95f351fd68aa510bb807995e83146bbe5387 Mon Sep 17 00:00:00 2001 From: afavor Date: Wed, 25 Feb 2026 21:03:30 -0800 Subject: [PATCH 32/49] extra filter for huge base pair centroid distances, and also cleaned inference specification code --- .../rfd3/src/rfd3/transforms/na_geom_utils.py | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/models/rfd3/src/rfd3/transforms/na_geom_utils.py b/models/rfd3/src/rfd3/transforms/na_geom_utils.py index 5a055779..453e3640 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom_utils.py +++ b/models/rfd3/src/rfd3/transforms/na_geom_utils.py @@ -90,7 +90,7 @@ def __init__(self) -> None: self.bp_val_cutoff = 0.5 # minimum basepairing score for binarizing basepairs when needed self.base_geometry_limits = {} - self.base_geometry_limits['D_ij'] = 20.0 + self.base_geometry_limits['D_ij'] = 16.0 self.base_geometry_limits['H_ij'] = 1.5 self.base_geometry_limits['P_ij'] = math.pi/5 self.base_geometry_limits['B_ij'] = math.pi/5 @@ -875,6 +875,7 @@ def _compute_pairwise_geometry( # Rise (H_ij) H_ij = np.sum(sc_D_ij_vec * Z_ij, axis=-1) # [I, I] + D_ij = np.linalg.norm(sc_D_ij_vec, axis=-1) # [I, I] # Buckle (B_ij) proj_Z_i_YZ = ( # [I, I, 3] @@ -903,6 +904,7 @@ def _compute_pairwise_geometry( "H_ij": H_ij, "B_ij": B_ij, "P_ij": P_ij, + "D_ij": D_ij, "base_ori_ij": base_ori_ij, "X_ij": X_ij, "Y_ij": Y_ij, @@ -933,6 +935,7 @@ def _compute_basepair_mask( H_ij: np.ndarray, B_ij: np.ndarray, P_ij: np.ndarray, + D_ij: np.ndarray, mol_info, *, bool_only: bool = False, @@ -985,7 +988,10 @@ def _compute_basepair_mask( (P_ij <= mol_info.base_geometry_limits["P_ij"]) | (P_ij >= math.pi - mol_info.base_geometry_limits["P_ij"]) ) - bp_geom_filter = H_ij_filter & B_ij_filter & P_ij_filter # [I, I] + + D_ij_filter = (D_ij <= mol_info.base_geometry_limits["D_ij"]) + + bp_geom_filter = H_ij_filter & B_ij_filter & P_ij_filter & D_ij_filter # [I, I] if bool_only: basepairs_bool_ij = ( # [I, I] @@ -1074,6 +1080,7 @@ def compute_nucleic_ss( "H_ij": np.zeros((0, 0), dtype=np.float32), "B_ij": np.zeros((0, 0), dtype=np.float32), "P_ij": np.zeros((0, 0), dtype=np.float32), + "D_ij": np.zeros((0, 0), dtype=np.float32), "base_ori_ij": np.zeros((0, 0), dtype=np.float32), "basepairs_bool_ij": np.zeros((0, 0), dtype=bool), "basepairs_ij": np.zeros((0, 0), dtype=np.float32), @@ -1139,6 +1146,7 @@ def compute_nucleic_ss( pw_geom["H_ij"], pw_geom["B_ij"], pw_geom["P_ij"], + pw_geom["D_ij"], mol_info, bool_only=return_basepairs_only, eps=eps, @@ -1498,12 +1506,23 @@ def annotate_na_ss_from_specification( bp_partners_ann = np.empty(len(atom_array), dtype=object) bp_partners_ann[:] = None - # Build chain/res -> token index map for region/position specs + # Build chain/res -> token index map for region/position specs. + # Accept both chain_iid-like keys (e.g. "A_1") and plain chain IDs (e.g. "A") + # so CLI/json specs like "A1,B3" work reliably in inference. chain_iid_list: list[str] = [str(atm.chain_iid) for atm in token_level_array] + chain_id_list: list[str] = [str(atm.chain_id) for atm in token_level_array] resi_list: list[int] = [int(atm.res_id) for atm in token_level_array] - chain_res_to_tok: dict[tuple[str, int], int] = { - (c, r): i for i, (c, r) in enumerate(zip(chain_iid_list, resi_list)) - } + chain_res_to_tok: dict[tuple[str, int], int] = {} + for i, (chain_iid, chain_id, res_id) in enumerate( + zip(chain_iid_list, chain_id_list, resi_list) + ): + key_iid = (chain_iid, int(res_id)) + key_chain = (chain_id, int(res_id)) + chain_res_to_tok.setdefault(key_iid, int(i)) + chain_res_to_tok.setdefault(key_chain, int(i)) + # Also support the short alias from chain_iid (e.g. "A_1" -> "A") + short_chain = chain_iid.split("_", 1)[0] + chain_res_to_tok.setdefault((short_chain, int(res_id)), int(i)) def _parse_region(region_str: str) -> tuple[str, int, int] | None: region_str = str(region_str).strip() From 60b18c281b7c4bada96d66203f74fe153c4334ed Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Thu, 26 Feb 2026 10:41:52 -0800 Subject: [PATCH 33/49] mc: yaml changes --- models/rfd3/configs/experiment/rfd3na.yaml | 13 +++++++------ .../rfd3/configs/experiment/rfd3na_fine_tune.yaml | 11 ++++++----- .../rfd3/configs/experiment/rfd3na_no_distill.yaml | 7 ++++--- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/models/rfd3/configs/experiment/rfd3na.yaml b/models/rfd3/configs/experiment/rfd3na.yaml index e1194be6..8739992e 100644 --- a/models/rfd3/configs/experiment/rfd3na.yaml +++ b/models/rfd3/configs/experiment/rfd3na.yaml @@ -2,17 +2,18 @@ # Training configuration for RFD3 defaults: - - /debug/default + #- /debug/default - override /model: rfd3_base - #- override /logger: wandb + - override /logger: wandb - override /datasets: design_base_rfd3na - _self_ name: rfd3na_scratch_clean_test tags: [print-model] +#ckpt: null #ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na-fine-tune/2026-02-17_15-21_JOB_3608285/ckpt/epoch-0590.ckpt -#ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na_scratch/2026-02-17_17-56_JOB_3620867/ckpt/epoch-0030.ckpt +ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na_scratch_clean_test/2026-02-19_01-58_JOB_3986244/ckpt/epoch-0180.ckpt model: @@ -58,7 +59,7 @@ datasets: max_atoms_in_crop: 2560 # ~10x crop size. global_transform_args: meta_conditioning_probabilities: - p_is_nucleic_ss_example: 1.0 + p_is_nucleic_ss_example: 0.25 p_nucleic_ss_show_partial_feats: 0.7 p_canonical_bp_filter: 0.2 #calculate_NA_SS: 0.3 @@ -79,11 +80,11 @@ datasets: train: # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. pdb: - probability: 0.5 + probability: 0.6 rna_monomer_distillation: probability: 0.3 monomer_distillation: - probability: 0.2 + probability: 0.1 val: pseudoknot: diff --git a/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml b/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml index e7310633..3210c5cb 100644 --- a/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml +++ b/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml @@ -8,9 +8,10 @@ defaults: - override /datasets: design_base_rfd3na - _self_ -name: rfd3na-fine-tune +name: rfd3na-fine-tune-ss0.5 tags: [print-model] -ckpt_path: /projects/ml/aa_design/models/rfd3_latest_foundry.ckpt +#ckpt_path: /projects/ml/aa_design/models/rfd3_latest_foundry.ckpt +ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na-fine-tune-ss0.5/2026-02-23_23-57_JOB_4717793/ckpt/epoch-0820.ckpt model: net: @@ -55,7 +56,7 @@ datasets: max_atoms_in_crop: 2560 # ~10x crop size. global_transform_args: meta_conditioning_probabilities: - p_is_nucleic_ss_example: 0.25 + p_is_nucleic_ss_example: 0.5 p_nucleic_ss_show_partial_feats: 0.7 p_canonical_bp_filter: 0.2 #calculate_NA_SS: 0.3 @@ -76,11 +77,11 @@ datasets: train: # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. pdb: - probability: 0.5 + probability: 0.6 rna_monomer_distillation: probability: 0.3 monomer_distillation: - probability: 0.2 + probability: 0.1 val: pseudoknot: diff --git a/models/rfd3/configs/experiment/rfd3na_no_distill.yaml b/models/rfd3/configs/experiment/rfd3na_no_distill.yaml index e3642cce..abb302b4 100644 --- a/models/rfd3/configs/experiment/rfd3na_no_distill.yaml +++ b/models/rfd3/configs/experiment/rfd3na_no_distill.yaml @@ -10,7 +10,8 @@ defaults: name: rfd3na_no_distill tags: [print-model] -ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na_no_distill/2026-02-17_15-21_JOB_3608348/ckpt/epoch-0020.ckpt +#ckpt_path: null +ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na_no_distill/2026-02-19_02-16_JOB_3988845/ckpt/epoch-0170.ckpt model: net: @@ -76,9 +77,9 @@ datasets: train: # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. pdb: - probability: 0.6 + probability: 0.7 rna_monomer_distillation: - probability: 0.4 + probability: 0.3 monomer_distillation: probability: 0.0 From bfe513ab178307f5ba58c7a0e0ef486d13b34109 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Thu, 26 Feb 2026 12:25:41 -0800 Subject: [PATCH 34/49] refactor ss metric computatino section to be called during inference to write in the json --- .../src/rfd3/metrics/nucleic_ss_metrics.py | 146 +++++++++++------- models/rfd3/src/rfd3/trainer/rfd3.py | 10 ++ 2 files changed, 98 insertions(+), 58 deletions(-) diff --git a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py index f0216390..55bd8cb1 100644 --- a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py +++ b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py @@ -175,6 +175,88 @@ def _extract_loop_and_paired_token_ids( return loop_token_ids, paired_token_ids +def compute_from_two_arr(gt_arr, pred_arr, restrict_to_nucleic=True, compute_for_diffused_region_only = False): + gt_token_ids = _get_token_ids(gt_arr) + pred_token_ids = _get_token_ids(pred_arr) + if len(gt_token_ids) != len(pred_token_ids): + None + + # Restrict to token_ids that are valid in both arrays. + gt_allowed = _get_candidate_token_ids( + gt_arr, + restrict_to_nucleic=restrict_to_nucleic, + compute_for_diffused_region_only=compute_for_diffused_region_only, + ) + pred_allowed = _get_candidate_token_ids( + pred_arr, + restrict_to_nucleic=restrict_to_nucleic, + compute_for_diffused_region_only=compute_for_diffused_region_only, + ) + allowed = gt_allowed & pred_allowed + + if len(allowed) == 0: + return None + + gt_pairs = _extract_bp_pairs(gt_arr, allowed_token_ids=allowed) + pred_pairs = _extract_bp_pairs(pred_arr, allowed_token_ids=allowed) + + gt_loop, gt_paired_tokens = _extract_loop_and_paired_token_ids( + gt_arr, allowed_token_ids=allowed + ) + pred_loop, _pred_paired_tokens = _extract_loop_and_paired_token_ids( + pred_arr, allowed_token_ids=allowed + ) + + pair_tp = len(gt_pairs & pred_pairs) + pair_pred_n = len(pred_pairs) + pair_gt_n = len(gt_pairs) + + loop_tp = len(gt_loop & pred_loop) + loop_pred_n = len(pred_loop) + loop_gt_n = len(gt_loop) + + pair_f1 = _safe_f1_from_sizes(pair_tp, pair_pred_n, pair_gt_n) + loop_f1 = _safe_f1_from_sizes(loop_tp, loop_pred_n, loop_gt_n) + + pair_weight = len(gt_paired_tokens) + loop_weight = len(gt_loop) + total_weight = pair_weight + loop_weight + if total_weight == 0: + weighted_f1 = 1.0 + else: + weighted_f1 = float( + (pair_weight * pair_f1 + loop_weight * loop_f1) / total_weight + ) + + + return pair_f1, loop_f1, weighted_f1 + +def get_NA_SS_F1(pred_array): + + ## save the original bop_partner annotation + gt_array = pred_array.copy() + + ## replace by annotating again + pred_array = annotate_na_ss( + pred_array, + NA_only=True, + planar_only=True, + overwrite=True, + p_canonical_bp_filter=0.0, + ) + + try: + pair_f1, loop_f1, weighted_f1 = compute_from_two_arr(gt_array, pred_array) + except: + # fails when returns None because expects three returns + return {} + + return { + "pair_f1": pair_f1, + "loop_f1": loop_f1, + "weighted_f1": weighted_f1, + } + class NucleicSSSimilarityMetrics(Metric): """Secondary-structure similarity for nucleic acids. @@ -264,59 +346,13 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): if "bp_partners" not in pred_categories: continue - # Basic sanity check: token counts should match for aligned comparisons. - gt_token_ids = _get_token_ids(gt_arr) - pred_token_ids = _get_token_ids(pred_arr) - if len(gt_token_ids) != len(pred_token_ids): - continue - - # Restrict to token_ids that are valid in both arrays. - gt_allowed = _get_candidate_token_ids( - gt_arr, - restrict_to_nucleic=self.restrict_to_nucleic, - compute_for_diffused_region_only=self.compute_for_diffused_region_only, - ) - pred_allowed = _get_candidate_token_ids( - pred_arr, - restrict_to_nucleic=self.restrict_to_nucleic, - compute_for_diffused_region_only=self.compute_for_diffused_region_only, - ) - allowed = gt_allowed & pred_allowed - - if len(allowed) == 0: + # Basic sanity check: token counts should match for aligned comparisons + try: + pair_f1, loop_f1, weighted_f1 = compute_from_two_arr(gt_arr, pred_arr, restrict_to_nucleic=self.restrict_to_nucleic, compute_for_diffused_region_only = self.compute_for_diffused_region_only) + except: + # fails when returns None because expects three returns continue - gt_pairs = _extract_bp_pairs(gt_arr, allowed_token_ids=allowed) - pred_pairs = _extract_bp_pairs(pred_arr, allowed_token_ids=allowed) - - gt_loop, gt_paired_tokens = _extract_loop_and_paired_token_ids( - gt_arr, allowed_token_ids=allowed - ) - pred_loop, _pred_paired_tokens = _extract_loop_and_paired_token_ids( - pred_arr, allowed_token_ids=allowed - ) - - pair_tp = len(gt_pairs & pred_pairs) - pair_pred_n = len(pred_pairs) - pair_gt_n = len(gt_pairs) - - loop_tp = len(gt_loop & pred_loop) - loop_pred_n = len(pred_loop) - loop_gt_n = len(gt_loop) - - pair_f1 = _safe_f1_from_sizes(pair_tp, pair_pred_n, pair_gt_n) - loop_f1 = _safe_f1_from_sizes(loop_tp, loop_pred_n, loop_gt_n) - - pair_weight = len(gt_paired_tokens) - loop_weight = len(gt_loop) - total_weight = pair_weight + loop_weight - if total_weight == 0: - weighted_f1 = 1.0 - else: - weighted_f1 = float( - (pair_weight * pair_f1 + loop_weight * loop_f1) / total_weight - ) - pair_f1_list.append(pair_f1) loop_f1_list.append(loop_f1) weighted_f1_list.append(weighted_f1) @@ -324,13 +360,7 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): if n_valid == 0: return {} - aaa = { - "pair_f1": float(np.mean(pair_f1_list)), - "loop_f1": float(np.mean(loop_f1_list)), - "weighted_f1": float(np.mean(weighted_f1_list)), - "n_valid_samples": int(n_valid), - } - print(aaa) + return { "pair_f1": float(np.mean(pair_f1_list)), "loop_f1": float(np.mean(loop_f1_list)), diff --git a/models/rfd3/src/rfd3/trainer/rfd3.py b/models/rfd3/src/rfd3/trainer/rfd3.py index 9735978e..6701f8d6 100644 --- a/models/rfd3/src/rfd3/trainer/rfd3.py +++ b/models/rfd3/src/rfd3/trainer/rfd3.py @@ -8,6 +8,7 @@ from omegaconf import DictConfig from rfd3.metrics.design_metrics import get_all_backbone_metrics from rfd3.metrics.hbonds_hbplus_metrics import get_hbond_metrics +from rfd3.metrics.nucleic_ss_metrics import get_NA_SS_F1 from rfd3.trainer.recycling import get_recycle_schedule from rfd3.trainer.trainer_utils import ( _build_atom_array_stack, @@ -449,6 +450,15 @@ def _build_predicted_atom_array_stack( ): metadata_dict[i]["metrics"] |= get_hbond_metrics(atom_array) + if ( + "bp_partners" in atom_array.get_annotation_categories() + ): + if not np.all(atom_array.bp_partners == None): + try: + metadata_dict[i]["metrics"] |= get_NA_SS_F1(atom_array) + except: + pass + if "partial_t" in f: # Try calcualte a CA RMSD to input: aa_in = example["atom_array"] From 42680bdf1e84521709031e604e1f6b64f87fb02a Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 27 Feb 2026 15:17:09 -0800 Subject: [PATCH 35/49] cfg for bp_partners feature --- .../rfd3/configs/inference_engine/rfdiffusion3.yaml | 7 ++++--- models/rfd3/src/rfd3/model/cfg_utils.py | 11 ++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/models/rfd3/configs/inference_engine/rfdiffusion3.yaml b/models/rfd3/configs/inference_engine/rfdiffusion3.yaml index c5a6a72b..80dcc37f 100644 --- a/models/rfd3/configs/inference_engine/rfdiffusion3.yaml +++ b/models/rfd3/configs/inference_engine/rfdiffusion3.yaml @@ -25,9 +25,10 @@ inference_sampler: kind: "default" # "default" or "symmetry" to choose the sampler # Classifier-free guidance args: cfg_features: # set to 0 in the reference CFG step - - active_donor - - active_acceptor - - ref_atomwise_rasa + #- active_donor + #- active_acceptor + #- ref_atomwise_rasa + - bp_partners use_classifier_free_guidance: False cfg_t_max: null # max t to apply cfg guidance diff --git a/models/rfd3/src/rfd3/model/cfg_utils.py b/models/rfd3/src/rfd3/model/cfg_utils.py index d99c2fa0..f84ce453 100644 --- a/models/rfd3/src/rfd3/model/cfg_utils.py +++ b/models/rfd3/src/rfd3/model/cfg_utils.py @@ -57,9 +57,14 @@ def strip_f( # set the feature to default value if it is in the cfg_features if k in cfg_features: - v_cropped = torch.zeros_like(v_cropped).to( - v_cropped.device, dtype=v_cropped.dtype - ) + if k not in ["bp_partners"]: + v_cropped = torch.zeros_like(v_cropped).to( + v_cropped.device, dtype=v_cropped.dtype + ) + else: + ## for bp_partners default is a mask feature + v_cropped[:,:,0] = 1 + v_cropped[:,:,1:] = 0 # update the feature in the dictionary f_stripped[k] = v_cropped From 5a73df5c2f9b54001823df57e044ab20251b37d5 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Thu, 19 Mar 2026 12:56:45 -0700 Subject: [PATCH 36/49] unindex fix final for real --- models/rfd3/src/rfd3/trainer/trainer_utils.py | 5 ++++- models/rfd3/src/rfd3/transforms/conditioning_base.py | 1 - .../rfd3/src/rfd3/transforms/training_conditions.py | 12 ++++++------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/models/rfd3/src/rfd3/trainer/trainer_utils.py b/models/rfd3/src/rfd3/trainer/trainer_utils.py index 84b8829c..bf135b20 100644 --- a/models/rfd3/src/rfd3/trainer/trainer_utils.py +++ b/models/rfd3/src/rfd3/trainer/trainer_utils.py @@ -470,8 +470,11 @@ def process_unindexed_outputs( ) else: dist = float(dists[row_ind[join_atom], col_ind[join_atom]]) - + + try: metadata["join_point_rmsd_by_token"][token_pdb_id] = dist + except: + pass metadata["diffused_index_map"][token_pdb_id] = f"{chain_id}{res_id}" diff --git a/models/rfd3/src/rfd3/transforms/conditioning_base.py b/models/rfd3/src/rfd3/transforms/conditioning_base.py index 2bc598f3..65514c52 100644 --- a/models/rfd3/src/rfd3/transforms/conditioning_base.py +++ b/models/rfd3/src/rfd3/transforms/conditioning_base.py @@ -434,7 +434,6 @@ def expand_unindexed_motifs( f"Failed to create uniquely recognised tokens after concatenation.\n" f"Concatenated tokens: {get_token_count(atom_array_full)}, unindexed: {n_unindexed_tokens}" ) - return atom_array_full def create_unindexed_masks( diff --git a/models/rfd3/src/rfd3/transforms/training_conditions.py b/models/rfd3/src/rfd3/transforms/training_conditions.py index 389d0013..f2173397 100644 --- a/models/rfd3/src/rfd3/transforms/training_conditions.py +++ b/models/rfd3/src/rfd3/transforms/training_conditions.py @@ -19,6 +19,8 @@ sample_subgraph_atoms, ) +from rfd3.constants import backbone_atoms_RNA + nx.from_numpy_matrix = nx.from_numpy_array logger = logging.getLogger(__name__) @@ -158,7 +160,9 @@ def sample_motif_atoms(self, atom_array): is_motif_atom = np.asarray(atom_array.is_motif_token, dtype=bool).copy() if random_condition(self.p_diffuse_motif_sidechains): - backbone_atoms = ["N", "C", "CA"] + backbone_atoms = backbone_atoms_RNA.copy() + backbone_atoms.remove("C1'") + backbone_atoms = ["N", "C", "CA"] + backbone_atoms #covers DNA also if random_condition(self.p_include_oxygen_in_backbone_mask): backbone_atoms.append("O") is_motif_atom = is_motif_atom & np.isin( @@ -173,7 +177,6 @@ def sample_motif_atoms(self, atom_array): # We also only want resolved atoms to be motif is_motif_atom = (is_motif_atom) & (atom_array.occupancy > 0.0) - return is_motif_atom def sample(self, data): @@ -202,7 +205,6 @@ def sample(self, data): leak_global_index=data["conditions"]["unindex_leak_global_index"], ), ) - return atom_array @@ -498,10 +500,9 @@ def sample_conditioning_strategy( atom_array.set_annotation( "is_motif_atom_unindexed", sample_unindexed_atoms( - atom_array, p_unindex_motif_tokens=p_unindex_motif_tokens + atom_array, p_unindex_motif_tokens=p_unindex_motif_tokens, association_scheme=association_scheme ), ) - return atom_array @@ -557,7 +558,6 @@ def sample_unindexed_atoms( is_motif_atom_unindexed = atom_array.is_motif_atom.copy() else: is_motif_atom_unindexed = np.zeros(atom_array.array_length(), dtype=bool) - # ensure non-residue atoms are not already flagged if association_scheme == "atom23": is_motif_atom_unindexed = np.logical_and( From fe817ccc7a9e877cf832a675dd3082451fdeb8fe Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 20 Mar 2026 11:15:25 -0700 Subject: [PATCH 37/49] unindex train fix --- models/rfd3/src/rfd3/trainer/trainer_utils.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/models/rfd3/src/rfd3/trainer/trainer_utils.py b/models/rfd3/src/rfd3/trainer/trainer_utils.py index bf135b20..24b05071 100644 --- a/models/rfd3/src/rfd3/trainer/trainer_utils.py +++ b/models/rfd3/src/rfd3/trainer/trainer_utils.py @@ -423,7 +423,11 @@ def process_unindexed_outputs( row_ind, col_ind = linear_sum_assignment(dists) res_id_, chain_id_, _ = indices_to_components_(atom_array_diffused, col_ind) - assert (res_id_ == res_id) & (chain_id_ == chain_id) + try: + assert (res_id_ == res_id) & (chain_id_ == chain_id) + except: + global_logger.warning("Unindexed mapping did not work properly, res_id, chain_id") + inserted_mask = np.logical_or(inserted_mask, token_match) # ... Compute metrics based on the new distances @@ -454,7 +458,7 @@ def process_unindexed_outputs( elif not np.any( np.isin( - token.atom_name, [item.replace(" ", "") for item in backbone_atoms_RNA] + token.atom_name, backbone_atoms_RNA ) ): if np.sum(token.atomize) == 1: From 001709433c51ef92989b6746cf3659f4b25e8eec Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 20 Mar 2026 16:04:16 -0700 Subject: [PATCH 38/49] remove rf3 config which tagegd along --- .../experiment/rf3_run11-with-confidence.yaml | 56 ------------------- 1 file changed, 56 deletions(-) delete mode 100644 models/rf3/configs/experiment/rf3_run11-with-confidence.yaml diff --git a/models/rf3/configs/experiment/rf3_run11-with-confidence.yaml b/models/rf3/configs/experiment/rf3_run11-with-confidence.yaml deleted file mode 100644 index 9738564c..00000000 --- a/models/rf3/configs/experiment/rf3_run11-with-confidence.yaml +++ /dev/null @@ -1,56 +0,0 @@ -# @package _global_ - -name: rf3-with-confidence -project: rf3 - -tags: - # list of tags to add to the run ( & on wandb to easily find & filter runs) - - full - -defaults: - - override /datasets: pdb_only - - override /model: rf3_with_confidence - - override /trainer: rf3_with_confidence - -ckpt_config: - _target_: foundry.utils.weights.CheckpointConfig - path: null - reset_optimizer: true - -model: - lr_scheduler: - base_lr: 0.9e-3 # 1/2 of original learning rate (1.8e-3) - -# load confidence features -# remove within_20_closest_chains from loaders -datasets: - run_confidence_head: true - train: - pdb: - sub_datasets: - pn_unit: - dataset: - dataset: - filters: - # filters common across all PDB datasets - - "deposition_date < '2024-01-01'" - - "resolution < 9.0" - - "num_polymer_pn_units <= 300" - - "cluster.notnull()" - - "pdb_id not in ${resolve_import:atomworks.constants,PDB_IDS_WITH_UNPHYSICAL_BONDS}" - # pn_unit specific filters - - "~(q_pn_unit_non_polymer_res_names.notnull() and q_pn_unit_non_polymer_res_names.str.contains('${resolve_import:atomworks.constants,AF3_EXCLUDED_LIGANDS_REGEX}', regex=True))" - interface: - dataset: - dataset: - filters: - # filters common across all PDB datasets - - "deposition_date < '2024-01-01'" - - "resolution < 9.0" - - "num_polymer_pn_units <= 300" - - "cluster.notnull()" - - "pdb_id not in ${resolve_import:atomworks.constants,PDB_IDS_WITH_UNPHYSICAL_BONDS}" - # interface specific filters - - "~(pn_unit_1_non_polymer_res_names.notnull() and pn_unit_1_non_polymer_res_names.str.contains('${resolve_import:atomworks.constants,AF3_EXCLUDED_LIGANDS_REGEX}', regex=True))" - - "~(pn_unit_2_non_polymer_res_names.notnull() and pn_unit_2_non_polymer_res_names.str.contains('${resolve_import:atomworks.constants,AF3_EXCLUDED_LIGANDS_REGEX}', regex=True))" - - "is_inter_molecule" From e94ea147a6ebdf34320de1a93d702a55078225db Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 20 Mar 2026 16:07:07 -0700 Subject: [PATCH 39/49] remove extra rfd3na configs --- models/rfd3/configs/experiment/rfd3na.yaml | 100 ------------------ models/rfd3/configs/experiment/rfd3na_af.yaml | 99 ----------------- .../configs/experiment/rfd3na_no_distill.yaml | 97 ----------------- models/rfd3/configs/experiment/rfd3na_rm.yaml | 90 ---------------- 4 files changed, 386 deletions(-) delete mode 100644 models/rfd3/configs/experiment/rfd3na.yaml delete mode 100644 models/rfd3/configs/experiment/rfd3na_af.yaml delete mode 100644 models/rfd3/configs/experiment/rfd3na_no_distill.yaml delete mode 100644 models/rfd3/configs/experiment/rfd3na_rm.yaml diff --git a/models/rfd3/configs/experiment/rfd3na.yaml b/models/rfd3/configs/experiment/rfd3na.yaml deleted file mode 100644 index 8739992e..00000000 --- a/models/rfd3/configs/experiment/rfd3na.yaml +++ /dev/null @@ -1,100 +0,0 @@ -# @package _global_ -# Training configuration for RFD3 - -defaults: - #- /debug/default - - override /model: rfd3_base - - override /logger: wandb - - override /datasets: design_base_rfd3na - - _self_ - -name: rfd3na_scratch_clean_test -tags: [print-model] - -#ckpt: null -#ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na-fine-tune/2026-02-17_15-21_JOB_3608285/ckpt/epoch-0590.ckpt -ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na_scratch_clean_test/2026-02-19_01-58_JOB_3986244/ckpt/epoch-0180.ckpt - - -model: - net: - token_initializer: - token_1d_features: - ref_motif_token_type: 3 - restype: 32 - is_dna_token: 1 - is_rna_token: 1 - is_protein_token: 1 - token_2d_features: - bp_partners: 3 # Unspecified, pair, loop - atom_1d_features: - ref_atom_name_chars: 256 - ref_element: 128 - ref_charge: 1 - ref_mask: 1 - ref_is_motif_atom_with_fixed_coord: 1 - ref_is_motif_atom_unindexed: 1 - has_zero_occupancy: 1 - ref_pos: 3 - - # Guided features - ref_atomwise_rasa: 3 - active_donor: 1 - active_acceptor: 1 - is_atom_level_hotspot: 1 - diffusion_module: - n_recycle: 2 - use_local_token_attention: True - diffusion_transformer: - n_local_tokens: 32 - n_keys: 128 - - inference_sampler: - num_timesteps: 100 - - -datasets: - diffusion_batch_size_train: 16 - crop_size: 256 - max_atoms_in_crop: 2560 # ~10x crop size. - global_transform_args: - meta_conditioning_probabilities: - p_is_nucleic_ss_example: 0.25 - p_nucleic_ss_show_partial_feats: 0.7 - p_canonical_bp_filter: 0.2 - #calculate_NA_SS: 0.3 - - association_scheme: atom23 - #add_na_pair_features: true - train_conditions: - unconditional: - frequency: 2.0 - island: - frequency: 2.0 - sequence_design: - frequency: 0.5 - tipatom: - frequency: 5.0 - ppi: - frequency: 0.0 - train: - # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. - pdb: - probability: 0.6 - rna_monomer_distillation: - probability: 0.3 - monomer_distillation: - probability: 0.1 - - val: - pseudoknot: - dataset: - # eval_every_n: 10 - eval_every_n: 5 - -trainer: - #devices_per_node: 1 - #limit_train_batches: 10 - #limit_val_batches: 1 - validate_every_n_epochs: 5 - prevalidate: true diff --git a/models/rfd3/configs/experiment/rfd3na_af.yaml b/models/rfd3/configs/experiment/rfd3na_af.yaml deleted file mode 100644 index e9331b7a..00000000 --- a/models/rfd3/configs/experiment/rfd3na_af.yaml +++ /dev/null @@ -1,99 +0,0 @@ -# @package _global_ -# Training configuration for RFD3 - -defaults: - - /debug/default - - override /model: rfd3_base - # - override /logger: wandb - - override /datasets: design_base_rfd3na - - _self_ - -name: rfd3na-fine-tune -tags: [print-model] -ckpt_path: /projects/ml/aa_design/models/rfd3_latest_foundry.ckpt - -model: - net: - token_initializer: - token_1d_features: - ref_motif_token_type: 3 - restype: 32 - is_dna_token: 1 - is_rna_token: 1 - is_protein_token: 1 - token_2d_features: - bp_partners: 3 # Unspecified, pair, loop - atom_1d_features: - ref_atom_name_chars: 256 - ref_element: 128 - ref_charge: 1 - ref_mask: 1 - ref_is_motif_atom_with_fixed_coord: 1 - ref_is_motif_atom_unindexed: 1 - has_zero_occupancy: 1 - ref_pos: 3 - - # Guided features - ref_atomwise_rasa: 3 - active_donor: 1 - active_acceptor: 1 - is_atom_level_hotspot: 1 - diffusion_module: - n_recycle: 2 - use_local_token_attention: True - diffusion_transformer: - n_local_tokens: 32 - n_keys: 128 - - inference_sampler: - num_timesteps: 100 - - -datasets: - diffusion_batch_size_train: 16 - crop_size: 256 - max_atoms_in_crop: 2560 # ~10x crop size. - global_transform_args: - meta_conditioning_probabilities: - # p_is_nucleic_ss_example: 0.25 - # p_nucleic_ss_show_partial_feats: 0.7 - # p_canonical_bp_filter: 0.2 - p_is_nucleic_ss_example: 1.0 - p_nucleic_ss_show_partial_feats: 0.0 - p_canonical_bp_filter: 0.0 - #calculate_NA_SS: 0.3 - - association_scheme: atom23 - #add_na_pair_features: true - train_conditions: - unconditional: - frequency: 2.0 - island: - frequency: 2.0 - sequence_design: - frequency: 0.5 - tipatom: - frequency: 5.0 - ppi: - frequency: 0.0 - train: - # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. - pdb: - probability: 0.0 - rna_monomer_distillation: - probability: 1.0 - monomer_distillation: - probability: 0.0 - - val: - pseudoknot: - dataset: - # eval_every_n: 10 - eval_every_n: 5 - -trainer: - #devices_per_node: 1 - #limit_train_batches: 10 - #limit_val_batches: 1 - validate_every_n_epochs: 5 - prevalidate: true diff --git a/models/rfd3/configs/experiment/rfd3na_no_distill.yaml b/models/rfd3/configs/experiment/rfd3na_no_distill.yaml deleted file mode 100644 index abb302b4..00000000 --- a/models/rfd3/configs/experiment/rfd3na_no_distill.yaml +++ /dev/null @@ -1,97 +0,0 @@ -# @package _global_ -# Training configuration for RFD3 - -defaults: - #- /debug/default - - override /model: rfd3_base - - override /logger: wandb - - override /datasets: design_base_rfd3na - - _self_ - -name: rfd3na_no_distill -tags: [print-model] -#ckpt_path: null -ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na_no_distill/2026-02-19_02-16_JOB_3988845/ckpt/epoch-0170.ckpt - -model: - net: - token_initializer: - token_1d_features: - ref_motif_token_type: 3 - restype: 32 - is_dna_token: 1 - is_rna_token: 1 - is_protein_token: 1 - token_2d_features: - bp_partners: 3 # Unspecified, pair, loop - atom_1d_features: - ref_atom_name_chars: 256 - ref_element: 128 - ref_charge: 1 - ref_mask: 1 - ref_is_motif_atom_with_fixed_coord: 1 - ref_is_motif_atom_unindexed: 1 - has_zero_occupancy: 1 - ref_pos: 3 - - # Guided features - ref_atomwise_rasa: 3 - active_donor: 1 - active_acceptor: 1 - is_atom_level_hotspot: 1 - diffusion_module: - n_recycle: 2 - use_local_token_attention: True - diffusion_transformer: - n_local_tokens: 32 - n_keys: 128 - - inference_sampler: - num_timesteps: 100 - - -datasets: - diffusion_batch_size_train: 16 - crop_size: 256 - max_atoms_in_crop: 2560 # ~10x crop size. - global_transform_args: - meta_conditioning_probabilities: - p_is_nucleic_ss_example: 0.25 - p_nucleic_ss_show_partial_feats: 0.7 - p_canonical_bp_filter: 0.2 - #calculate_NA_SS: 0.3 - - association_scheme: atom23 - #add_na_pair_features: true - train_conditions: - unconditional: - frequency: 2.0 - island: - frequency: 2.0 - sequence_design: - frequency: 0.5 - tipatom: - frequency: 5.0 - ppi: - frequency: 0.0 - train: - # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. - pdb: - probability: 0.7 - rna_monomer_distillation: - probability: 0.3 - monomer_distillation: - probability: 0.0 - - val: - pseudoknot: - dataset: - # eval_every_n: 10 - eval_every_n: 5 - -trainer: - #devices_per_node: 1 - #limit_train_batches: 10 - #limit_val_batches: 1 - validate_every_n_epochs: 5 - prevalidate: true diff --git a/models/rfd3/configs/experiment/rfd3na_rm.yaml b/models/rfd3/configs/experiment/rfd3na_rm.yaml deleted file mode 100644 index 1596cb12..00000000 --- a/models/rfd3/configs/experiment/rfd3na_rm.yaml +++ /dev/null @@ -1,90 +0,0 @@ -# @package _global_ -# Training configuration for RFD3 - -defaults: - #- /debug/default - - override /model: rfd3_base - - override /logger: wandb - - override /datasets: design_base_rfd3na - - _self_ - -name: rfd3na -tags: [print-model] -ckpt_path: null - -model: - net: - token_initializer: - token_1d_features: - ref_motif_token_type: 3 - restype: 32 - is_dna_token: 1 - is_rna_token: 1 - is_protein_token: 1 - #token_2d_features: - #bp_partners: 3 # Unspecified, pair, loop - atom_1d_features: - ref_atom_name_chars: 256 - ref_element: 128 - ref_charge: 1 - ref_mask: 1 - ref_is_motif_atom_with_fixed_coord: 1 - ref_is_motif_atom_unindexed: 1 - has_zero_occupancy: 1 - ref_pos: 3 - - # Guided features - ref_atomwise_rasa: 3 - active_donor: 1 - active_acceptor: 1 - is_atom_level_hotspot: 1 - diffusion_module: - n_recycle: 2 - use_local_token_attention: True - diffusion_transformer: - n_local_tokens: 32 - n_keys: 128 - - inference_sampler: - num_timesteps: 100 - - -datasets: - diffusion_batch_size_train: 16 - crop_size: 256 - max_atoms_in_crop: 2560 # ~10x crop size. - global_transform_args: - meta_conditioning_probabilities: - calculate_NA_SS: 0.0 - association_scheme: atom23 - #add_na_pair_features: true - train_conditions: - unconditional: - frequency: 2.0 - island: - frequency: 2.0 - sequence_design: - frequency: 0.5 - tipatom: - frequency: 5.0 - ppi: - frequency: 0.0 - train: - # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. - pdb: - probability: 0.5 - rna_monomer_distillation: - probability: 0.5 - - val: - pseudoknot: - dataset: - # eval_every_n: 10 - eval_every_n: 5 - -trainer: - #devices_per_node: 1 - #limit_train_batches: 10 - limit_val_batches: 1 - validate_every_n_epochs: 5 - prevalidate: false From f10771f98d1ff4f585d5d75b97aff779da8d936c Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 20 Mar 2026 16:11:19 -0700 Subject: [PATCH 40/49] debug cleanup --- models/rfd3/src/rfd3/model/layers/block_utils.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/models/rfd3/src/rfd3/model/layers/block_utils.py b/models/rfd3/src/rfd3/model/layers/block_utils.py index c2bbd56c..67621a4f 100644 --- a/models/rfd3/src/rfd3/model/layers/block_utils.py +++ b/models/rfd3/src/rfd3/model/layers/block_utils.py @@ -413,10 +413,7 @@ def extend_index_mask_with_neighbours( # 2. Find k-nn excluding forced indices D_LL = torch.where(mask, inf, D_LL) - try: - filler_idx = torch.topk(D_LL, k, dim=-1, largest=False).indices - except: - raise ValueError(f"DLL has nan?: {torch.isnan(D_LL).any()}, D_LL shape: {D_LL.shape}, k: {k}") + filler_idx = torch.topk(D_LL, k, dim=-1, largest=False).indices # ... Reverse last axis s.t. best matched indices are last filler_idx = filler_idx.flip(dims=[-1]) From 67921fa6c753328d515b1ec93f77744b76c1326a Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 20 Mar 2026 16:48:45 -0700 Subject: [PATCH 41/49] leftover rebase bugs cleanup, atom14 inference demo working --- models/rfd3/src/rfd3/constants.py | 1 + models/rfd3/src/rfd3/transforms/design_transforms.py | 12 ------------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index c7d43c62..3ec144c8 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -398,6 +398,7 @@ ATOM23_ATOM_NAMES_RNA = np.array( [item.strip() for item in backbone_atomscheme_RNA] + [f"V{i}" for i in range(23 - len(backbone_atomscheme_RNA))] +) """Atom23 atom names (e.g. CA, V1)""" ATOM23_ATOM_ELEMENTS_RNA = np.array( diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index 04f1500d..aeadcc2b 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -758,18 +758,6 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: if "feats" not in data.keys(): data["feats"] = {} - if association_scheme == 'atom23': - data['atom_array'].set_annotation('is_protein_token', data['atom_array'].is_protein) - data['atom_array'].set_annotation('is_dna_token', data['atom_array'].is_dna) - data['atom_array'].set_annotation('is_rna_token', data['atom_array'].is_rna) - - if self.association_scheme == "atom23": - data["atom_array"].set_annotation( - "is_protein_token", data["atom_array"].is_protein - ) - data["atom_array"].set_annotation("is_dna_token", data["atom_array"].is_dna) - data["atom_array"].set_annotation("is_rna_token", data["atom_array"].is_rna) - if self.association_scheme == "atom23": data["atom_array"].set_annotation( "is_protein_token", data["atom_array"].is_protein From fdf3f98a9f416cc36c647d94984844cdc85ac397 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Mon, 23 Mar 2026 13:33:50 -0700 Subject: [PATCH 42/49] cleanup configs --- .../components/rf3_net_with_confidence_head.yaml | 3 +-- models/rfd3/configs/datasets/design_base.yaml | 8 -------- models/rfd3/configs/datasets/train/pdb/base.yaml | 2 +- models/rfd3/configs/datasets/val/pseudoknot.yaml | 1 - models/rfd3/configs/experiment/rfd3na_fine_tune.yaml | 12 ++++++++++-- .../rfd3/configs/inference_engine/rfdiffusion3.yaml | 6 +++--- 6 files changed, 15 insertions(+), 17 deletions(-) diff --git a/models/rf3/configs/model/components/rf3_net_with_confidence_head.yaml b/models/rf3/configs/model/components/rf3_net_with_confidence_head.yaml index e7c0d3c0..4714de10 100644 --- a/models/rf3/configs/model/components/rf3_net_with_confidence_head.yaml +++ b/models/rf3/configs/model/components/rf3_net_with_confidence_head.yaml @@ -36,11 +36,10 @@ confidence_head: d_hidden: 32 attention_pair_bias: n_head: 16 - kq_norm: true n_bins_pae: 64 n_bins_pde: 64 n_bins_plddt: 50 n_bins_exp_resolved: 2 use_Cb_distances: False use_af3_style_binning_and_final_layer_norms: True - symmetrize_Cb_logits: True \ No newline at end of file + symmetrize_Cb_logits: True diff --git a/models/rfd3/configs/datasets/design_base.yaml b/models/rfd3/configs/datasets/design_base.yaml index c862900c..a6995893 100644 --- a/models/rfd3/configs/datasets/design_base.yaml +++ b/models/rfd3/configs/datasets/design_base.yaml @@ -62,9 +62,6 @@ global_transform_args: min_ss_island_len: 1 max_ss_island_len: 10 - # Nucleic acid features - add_na_pair_features: false - train_conditions: unconditional: frequency: 5.0 @@ -98,8 +95,3 @@ global_transform_args: # PPI add_ppi_hotspots: 0.75 full_binder_crop: 0.75 - - # Nucleic SS: - p_is_nucleic_ss_example: 0.0 - p_nucleic_ss_show_partial_feats: 0.0 - \ No newline at end of file diff --git a/models/rfd3/configs/datasets/train/pdb/base.yaml b/models/rfd3/configs/datasets/train/pdb/base.yaml index 9c0a8c87..d3f45628 100644 --- a/models/rfd3/configs/datasets/train/pdb/base.yaml +++ b/models/rfd3/configs/datasets/train/pdb/base.yaml @@ -9,6 +9,6 @@ weights: beta: 0.5 alphas: a_prot: 3.0 # 3 for AF-3 - a_nuc: 3.0 # 3 for AF-3 + a_nuc: 0.0 # 3 for AF-3 a_ligand: 1.0 # 1 for AF-3 a_loi: 5.0 # 5 for AF-3 diff --git a/models/rfd3/configs/datasets/val/pseudoknot.yaml b/models/rfd3/configs/datasets/val/pseudoknot.yaml index bb312c05..7cf5ce14 100644 --- a/models/rfd3/configs/datasets/val/pseudoknot.yaml +++ b/models/rfd3/configs/datasets/val/pseudoknot.yaml @@ -6,5 +6,4 @@ defaults: dataset: name: pseudoknot eval_every_n: 1 - #data: ${paths.data.design_benchmark_data_dir}/pseudoknot_debug.json data: ${paths.data.design_benchmark_data_dir}/pseudoknot.json diff --git a/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml b/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml index 3210c5cb..3f2dfbe1 100644 --- a/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml +++ b/models/rfd3/configs/experiment/rfd3na_fine_tune.yaml @@ -10,8 +10,7 @@ defaults: name: rfd3na-fine-tune-ss0.5 tags: [print-model] -#ckpt_path: /projects/ml/aa_design/models/rfd3_latest_foundry.ckpt -ckpt_path: /net/scratch/raktim/training/logs/train/rfd3na-fine-tune-ss0.5/2026-02-23_23-57_JOB_4717793/ckpt/epoch-0820.ckpt +ckpt_path: null model: net: @@ -78,6 +77,15 @@ datasets: # These are the ratios used in the preprint but we set all pdb sampling by default since not everyone might download the distillation data. pdb: probability: 0.6 + sub_datasets: + pn_unit: + weights: + alphas: + a_nuc: 3.0 + interface: + weights: + alphas: + a_nuc: 3.0 rna_monomer_distillation: probability: 0.3 monomer_distillation: diff --git a/models/rfd3/configs/inference_engine/rfdiffusion3.yaml b/models/rfd3/configs/inference_engine/rfdiffusion3.yaml index 80dcc37f..fe4a00fb 100644 --- a/models/rfd3/configs/inference_engine/rfdiffusion3.yaml +++ b/models/rfd3/configs/inference_engine/rfdiffusion3.yaml @@ -25,9 +25,9 @@ inference_sampler: kind: "default" # "default" or "symmetry" to choose the sampler # Classifier-free guidance args: cfg_features: # set to 0 in the reference CFG step - #- active_donor - #- active_acceptor - #- ref_atomwise_rasa + - active_donor + - active_acceptor + - ref_atomwise_rasa - bp_partners use_classifier_free_guidance: False From b9e050c35b9b67c8e5e355df49b2d674912260c0 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 27 Mar 2026 11:22:23 -0700 Subject: [PATCH 43/49] ruff format --- models/rfd3/src/rfd3/constants.py | 348 +++++++++---- .../rfd3/src/rfd3/inference/input_parsing.py | 26 +- .../rfd3/inference/legacy_input_parsing.py | 53 +- .../rfd3/src/rfd3/metrics/design_metrics.py | 50 +- .../src/rfd3/metrics/nucleic_ss_metrics.py | 71 +-- .../src/rfd3/metrics/rna_aptamer_metrics.py | 30 +- models/rfd3/src/rfd3/model/cfg_utils.py | 4 +- .../rfd3/src/rfd3/model/layers/block_utils.py | 4 +- models/rfd3/src/rfd3/model/layers/blocks.py | 7 +- models/rfd3/src/rfd3/model/layers/encoders.py | 6 +- models/rfd3/src/rfd3/trainer/rfd3.py | 9 +- models/rfd3/src/rfd3/trainer/trainer_utils.py | 27 +- .../src/rfd3/transforms/conditioning_base.py | 15 +- .../src/rfd3/transforms/design_transforms.py | 24 +- .../rfd3/src/rfd3/transforms/hbonds_hbplus.py | 2 - models/rfd3/src/rfd3/transforms/na_geom.py | 197 ++++---- .../rfd3/src/rfd3/transforms/na_geom_utils.py | 477 ++++++++++++------ models/rfd3/src/rfd3/transforms/pipelines.py | 18 +- .../rfd3/transforms/training_conditions.py | 16 +- .../rfd3/src/rfd3/transforms/virtual_atoms.py | 7 +- models/rfd3/src/rfd3/utils/inference.py | 7 +- 21 files changed, 878 insertions(+), 520 deletions(-) diff --git a/models/rfd3/src/rfd3/constants.py b/models/rfd3/src/rfd3/constants.py index 3ec144c8..5407e681 100644 --- a/models/rfd3/src/rfd3/constants.py +++ b/models/rfd3/src/rfd3/constants.py @@ -438,114 +438,254 @@ # Mapping from residue type to its backbone and sidechain atoms (for convenience) ATOM_REGION_BY_RESI = { - 'ALA': {'bb':('N','CA','C','O'), - 'sc':('CB')}, - 'ARG': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD','NE','CZ','NH1','NH2')}, - 'ASN': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','OD1','ND2')}, - 'ASP': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','OD1','OD2')}, - 'CYS': {'bb':('N','CA','C','O'), - 'sc':('CB','SG')}, - 'GLN': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD','OE1','NE2')}, - 'GLU': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD','OE1','OE2')}, - 'GLY': {'bb':('N','CA','C','O'), - 'sc':()}, - 'HIS': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','ND1','CD2','CE1','NE2')}, - 'ILE': {'bb':('N','CA','C','O'), - 'sc':('CB','CG1','CG2','CD1')}, - 'LEU': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD1','CD2')}, - 'LYS': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD','CE','NZ')}, - 'MET': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','SD','CE')}, - 'PHE': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ')}, - 'PRO': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD')}, - 'SER': {'bb':('N','CA','C','O'), - 'sc':('CB','OG')}, - 'THR': {'bb':('N','CA','C','O'), - 'sc':('CB','OG1','CG2')}, - 'TRP': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD1','CD2','CE2','CE3','NE1','CZ2','CZ3','CH2')}, - 'TYR': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','CD1','CD2','CE1','CE2','CZ','OH')}, - 'VAL': {'bb':('N','CA','C','O'), - 'sc':('CB','CG1','CG2')}, - 'UNK': {'bb':('N','CA','C','O'), - 'sc':('CB')}, - 'MAS': {'bb':('N','CA','C','O'), - 'sc':('CB')}, - 'DA': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N6')}, - 'DC': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, - 'DG': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':('N9','C4','N3','C2','N1','C6','C5','N7','C8','N2','O6')}, - 'DT': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':('N1','C2','O2','N3','C4','O4','C5','C7','C6')}, - 'DX': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'"), - 'sc':()}, - 'A': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':('N1','C2','N3','C4','C5','C6','N6','N7','C8','N9')}, - 'C': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':('N1','C2','O2','N3','C4','N4','C5','C6')}, - 'G': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':('N1','C2','N2','N3','C4','C5','C6','O6','N7','C8','N9')}, - 'U': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':('N1','C2','O2','N3','C4','O4','C5','C6')}, - 'X': {'bb':("O4'", "C1'", "C2'",'OP1','P','OP2', "O5'", "C5'", "C4'", "C3'", "O3'", "O2'"), - 'sc':()}, - 'HIS_D': {'bb':('N','CA','C','O'), - 'sc':('CB','CG','NE2','CD2','CE1','ND1')}, + "ALA": {"bb": ("N", "CA", "C", "O"), "sc": ("CB")}, + "ARG": { + "bb": ("N", "CA", "C", "O"), + "sc": ("CB", "CG", "CD", "NE", "CZ", "NH1", "NH2"), + }, + "ASN": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG", "OD1", "ND2")}, + "ASP": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG", "OD1", "OD2")}, + "CYS": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "SG")}, + "GLN": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG", "CD", "OE1", "NE2")}, + "GLU": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG", "CD", "OE1", "OE2")}, + "GLY": {"bb": ("N", "CA", "C", "O"), "sc": ()}, + "HIS": { + "bb": ("N", "CA", "C", "O"), + "sc": ("CB", "CG", "ND1", "CD2", "CE1", "NE2"), + }, + "ILE": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG1", "CG2", "CD1")}, + "LEU": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG", "CD1", "CD2")}, + "LYS": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG", "CD", "CE", "NZ")}, + "MET": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG", "SD", "CE")}, + "PHE": { + "bb": ("N", "CA", "C", "O"), + "sc": ("CB", "CG", "CD1", "CD2", "CE1", "CE2", "CZ"), + }, + "PRO": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG", "CD")}, + "SER": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "OG")}, + "THR": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "OG1", "CG2")}, + "TRP": { + "bb": ("N", "CA", "C", "O"), + "sc": ("CB", "CG", "CD1", "CD2", "CE2", "CE3", "NE1", "CZ2", "CZ3", "CH2"), + }, + "TYR": { + "bb": ("N", "CA", "C", "O"), + "sc": ("CB", "CG", "CD1", "CD2", "CE1", "CE2", "CZ", "OH"), + }, + "VAL": {"bb": ("N", "CA", "C", "O"), "sc": ("CB", "CG1", "CG2")}, + "UNK": {"bb": ("N", "CA", "C", "O"), "sc": ("CB")}, + "MAS": {"bb": ("N", "CA", "C", "O"), "sc": ("CB")}, + "DA": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + ), + "sc": ("N9", "C4", "N3", "C2", "N1", "C6", "C5", "N7", "C8", "N6"), + }, + "DC": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + ), + "sc": ("N1", "C2", "O2", "N3", "C4", "N4", "C5", "C6"), + }, + "DG": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + ), + "sc": ("N9", "C4", "N3", "C2", "N1", "C6", "C5", "N7", "C8", "N2", "O6"), + }, + "DT": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + ), + "sc": ("N1", "C2", "O2", "N3", "C4", "O4", "C5", "C7", "C6"), + }, + "DX": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + ), + "sc": (), + }, + "A": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + "O2'", + ), + "sc": ("N1", "C2", "N3", "C4", "C5", "C6", "N6", "N7", "C8", "N9"), + }, + "C": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + "O2'", + ), + "sc": ("N1", "C2", "O2", "N3", "C4", "N4", "C5", "C6"), + }, + "G": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + "O2'", + ), + "sc": ("N1", "C2", "N2", "N3", "C4", "C5", "C6", "O6", "N7", "C8", "N9"), + }, + "U": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + "O2'", + ), + "sc": ("N1", "C2", "O2", "N3", "C4", "O4", "C5", "C6"), + }, + "X": { + "bb": ( + "O4'", + "C1'", + "C2'", + "OP1", + "P", + "OP2", + "O5'", + "C5'", + "C4'", + "C3'", + "O3'", + "O2'", + ), + "sc": (), + }, + "HIS_D": { + "bb": ("N", "CA", "C", "O"), + "sc": ("CB", "CG", "NE2", "CD2", "CE1", "ND1"), + }, } # Known planar sidechain atoms for each canonical residue type: PLANAR_ATOMS_BY_RESI = { - 'ALA': [], - 'ARG': ['NH1', 'NH2', 'CZ', 'NE', 'CD'], - 'ASN': ['OD1', 'ND2', 'CG', 'CB'], - 'ASP': ['OD1', 'OD2', 'CG', 'CB'], - 'CYS': [], - 'GLN': ['OE1', 'NE2', 'CD', 'CG'], - 'GLU': ['OE1', 'OE2', 'CD', 'CG'], - 'GLY': [], - 'HIS': ['ND1', 'CE1', 'NE2', 'CD2', 'CG', 'CB'], - 'ILE': [], - 'LEU': [], - 'LYS': [], - 'MET': [], - 'PHE': ['CZ', 'CE1', 'CE2', 'CD1', 'CD2', 'CG', 'CB'], - 'PRO': [], - 'SER': [], - 'THR': [], - 'TRP': ['CH2', 'CZ3', 'CZ2', 'CE3', 'CE2', 'CD2', 'NE1', 'CD1', 'CG', 'CB'], - 'TYR': ['OH', 'CZ', 'CE1', 'CE2', 'CD1', 'CD2', 'CG', 'CB'], - 'VAL': [], - 'UNK': [], - 'MAS': [], - 'DA': ['N6', 'C6', 'N1', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], - 'DC': ['N4', 'C4', 'N3', 'O2', 'C2', 'C5', 'C6', 'N1'], - 'DG': ['O6', 'C6', 'N1', 'N2', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], - 'DT': ['O4', 'O2', 'N3', 'C4', 'C2', 'C5', 'C6', 'N1', 'C7'], - 'DX': [], - 'A': ['N6', 'C6', 'N1', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], - 'C': ['N4', 'C4', 'N3', 'O2', 'C2', 'C5', 'C6', 'N1'], - 'G': ['O6', 'C6', 'N1', 'N2', 'C2', 'N3', 'C4', 'C5', 'N7', 'C8', 'N9'], - 'U': ['O4', 'O2', 'N3', 'C4', 'C2', 'C5', 'C6', 'N1'], - 'X': [], - 'HIS_D': ['ND1', 'CD2', 'CE1', 'NE2', 'CG', 'CB'], - } + "ALA": [], + "ARG": ["NH1", "NH2", "CZ", "NE", "CD"], + "ASN": ["OD1", "ND2", "CG", "CB"], + "ASP": ["OD1", "OD2", "CG", "CB"], + "CYS": [], + "GLN": ["OE1", "NE2", "CD", "CG"], + "GLU": ["OE1", "OE2", "CD", "CG"], + "GLY": [], + "HIS": ["ND1", "CE1", "NE2", "CD2", "CG", "CB"], + "ILE": [], + "LEU": [], + "LYS": [], + "MET": [], + "PHE": ["CZ", "CE1", "CE2", "CD1", "CD2", "CG", "CB"], + "PRO": [], + "SER": [], + "THR": [], + "TRP": ["CH2", "CZ3", "CZ2", "CE3", "CE2", "CD2", "NE1", "CD1", "CG", "CB"], + "TYR": ["OH", "CZ", "CE1", "CE2", "CD1", "CD2", "CG", "CB"], + "VAL": [], + "UNK": [], + "MAS": [], + "DA": ["N6", "C6", "N1", "C2", "N3", "C4", "C5", "N7", "C8", "N9"], + "DC": ["N4", "C4", "N3", "O2", "C2", "C5", "C6", "N1"], + "DG": ["O6", "C6", "N1", "N2", "C2", "N3", "C4", "C5", "N7", "C8", "N9"], + "DT": ["O4", "O2", "N3", "C4", "C2", "C5", "C6", "N1", "C7"], + "DX": [], + "A": ["N6", "C6", "N1", "C2", "N3", "C4", "C5", "N7", "C8", "N9"], + "C": ["N4", "C4", "N3", "O2", "C2", "C5", "C6", "N1"], + "G": ["O6", "C6", "N1", "N2", "C2", "N3", "C4", "C5", "N7", "C8", "N9"], + "U": ["O4", "O2", "N3", "C4", "C2", "C5", "C6", "N1"], + "X": [], + "HIS_D": ["ND1", "CD2", "CE1", "NE2", "CG", "CB"], +} # fix C/U symmetry -temp = list(association_schemes['atom23']['U']) +temp = list(association_schemes["atom23"]["U"]) temp[19], temp[20] = temp[20], temp[19] -association_schemes['atom23']['U'] = tuple(temp) +association_schemes["atom23"]["U"] = tuple(temp) association_schemes_stripped = { name: {k: strip_list(v) for k, v in scheme.items()} @@ -553,4 +693,6 @@ } if __name__ == "__main__": - import pdb; pdb.set_trace() + import pdb + + pdb.set_trace() diff --git a/models/rfd3/src/rfd3/inference/input_parsing.py b/models/rfd3/src/rfd3/inference/input_parsing.py index f3091805..8293ca74 100644 --- a/models/rfd3/src/rfd3/inference/input_parsing.py +++ b/models/rfd3/src/rfd3/inference/input_parsing.py @@ -119,8 +119,8 @@ class DesignInputSpecification(BaseModel): validate_assignment=False, str_strip_whitespace=True, str_min_length=1, - #extra="forbid", #################################################### - extra="allow" + # extra="forbid", #################################################### + extra="allow", ## for now allowing extra for rfd3na-ss purposes, can decide later ## ) # fmt: off @@ -497,7 +497,10 @@ def apply_selections(start, end): aa.is_motif_atom_with_fixed_seq[start:end] = np.full_like( is_bkbn, False, dtype=int ) - elif aa.res_name[start] in (STANDARD_DNA + STANDARD_RNA) and self.redesign_motif_sidechains: + elif ( + aa.res_name[start] in (STANDARD_DNA + STANDARD_RNA) + and self.redesign_motif_sidechains + ): is_bkbn = np.isin(aa.atom_name[start:end], backbone_atoms_RNA) aa.is_motif_atom_with_fixed_coord[start:end] = is_bkbn.astype(int) aa.is_motif_atom_with_fixed_seq[start:end] = np.full_like( @@ -519,7 +522,9 @@ def build(self, return_metadata=False): ########## reorder NA atoms ########### if exists(atom_array_input_annotated): - is_dna = np.isin(atom_array_input_annotated.res_name, ["DA", "DC", "DG", "DT"]) + is_dna = np.isin( + atom_array_input_annotated.res_name, ["DA", "DC", "DG", "DT"] + ) is_rna = np.isin(atom_array_input_annotated.res_name, ["A", "C", "G", "U"]) dna_array = atom_array_input_annotated[is_dna] rna_array = atom_array_input_annotated[is_rna] @@ -726,11 +731,11 @@ def _append_ligand(self, atom_array, atom_array_input_annotated): ligand_array.set_annotation( annot, np.full(ligand_array.array_length(), default) ) - - chain_cand = 'X' + + chain_cand = "X" while chain_cand in atom_array.chain_id.tolist(): chain_cand = chain_cand + chain_cand - ligand_chain = np.array([chain_cand]*len(ligand_array)) + ligand_chain = np.array([chain_cand] * len(ligand_array)) ligand_array.chain_id = ligand_chain atom_array = atom_array + ligand_array @@ -758,9 +763,12 @@ def _set_origin(self, atom_array): ) else: if not exists(self.ori_jitter): - self.ori_jitter = None + self.ori_jitter = None atom_array = set_com( - atom_array, ori_token=None, infer_ori_strategy="com", ori_jitter=self.ori_jitter + atom_array, + ori_token=None, + infer_ori_strategy="com", + ori_jitter=self.ori_jitter, ) else: # Standard: set ori token, zero out diffused atoms diff --git a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py index fbee3463..a15c4145 100644 --- a/models/rfd3/src/rfd3/inference/legacy_input_parsing.py +++ b/models/rfd3/src/rfd3/inference/legacy_input_parsing.py @@ -220,7 +220,6 @@ def fetch_motif_residue_( "Please check your input and contig specification." ) - if unfix_all or f"{src_chain}{src_resid}" in unfix_residues: subarray.set_annotation( "is_motif_atom_with_fixed_coord", np.zeros(subarray.shape[0], dtype=int) @@ -232,7 +231,7 @@ def fetch_motif_residue_( ) else: subarray.set_annotation( - "is_motif_atom_with_fixed_coord", np.array([True]*len(subarray)) + "is_motif_atom_with_fixed_coord", np.array([True] * len(subarray)) ) if flexible_backbone: @@ -255,9 +254,9 @@ def fetch_motif_residue_( subarray = subarray[subarray.is_motif_atom.astype(bool)] else: subarray.set_annotation( - "is_motif_atom_unindexed", np.array([True]*len(subarray)) + "is_motif_atom_unindexed", np.array([True] * len(subarray)) ) - + # ... Relax sequence constraint if provided if ( exists(unfixed_sequence_components) @@ -278,32 +277,35 @@ def fetch_motif_residue_( return subarray -def create_diffused_residues_(n, polymer_type='p'): +def create_diffused_residues_(n, polymer_type="p"): from rfd3.constants import ( ATOM23_ATOM_NAME_TO_ELEMENT, backbone_atoms_DNA, backbone_atoms_RNA, ) + if n <= 0: raise ValueError(f"Negative/null residue count ({n}) not allowed.") - - if polymer_type == 'P': - res_name = 'ALA' + + if polymer_type == "P": + res_name = "ALA" bb_len = 5 bb_atom_names = ["N", "CA", "C", "O", "CB"] - elif polymer_type == 'R': - res_name = 'A' + elif polymer_type == "R": + res_name = "A" bb_len = len(backbone_atoms_RNA) bb_atom_names = backbone_atoms_RNA - elif polymer_type == 'D': - res_name = 'DA' + elif polymer_type == "D": + res_name = "DA" bb_len = len(backbone_atoms_DNA) bb_atom_names = backbone_atoms_DNA else: - raise ValueError(f"invalid polymer type detected: {polymer_type}, check contig!") - + raise ValueError( + f"invalid polymer type detected: {polymer_type}, check contig!" + ) + bb_elements = [ATOM23_ATOM_NAME_TO_ELEMENT[item] for item in bb_atom_names] - + atoms = [] [ atoms.extend( @@ -319,16 +321,13 @@ def create_diffused_residues_(n, polymer_type='p'): for idx in range(1, n + 1) ] array = struc.array(atoms) - array.set_annotation( - "element", np.array(bb_elements * n, dtype=" 0.75 is_chainbreak_na = deviation_na > 1 try: - o["max_ca_deviation_protein"] = float(deviation_protein.max(-1).values.mean()) - o["fraction_chainbreaks_protein"] = float(is_chainbreak_protein.float().mean(-1).mean()) - o["n_chainbreaks_protein"] = float(is_chainbreak_protein.float().sum(-1).mean()) - except: + o["max_ca_deviation_protein"] = float( + deviation_protein.max(-1).values.mean() + ) + o["fraction_chainbreaks_protein"] = float( + is_chainbreak_protein.float().mean(-1).mean() + ) + o["n_chainbreaks_protein"] = float( + is_chainbreak_protein.float().sum(-1).mean() + ) + except Exception: print("No protein in this example, skipping protein chainbreak metrics") try: o["max_ca_deviation_na"] = float(deviation_na.max(-1).values.mean()) - o["fraction_chainbreaks_na"] = float(is_chainbreak_na.float().mean(-1).mean()) + o["fraction_chainbreaks_na"] = float( + is_chainbreak_na.float().mean(-1).mean() + ) o["n_chainbreaks_na"] = float(is_chainbreak_na.float().sum(-1).mean()) - except: + except Exception: print("No NA in this example, skipping NA chainbreak metrics") return o + class PPIMetrics(Metric): """PPI-specific metrics""" diff --git a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py index 55bd8cb1..53c21194 100644 --- a/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py +++ b/models/rfd3/src/rfd3/metrics/nucleic_ss_metrics.py @@ -1,19 +1,19 @@ import logging -import bdb import numpy as np -from biotite.structure import AtomArray from atomworks.ml.utils.token import ( get_token_starts, ) - +from biotite.structure import AtomArray +from rfd3.trainer.trainer_utils import ( + _cleanup_virtual_atoms_and_assign_atom_name_elements, + _readout_seq_from_struc, +) from rfd3.transforms.na_geom_utils import annotate_na_ss from foundry.metrics.metric import Metric from foundry.utils.ddp import RankedLogger -from rfd3.trainer.trainer_utils import _readout_seq_from_struc, _cleanup_virtual_atoms_and_assign_atom_name_elements - logging.basicConfig(level=logging.INFO) global_logger = RankedLogger(__name__, rank_zero_only=False) @@ -70,7 +70,9 @@ def _get_candidate_token_ids( if hasattr(token_level_array, "is_dna") else np.zeros(len(token_ids), dtype=bool) ) - token_mask &= (is_rna | is_dna) if (is_rna.any() or is_dna.any()) else token_mask + token_mask &= ( + (is_rna | is_dna) if (is_rna.any() or is_dna.any()) else token_mask + ) if compute_for_diffused_region_only: if hasattr(token_level_array, "is_motif_atom"): @@ -175,7 +177,10 @@ def _extract_loop_and_paired_token_ids( return loop_token_ids, paired_token_ids -def compute_from_two_arr(gt_arr, pred_arr, restrict_to_nucleic=True, compute_for_diffused_region_only = False): + +def compute_from_two_arr( + gt_arr, pred_arr, restrict_to_nucleic=True, compute_for_diffused_region_only=False +): gt_token_ids = _get_token_ids(gt_arr) pred_token_ids = _get_token_ids(pred_arr) if len(gt_token_ids) != len(pred_token_ids): @@ -228,26 +233,25 @@ def compute_from_two_arr(gt_arr, pred_arr, restrict_to_nucleic=True, compute_for (pair_weight * pair_f1 + loop_weight * loop_f1) / total_weight ) - return pair_f1, loop_f1, weighted_f1 + def get_NA_SS_F1(pred_array): - ## save the original bop_partner annotation gt_array = pred_array.copy() ## replace by annotating again pred_array = annotate_na_ss( - pred_array, - NA_only=True, - planar_only=True, - overwrite=True, - p_canonical_bp_filter=0.0, - ) - + pred_array, + NA_only=True, + planar_only=True, + overwrite=True, + p_canonical_bp_filter=0.0, + ) + try: pair_f1, loop_f1, weighted_f1 = compute_from_two_arr(gt_array, pred_array) - except: + except Exception: # fails when returns None because expects three returns return {} @@ -261,13 +265,13 @@ def get_NA_SS_F1(pred_array): class NucleicSSSimilarityMetrics(Metric): """Secondary-structure similarity for nucleic acids. - Reports: - - `pair_f1`: F1 over basepair edges from token-level bp-partner annotation. - - `loop_f1`: F1 over explicitly-unpaired loop tokens (`bp_partners == []`). - Unannotated tokens (`bp_partners is None`) are masked. - - `weighted_f1`: GT-weighted average of `pair_f1` and `loop_f1`, weighted by - the prevalence of paired vs loop tokens in the GT. - """ + Reports: + - `pair_f1`: F1 over basepair edges from token-level bp-partner annotation. + - `loop_f1`: F1 over explicitly-unpaired loop tokens (`bp_partners == []`). + Unannotated tokens (`bp_partners is None`) are masked. + - `weighted_f1`: GT-weighted average of `pair_f1` and `loop_f1`, weighted by + the prevalence of paired vs loop tokens in the GT. + """ def __init__( self, @@ -302,7 +306,9 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): n_valid = 0 - for gt_arr, pred_arr in zip(ground_truth_atom_array_stack, predicted_atom_array_stack): + for gt_arr, pred_arr in zip( + ground_truth_atom_array_stack, predicted_atom_array_stack + ): gt_categories = gt_arr.get_annotation_categories() if "bp_partners" not in gt_categories: continue @@ -326,14 +332,14 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): pred_arr, association_scheme="atom23", ) - except: + except Exception: # this can fail early in training print("could not cleanup virtuals for nucleic ss metric compute") pass # clear annotation to avoid potential info leak if "bp_partners" in pred_arr.get_annotation_categories(): pred_arr.del_annotation("bp_partners") - + # add nucleic-ss annotations annotate_na_ss( pred_arr, @@ -348,8 +354,13 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): # Basic sanity check: token counts should match for aligned comparisons try: - pair_f1, loop_f1, weighted_f1 = compute_from_two_arr(gt_arr, pred_arr, restrict_to_nucleic=self.restrict_to_nucleic, compute_for_diffused_region_only = self.compute_for_diffused_region_only) - except: + pair_f1, loop_f1, weighted_f1 = compute_from_two_arr( + gt_arr, + pred_arr, + restrict_to_nucleic=self.restrict_to_nucleic, + compute_for_diffused_region_only=self.compute_for_diffused_region_only, + ) + except Exception: # fails when returns None because expects three returns continue @@ -360,7 +371,7 @@ def compute(self, *, ground_truth_atom_array_stack, predicted_atom_array_stack): if n_valid == 0: return {} - + return { "pair_f1": float(np.mean(pair_f1_list)), "loop_f1": float(np.mean(loop_f1_list)), diff --git a/models/rfd3/src/rfd3/metrics/rna_aptamer_metrics.py b/models/rfd3/src/rfd3/metrics/rna_aptamer_metrics.py index c4071ca3..bf1c7a36 100644 --- a/models/rfd3/src/rfd3/metrics/rna_aptamer_metrics.py +++ b/models/rfd3/src/rfd3/metrics/rna_aptamer_metrics.py @@ -1,5 +1,6 @@ import logging +import numpy as np from foundry.metrics.metric import Metric from foundry.utils.ddp import RankedLogger @@ -8,9 +9,6 @@ global_logger = RankedLogger(__name__, rank_zero_only=False) -import numpy as np - - def calculate_ligand_contacts( atom_array_stack, cutoff_distance=4.0, @@ -31,13 +29,12 @@ def calculate_ligand_contacts( mean_contacts_per_model : float """ - cutoff_sq = cutoff_distance ** 2 + cutoff_sq = cutoff_distance**2 contacts_per_model = [] n_models = len(atom_array_stack) for i in range(n_models): - atoms = atom_array_stack[i] coords = atoms.coord @@ -57,7 +54,7 @@ def calculate_ligand_contacts( # Pairwise squared distances diff = non_ligand_coords[:, None, :] - ligand_coords[None, :, :] - dist_sq = np.sum(diff ** 2, axis=-1) + dist_sq = np.sum(diff**2, axis=-1) # Any ligand within cutoff contact_mask = np.any(dist_sq < cutoff_sq, axis=1) @@ -67,7 +64,11 @@ def calculate_ligand_contacts( contacts_per_model = np.array(contacts_per_model) - return int(np.sum(contacts_per_model)), float(np.mean(contacts_per_model)), float(np.mean(contacts_per_model))/hetero_mask.sum() + return ( + int(np.sum(contacts_per_model)), + float(np.mean(contacts_per_model)), + float(np.mean(contacts_per_model)) / hetero_mask.sum(), + ) class LigandContactMetrics(Metric): @@ -89,12 +90,18 @@ def kwargs_to_compute_args(self): def compute(self, *, predicted_atom_array_stack): if self.restrict_to_nucleic: - if (predicted_atom_array_stack[0].is_rna.sum() + predicted_atom_array_stack[0].is_dna.sum()== 0): + if ( + predicted_atom_array_stack[0].is_rna.sum() + + predicted_atom_array_stack[0].is_dna.sum() + == 0 + ): return {} try: - total_contacts, mean_contacts, mean_contacts_per_atom = calculate_ligand_contacts( - atom_array_stack=predicted_atom_array_stack, - cutoff_distance=self.cutoff_distance, + total_contacts, mean_contacts, mean_contacts_per_atom = ( + calculate_ligand_contacts( + atom_array_stack=predicted_atom_array_stack, + cutoff_distance=self.cutoff_distance, + ) ) except Exception as e: global_logger.error( @@ -106,4 +113,3 @@ def compute(self, *, predicted_atom_array_stack): "mean_ligand_contacts_per_model": float(mean_contacts), "mean_ligand_contacts_per_atom": float(mean_contacts_per_atom), } - diff --git a/models/rfd3/src/rfd3/model/cfg_utils.py b/models/rfd3/src/rfd3/model/cfg_utils.py index f84ce453..2b9f860d 100644 --- a/models/rfd3/src/rfd3/model/cfg_utils.py +++ b/models/rfd3/src/rfd3/model/cfg_utils.py @@ -63,8 +63,8 @@ def strip_f( ) else: ## for bp_partners default is a mask feature - v_cropped[:,:,0] = 1 - v_cropped[:,:,1:] = 0 + v_cropped[:, :, 0] = 1 + v_cropped[:, :, 1:] = 0 # update the feature in the dictionary f_stripped[k] = v_cropped diff --git a/models/rfd3/src/rfd3/model/layers/block_utils.py b/models/rfd3/src/rfd3/model/layers/block_utils.py index 67621a4f..3dfa0d56 100644 --- a/models/rfd3/src/rfd3/model/layers/block_utils.py +++ b/models/rfd3/src/rfd3/model/layers/block_utils.py @@ -210,7 +210,9 @@ def create_attention_indices( chain_ids is not None and len(torch.unique(chain_ids)) > 3 ): # Multi-chain structure # Reserve 25% of attention keys for inter-chain interactions - k_inter_chain = min(max(32, k_actual // 4), k_actual) # At least 32 inter-chain keys + k_inter_chain = min( + max(32, k_actual // 4), k_actual + ) # At least 32 inter-chain keys k_intra_chain = k_actual - k_inter_chain attn_indices = get_sparse_attention_indices_with_inter_chain( diff --git a/models/rfd3/src/rfd3/model/layers/blocks.py b/models/rfd3/src/rfd3/model/layers/blocks.py index f5cfe34f..3290b9e0 100644 --- a/models/rfd3/src/rfd3/model/layers/blocks.py +++ b/models/rfd3/src/rfd3/model/layers/blocks.py @@ -143,6 +143,7 @@ def forward(self, f, collapse_length): ) ) + class TwoDFeatureEmbedder(nn.Module): """ Embeds 2D features into a single vector. @@ -164,18 +165,22 @@ def __init__(self, features, output_channels): for feature, n_channels in self.features.items() } ) + def collapse2D(self, x, L): return x.reshape((L, L, x.numel() // (L * L))) def forward(self, f, collapse_length): return sum( tuple( - self.embedders[feature](self.collapse2D(f[feature].float(), collapse_length)) + self.embedders[feature]( + self.collapse2D(f[feature].float(), collapse_length) + ) for feature, n_channels in self.features.items() if exists(n_channels) ) ) + class SinusoidalDistEmbed(nn.Module): """ Applies sinusoidal embedding to pairwise distances and projects to c_atompair. diff --git a/models/rfd3/src/rfd3/model/layers/encoders.py b/models/rfd3/src/rfd3/model/layers/encoders.py index a3c37cf6..fc19a95c 100644 --- a/models/rfd3/src/rfd3/model/layers/encoders.py +++ b/models/rfd3/src/rfd3/model/layers/encoders.py @@ -11,10 +11,10 @@ Downcast, LocalAtomTransformer, OneDFeatureEmbedder, - TwoDFeatureEmbedder, PositionPairDistEmbedder, RelativePositionEncodingWithIndexRemoval, SinusoidalDistEmbed, + TwoDFeatureEmbedder, ) from rfd3.model.layers.chunked_pairwise import ( ChunkedPairwiseEmbedder, @@ -64,7 +64,7 @@ def __init__( self.atom_1d_embedder_1 = OneDFeatureEmbedder(atom_1d_features, c_s) self.atom_1d_embedder_2 = OneDFeatureEmbedder(atom_1d_features, c_atom) self.token_1d_embedder = OneDFeatureEmbedder(token_1d_features, c_s) - if token_2d_features != None: + if token_2d_features is not None: self.token_2d_embedder = TwoDFeatureEmbedder(token_2d_features, c_z) else: self.token_2d_embedder = None @@ -209,7 +209,7 @@ def init_tokens(): f["ref_pos"][f["is_ca"]], valid_mask ) # Add extra token pair features - if self.token_2d_embedder != None: + if self.token_2d_embedder is not None: Z_init_II = Z_init_II + self.token_2d_embedder(f, I) # Run a small transformer to provide position encodings to single. diff --git a/models/rfd3/src/rfd3/trainer/rfd3.py b/models/rfd3/src/rfd3/trainer/rfd3.py index 6701f8d6..93a8f18c 100644 --- a/models/rfd3/src/rfd3/trainer/rfd3.py +++ b/models/rfd3/src/rfd3/trainer/rfd3.py @@ -450,15 +450,12 @@ def _build_predicted_atom_array_stack( ): metadata_dict[i]["metrics"] |= get_hbond_metrics(atom_array) - if ( - "bp_partners" in atom_array.get_annotation_categories() - ): - if not np.all(atom_array.bp_partners == None): + if "bp_partners" in atom_array.get_annotation_categories(): + if not np.all(atom_array.bp_partners == None): # noqa: E711 try: metadata_dict[i]["metrics"] |= get_NA_SS_F1(atom_array) - except: + except Exception: pass - if "partial_t" in f: # Try calcualte a CA RMSD to input: aa_in = example["atom_array"] diff --git a/models/rfd3/src/rfd3/trainer/trainer_utils.py b/models/rfd3/src/rfd3/trainer/trainer_utils.py index 24b05071..a2cd07c9 100644 --- a/models/rfd3/src/rfd3/trainer/trainer_utils.py +++ b/models/rfd3/src/rfd3/trainer/trainer_utils.py @@ -2,6 +2,7 @@ import numpy as np import torch +from atomworks.constants import STANDARD_DNA, STANDARD_RNA from atomworks.ml.encoding_definitions import AF3SequenceEncoding from atomworks.ml.utils.token import ( get_token_starts, @@ -13,10 +14,10 @@ ATOM14_ATOM_NAMES, ATOM23_ATOM_NAMES_DNA, ATOM23_ATOM_NAMES_RNA, - backbone_atoms_RNA, VIRTUAL_ATOM_ELEMENT_NAME, association_schemes, association_schemes_stripped, + backbone_atoms_RNA, ) from rfd3.utils.io import ( build_stack_from_atom_array_and_batched_coords, @@ -25,7 +26,6 @@ from foundry.common import exists from foundry.utils.ddp import RankedLogger -from atomworks.constants import STANDARD_DNA, STANDARD_RNA global_logger = RankedLogger(__name__, rank_zero_only=False) @@ -221,7 +221,7 @@ def _readout_seq_from_struc( # There might be a better way to do this. CA_coord = cur_res_atom_array.coord[cur_res_atom_array.atom_name == "CA"] CB_coord = cur_res_atom_array.coord[cur_res_atom_array.atom_name == "CB"] - + if cur_res_atom_array.is_dna[0] or cur_res_atom_array.is_rna[0]: cur_central_atom = "C1'" elif np.linalg.norm(CA_coord - CB_coord) < threshold: @@ -229,7 +229,6 @@ def _readout_seq_from_struc( else: cur_central_atom = central_atom - central_mask = cur_res_atom_array.atom_name == cur_central_atom # ... Calculate the distance to the central atom @@ -269,7 +268,7 @@ def _readout_seq_from_struc( if not cur_res_atom_array.is_rna[0]: continue else: - #ATOM_NAMES = ATOM23_ATOM_NAMES_RNA + # ATOM_NAMES = ATOM23_ATOM_NAMES_RNA if not cur_res_atom_array.is_protein[0]: continue @@ -425,9 +424,11 @@ def process_unindexed_outputs( try: assert (res_id_ == res_id) & (chain_id_ == chain_id) - except: - global_logger.warning("Unindexed mapping did not work properly, res_id, chain_id") - + except Exception: + global_logger.warning( + "Unindexed mapping did not work properly, res_id, chain_id" + ) + inserted_mask = np.logical_or(inserted_mask, token_match) # ... Compute metrics based on the new distances @@ -456,11 +457,7 @@ def process_unindexed_outputs( else: dist = float(dists[row_ind[join_atom], col_ind[join_atom]]) - elif not np.any( - np.isin( - token.atom_name, backbone_atoms_RNA - ) - ): + elif not np.any(np.isin(token.atom_name, backbone_atoms_RNA)): if np.sum(token.atomize) == 1: join_atom = np.where(token.atomize)[0][0] elif "C1'" in token.atom_name: @@ -474,10 +471,10 @@ def process_unindexed_outputs( ) else: dist = float(dists[row_ind[join_atom], col_ind[join_atom]]) - + try: metadata["join_point_rmsd_by_token"][token_pdb_id] = dist - except: + except Exception: pass metadata["diffused_index_map"][token_pdb_id] = f"{chain_id}{res_id}" diff --git a/models/rfd3/src/rfd3/transforms/conditioning_base.py b/models/rfd3/src/rfd3/transforms/conditioning_base.py index 65514c52..682005bb 100644 --- a/models/rfd3/src/rfd3/transforms/conditioning_base.py +++ b/models/rfd3/src/rfd3/transforms/conditioning_base.py @@ -243,7 +243,7 @@ def __init__( ) self.meta_conditioning_probabilities = meta_conditioning_probabilities self.train_conditions = train_conditions - + for item in self.train_conditions: self.train_conditions[item].association_scheme = association_scheme @@ -265,15 +265,15 @@ def check_input(self, data: dict): assert "conditions" in data, "Conditioning dict not initialized" def forward(self, data): - #for item in self.train_conditions: + # for item in self.train_conditions: # print(self.train_conditions[item].is_valid_for_example(data)) valid_conditions = [ cond for cond in self.train_conditions.values() - if cond.is_valid_for_example(data) and cond.frequency > 0 + if cond.is_valid_for_example(data) and cond.frequency > 0 ] - + if len(valid_conditions) == 0: raise InvalidSampledConditionException("No valid condition was found.") @@ -288,7 +288,7 @@ def forward(self, data): cond = valid_conditions[i_cond] cond.association_scheme = self.association_scheme - + data["sampled_condition"] = cond data["sampled_condition_name"] = cond.name data["sampled_condition_cls"] = cond.__class__ @@ -306,11 +306,6 @@ class SampleConditioningFlags(Transform): "AssignTypes", "SampleConditioningType", ] # We use is_protein in the PPI training condition - def __init__(self, association_scheme): - self.association_scheme = association_scheme - - def __init__(self, association_scheme): - self.association_scheme = association_scheme def __init__(self, association_scheme): self.association_scheme = association_scheme diff --git a/models/rfd3/src/rfd3/transforms/design_transforms.py b/models/rfd3/src/rfd3/transforms/design_transforms.py index aeadcc2b..e7d2d4cb 100644 --- a/models/rfd3/src/rfd3/transforms/design_transforms.py +++ b/models/rfd3/src/rfd3/transforms/design_transforms.py @@ -38,6 +38,7 @@ UnindexFlaggedTokens, get_motif_features, ) +from rfd3.transforms.na_geom import na_ss_feats_from_annotation from rfd3.transforms.rasa import discretize_rasa from rfd3.transforms.util_transforms import ( AssignTypes, @@ -45,7 +46,6 @@ get_af3_token_representative_masks, ) from rfd3.transforms.virtual_atoms import PadTokensWithVirtualAtoms -from rfd3.transforms.na_geom import na_ss_feats_from_annotation from foundry.utils.ddp import RankedLogger # noqa @@ -71,7 +71,7 @@ class SubsampleToTypes(Transform): def __init__( self, allowed_types: list | str = ["is_protein"], - association_scheme: str = 'atom14' + association_scheme: str = "atom14", ): self.allowed_types = allowed_types self.association_scheme = association_scheme @@ -106,7 +106,7 @@ def forward(self, data): ) ) - if self.association_scheme != 'atom23' and atom_array.is_protein.sum() == 0: + if self.association_scheme != "atom23" and atom_array.is_protein.sum() == 0: raise ValueError( "No protein atoms found in the atom array. Example ID: {}".format( data.get("example_id", "unknown") @@ -757,7 +757,7 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: """ if "feats" not in data.keys(): data["feats"] = {} - + if self.association_scheme == "atom23": data["atom_array"].set_annotation( "is_protein_token", data["atom_array"].is_protein @@ -772,7 +772,6 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: data = self.generate_feature(feature_name, n_dims, data, "atom") return data - class AddAdditional2dFeaturesToFeats(Transform): @@ -791,15 +790,15 @@ def __init__( token_2d_features, autofill_zeros_if_not_present_in_atomarray=False, association_scheme="atom14", - ): + ): self.autofill = autofill_zeros_if_not_present_in_atomarray self.token_2d_features = token_2d_features self.association_scheme = association_scheme - # Need to pre-define custom constructor functions + # Need to pre-define custom constructor functions # to map from atomarray annotations to tensors. self.constructor_functions = { - 'bp_partners': na_ss_feats_from_annotation, + "bp_partners": na_ss_feats_from_annotation, } def check_input(self, data) -> None: @@ -807,11 +806,10 @@ def check_input(self, data) -> None: check_is_instance(data, "atom_array", AtomArray) def generate_token_feature(self, feature_name, n_dims, data): - # Don't do this if we already have the feature if feature_name in data["feats"].keys(): return data - + # For these, we need to use a constructor function mapping, # since pair features may require custom logic/conventions. @@ -822,11 +820,11 @@ def generate_token_feature(self, feature_name, n_dims, data): raise ValueError( f"No constructor function found for 2d feature `{feature_name}`" ) - + # We can fix shape issues here: if len(feature_array.shape) == 2 and n_dims == 1: feature_array = feature_array.unsqueeze(1) - + # ensure that feature_array is a 3d array with third dim == n_dims: if len(feature_array.shape) != 3: raise ValueError( @@ -854,7 +852,7 @@ def forward(self, data: Dict[str, Any]) -> Dict[str, Any]: if "feats" not in data.keys(): data["feats"] = {} # Only apply for features that the model is expecting: - if self.token_2d_features == None: + if self.token_2d_features is None: return data for feature_name, n_dims in self.token_2d_features.items(): data = self.generate_token_feature(feature_name, n_dims, data) diff --git a/models/rfd3/src/rfd3/transforms/hbonds_hbplus.py b/models/rfd3/src/rfd3/transforms/hbonds_hbplus.py index f49dcdb8..58e855cf 100644 --- a/models/rfd3/src/rfd3/transforms/hbonds_hbplus.py +++ b/models/rfd3/src/rfd3/transforms/hbonds_hbplus.py @@ -248,5 +248,3 @@ def subsample_one_hot_np(array, fraction): new_array[i, j] = 1 return new_array - - diff --git a/models/rfd3/src/rfd3/transforms/na_geom.py b/models/rfd3/src/rfd3/transforms/na_geom.py index ba45c7f4..ee264f2b 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom.py +++ b/models/rfd3/src/rfd3/transforms/na_geom.py @@ -1,48 +1,49 @@ from typing import Any + import numpy as np -from functools import partial -from biotite.structure import AtomArray from atomworks.ml.transforms._checks import ( check_atom_array_annotation, check_contains_keys, check_is_instance, ) from atomworks.ml.transforms.base import Transform +from atomworks.ml.utils.token import get_token_starts, spread_token_wise +from biotite.structure import AtomArray from rfd3.transforms.conditioning_utils import sample_island_tokens from rfd3.transforms.na_geom_utils import ( - annotate_na_ss, - annotate_na_ss_from_data_specification, DEFAULT_NA_SS_FEATURE_INFO, + annotate_na_ss, + annotate_na_ss_from_data_specification, ) -from atomworks.ml.utils.token import spread_token_wise, get_token_starts -def na_ss_feats_from_annotation(atom_array: AtomArray, - token_starts= None, - n_tokens = None, - return_as_onehot = True, - ) -> np.ndarray: +def na_ss_feats_from_annotation( + atom_array: AtomArray, + token_starts=None, + n_tokens=None, + return_as_onehot=True, +) -> np.ndarray: """ Takes in atom array and constucts a base pair feature matrix from annotations, according to to custom feature constuction + masking system. - This featurization utilizes info from BasePairEnum to assign int values + This featurization utilizes info from BasePairEnum to assign int values to paired, unpaired, and masked positions in the matrix. Args: * atom_array: AtomArray with bp_partners annotation at atom level * token_starts (optional): indices of token starts in the atom array * n_tokens (optional): number of tokens (length of token_starts) - * return_as_onehot (optional): if False, return integer-encoded + * return_as_onehot (optional): if False, return integer-encoded matrix instead of one-hot encoded matrix returns: * na_ss_matrix: If ``return_as_onehot`` is True (default): - np.ndarray of shape (n_tokens, n_tokens, n_classes) + np.ndarray of shape (n_tokens, n_tokens, n_classes) with one-hot encoded values according to BasePairEnum If ``return_as_onehot`` is False : - np.ndarray of shape (n_tokens, n_tokens) + np.ndarray of shape (n_tokens, n_tokens) with int values according to BasePairEnum @@ -51,13 +52,16 @@ def na_ss_feats_from_annotation(atom_array: AtomArray, if (token_starts is None) or (n_tokens is None): token_starts = get_token_starts(atom_array) n_tokens = len(token_starts) - # Collect token inds for paired or loop positions: pair_inds = [] loop_inds = [] - token_bp_partners = atom_array.get_annotation("bp_partners")[token_starts] # get bp_partners at token level - assert len(token_bp_partners) == n_tokens, "Length of token_bp_partners should match n_tokens" + token_bp_partners = atom_array.get_annotation("bp_partners")[ + token_starts + ] # get bp_partners at token level + assert ( + len(token_bp_partners) == n_tokens + ), "Length of token_bp_partners should match n_tokens" for i, j_list in enumerate(token_bp_partners): if j_list is not None: if len(j_list) > 0: @@ -68,46 +72,54 @@ def na_ss_feats_from_annotation(atom_array: AtomArray, # The standard system for constructing meaningful base pair features: # 0). Initialize with values of UNSPECIFIED (0): int matrix of shape (n_tokens, n_tokens) - na_ss_matrix = np.full((n_tokens, n_tokens), DEFAULT_NA_SS_FEATURE_INFO["NA_SS_MASK"], dtype=np.int64) + na_ss_matrix = np.full( + (n_tokens, n_tokens), DEFAULT_NA_SS_FEATURE_INFO["NA_SS_MASK"], dtype=np.int64 + ) # 1). Fill in with values of PAIR (1) at positions that have bp_partners annotated as a non-empty list for pair_i, pair_j in pair_inds: na_ss_matrix[pair_i, pair_j] = DEFAULT_NA_SS_FEATURE_INFO["NA_SS_PAIR"] - na_ss_matrix[pair_j, pair_i] = DEFAULT_NA_SS_FEATURE_INFO["NA_SS_PAIR"] # ensure symmetry + na_ss_matrix[pair_j, pair_i] = DEFAULT_NA_SS_FEATURE_INFO[ + "NA_SS_PAIR" + ] # ensure symmetry # 2). Fill in with values of LOOP (2) at positions that have bp_partners annotated as an empty list (explicitly unpaired) # (we make full stripes across that position's row/col to indicate that NONE of those other positions are paired ) for loop_i in loop_inds: na_ss_matrix[loop_i, :] = DEFAULT_NA_SS_FEATURE_INFO["NA_SS_LOOP"] - na_ss_matrix[:, loop_i] = DEFAULT_NA_SS_FEATURE_INFO["NA_SS_LOOP"] # ensure symmetry - + na_ss_matrix[:, loop_i] = DEFAULT_NA_SS_FEATURE_INFO[ + "NA_SS_LOOP" + ] # ensure symmetry + # Optional: convert NA-SS matrix to one-hot encoding according for model input: if return_as_onehot: - na_ss_matrix = np.eye(len(DEFAULT_NA_SS_FEATURE_INFO), dtype=np.int64)[na_ss_matrix] - + na_ss_matrix = np.eye(len(DEFAULT_NA_SS_FEATURE_INFO), dtype=np.int64)[ + na_ss_matrix + ] + return na_ss_matrix class CalculateNucleicAcidGeomFeats(Transform): """ - Transform for constructing nucleic-acid conditioning features. + Transform for constructing nucleic-acid conditioning features. - This transform currently produces only nucleic-acid secondary-structure (NA-SS) - features as a 2D token-token matrix with 3 bins: - * 0: mask / unspecified - * 1: paired - * 2: loop / explicitly unpaired + This transform currently produces only nucleic-acid secondary-structure (NA-SS) + features as a 2D token-token matrix with 3 bins: + * 0: mask / unspecified + * 1: paired + * 2: loop / explicitly unpaired - Training: - - Computes geometry/H-bond-based base pairs and writes them onto the AtomArray - via the ``bp_partners`` annotation (annotation-first), then reconstructs the - matrix (and optionally masks parts of it) before one-hot encoding. + Training: + - Computes geometry/H-bond-based base pairs and writes them onto the AtomArray + via the ``bp_partners`` annotation (annotation-first), then reconstructs the + matrix (and optionally masks parts of it) before one-hot encoding. - Inference: - - Interprets user-provided secondary-structure specifications, writes the same - ``bp_partners`` annotation, then follows the same matrix + one-hot path. + Inference: + - Interprets user-provided secondary-structure specifications, writes the same + ``bp_partners`` annotation, then follows the same matrix + one-hot path. - Note: helical-parameter features are not implemented/used in this refactored path. + Note: helical-parameter features are not implemented/used in this refactored path. """ def __init__( @@ -115,43 +127,46 @@ def __init__( is_inference, # Conditional sampling parameters all stored in this dict: meta_conditioning_probabilities: dict[str, float] = None, - # Mask control paramerers: nucleic_ss_min_shown: float = 0.2, nucleic_ss_max_shown: float = 1.0, n_islands_min: int = 1, n_islands_max: int = 6, - # USE_RF2AA_NAMES: bool = False, NA_only: bool = False, - planar_only : bool = True, - + planar_only: bool = True, ): # Critical, must always have to know how to handle - self.is_inference = is_inference - + self.is_inference = is_inference + self.meta_conditioning_probabilities = meta_conditioning_probabilities or {} - + # Control whether we show some nucleic SS or default to full 2D mask - self.p_is_nucleic_ss_example = self.meta_conditioning_probabilities.get("p_is_nucleic_ss_example", 0.0) + self.p_is_nucleic_ss_example = self.meta_conditioning_probabilities.get( + "p_is_nucleic_ss_example", 0.0 + ) # Control whether we define full SS or just part of it (only applies if is NA SS example) - self.p_show_partial_feats = self.meta_conditioning_probabilities.get("p_nucleic_ss_show_partial_feats", 0.0) + self.p_show_partial_feats = self.meta_conditioning_probabilities.get( + "p_nucleic_ss_show_partial_feats", 0.0 + ) # Some frac of time default to only showing canonical base pairs - self.p_canonical_bp_filter = self.meta_conditioning_probabilities.get("p_canonical_bp_filter", 0.5) - + self.p_canonical_bp_filter = self.meta_conditioning_probabilities.get( + "p_canonical_bp_filter", 0.5 + ) + # mask patterning control to make things resemble design scenarios - self.nucleic_ss_min_shown = nucleic_ss_min_shown - self.nucleic_ss_max_shown = nucleic_ss_max_shown - self.n_islands_min = n_islands_min - self.n_islands_max = n_islands_max + self.nucleic_ss_min_shown = nucleic_ss_min_shown + self.nucleic_ss_max_shown = nucleic_ss_max_shown + self.n_islands_min = n_islands_min + self.n_islands_max = n_islands_max # Filters for what can be considered a planar contact interaction - self.NA_only = NA_only # only annotate base-like interactions for nucleic acid residues - self.planar_only = planar_only # only consider planar atoms in sidechains for geometry calculations, - - + self.NA_only = ( + NA_only # only annotate base-like interactions for nucleic acid residues + ) + self.planar_only = planar_only # only consider planar atoms in sidechains for geometry calculations, def check_input(self, data: dict[str, Any]) -> None: check_contains_keys(data, ["atom_array"]) @@ -162,9 +177,7 @@ def check_input(self, data: dict[str, Any]) -> None: def _sample_training_flags(self) -> tuple[bool, bool]: """Sample booleans controlling whether/how features are shown in training.""" is_nucleic_ss_example = bool(np.random.rand() < self.p_is_nucleic_ss_example) - give_partial_feats = bool( - np.random.rand() < self.p_show_partial_feats - ) + give_partial_feats = bool(np.random.rand() < self.p_show_partial_feats) return is_nucleic_ss_example, give_partial_feats def forward(self, data: dict) -> dict: @@ -177,24 +190,25 @@ def forward(self, data: dict) -> dict: # Handle the training case with ground truth and masking if not self.is_inference: - # First, annotate as usual is_nucleic_ss_example, give_partial_feats = self._sample_training_flags() if is_nucleic_ss_example: - - atom_array = annotate_na_ss(atom_array, - NA_only=self.NA_only, - planar_only=self.planar_only, - p_canonical_bp_filter=self.p_canonical_bp_filter, - ) + atom_array = annotate_na_ss( + atom_array, + NA_only=self.NA_only, + planar_only=self.planar_only, + p_canonical_bp_filter=self.p_canonical_bp_filter, + ) # Generate symmetric partner annotations at the token level for masking purposes. # choice for object-consistency: if already masked/undefined: be a list mapping to self-index. partner_sym_map = { - i: atom_array.bp_partners[ts_i] if atom_array.bp_partners[ts_i] is not None else [i] + i: atom_array.bp_partners[ts_i] + if atom_array.bp_partners[ts_i] is not None + else [i] for i, ts_i in enumerate(token_starts) - } + } # # Sample mask on token level: token_mask_to_show = self._sample_where_to_show_ss( @@ -206,17 +220,19 @@ def forward(self, data: dict) -> dict: # Spread mask to atom level is_ss_shown = spread_token_wise(atom_array, token_mask_to_show) - + # Extract the base pair annotations bp_partners_atom = atom_array.get_annotation("bp_partners") # Remove unshown positions from bp_partners annotation bp_partners_atom[~is_ss_shown] = None - + # Reset the annotation with newly hidden positions atom_array.set_annotation("bp_partners", bp_partners_atom) else: - atom_array.set_annotation("bp_partners", np.array([None]*len(atom_array))) + atom_array.set_annotation( + "bp_partners", np.array([None] * len(atom_array)) + ) # Inference case: create from commandline args else: @@ -239,25 +255,26 @@ def forward(self, data: dict) -> dict: log_dict = data["log_dict"] data["log_dict"] = log_dict data["atom_array"] = atom_array - - return data + return data - def _sample_where_to_show_ss(self, n_tokens: int, - is_nucleic_ss_example: bool = True, - give_partial_feats: bool = True, - partner_sym_map: dict[int, list[int]] = None, - ) -> np.ndarray: + def _sample_where_to_show_ss( + self, + n_tokens: int, + is_nucleic_ss_example: bool = True, + give_partial_feats: bool = True, + partner_sym_map: dict[int, list[int]] = None, + ) -> np.ndarray: """Sample token-level islands indicating which SS rows/cols to reveal. - This custom function allows for enforcing symmetry in the shown features according - to the partner_sym_map, which encodes which tokens are partners in the SS - matrix and thus should be masked/unmasked together to maintain consistency. - + This custom function allows for enforcing symmetry in the shown features according + to the partner_sym_map, which encodes which tokens are partners in the SS + matrix and thus should be masked/unmasked together to maintain consistency. + """ # If NOT is_nucleic_ss_example, set is_shown to all False if not is_nucleic_ss_example: token_mask_to_show = np.zeros((n_tokens,), dtype=bool) - + # If NOT give_partial_feats, set is_shown to all True if not give_partial_feats: token_mask_to_show = np.ones((n_tokens,), dtype=bool) @@ -265,14 +282,19 @@ def _sample_where_to_show_ss(self, n_tokens: int, # Get numerical parameters for that govern the mask pattern frac_shown = ( self.nucleic_ss_min_shown - + (self.nucleic_ss_max_shown - self.nucleic_ss_min_shown) * np.random.rand() + + (self.nucleic_ss_max_shown - self.nucleic_ss_min_shown) + * np.random.rand() ) frac_shown = float(np.clip(frac_shown, 0.0, 1.0)) max_length = int(np.ceil(frac_shown * n_tokens)) if max_length <= 0: token_mask_to_show = np.zeros((n_tokens,), dtype=bool) - island_len_min = max(1, int(frac_shown * n_tokens // max(int(self.n_islands_max), 1))) - island_len_max = max(1, int(frac_shown * n_tokens // max(int(self.n_islands_min), 1))) + island_len_min = max( + 1, int(frac_shown * n_tokens // max(int(self.n_islands_max), 1)) + ) + island_len_max = max( + 1, int(frac_shown * n_tokens // max(int(self.n_islands_min), 1)) + ) island_len_min = min(island_len_min, n_tokens) island_len_max = min(island_len_max, n_tokens) island_len_max = max(island_len_max, island_len_min) @@ -287,7 +309,7 @@ def _sample_where_to_show_ss(self, n_tokens: int, max_length=max_length, ) - # Handle symmetry by iterating through the partner_sym_map items and setting + # Handle symmetry by iterating through the partner_sym_map items and setting # `partner_mask_to_show` at partner positions to match `token_mask_to_show` # initialize as all shown so effect comes from hiding + logical AND condition partner_mask_to_show = np.ones_like(token_mask_to_show) @@ -299,4 +321,3 @@ def _sample_where_to_show_ss(self, n_tokens: int, token_mask_to_show = token_mask_to_show & partner_mask_to_show return token_mask_to_show - diff --git a/models/rfd3/src/rfd3/transforms/na_geom_utils.py b/models/rfd3/src/rfd3/transforms/na_geom_utils.py index 453e3640..7a4dd911 100644 --- a/models/rfd3/src/rfd3/transforms/na_geom_utils.py +++ b/models/rfd3/src/rfd3/transforms/na_geom_utils.py @@ -1,22 +1,22 @@ +import math import os import subprocess +import tempfile from datetime import datetime from typing import Dict, Optional -import math -import numpy as np -import biotite.structure as struc -from biotite.structure import AtomArray +import biotite.structure as struc +import numpy as np from atomworks.constants import ( - STANDARD_AA, + STANDARD_AA, STANDARD_DNA, STANDARD_RNA, ) - from atomworks.io.utils.sequence import ( is_purine, is_pyrimidine, ) +from atomworks.ml.encoding_definitions import AF3SequenceEncoding from atomworks.ml.utils.token import ( get_token_starts, is_glycine, @@ -24,15 +24,12 @@ is_standard_aa_not_glycine, is_unknown_nucleotide, ) -from rfd3.transforms.hbonds_hbplus import save_atomarray_to_pdb - -from atomworks.ml.encoding_definitions import AF3SequenceEncoding - +from biotite.structure import AtomArray from rfd3.constants import ( -ATOM_REGION_BY_RESI, -PLANAR_ATOMS_BY_RESI, + ATOM_REGION_BY_RESI, + PLANAR_ATOMS_BY_RESI, ) -import tempfile +from rfd3.transforms.hbonds_hbplus import save_atomarray_to_pdb # Derived: True when the residue has any planar sidechain atoms HAS_PLANAR_SC = {res: bool(atoms) for res, atoms in PLANAR_ATOMS_BY_RESI.items()} @@ -43,15 +40,23 @@ "NA_SS_LOOP": 2, } -AA_PLANAR_ATOMS = sorted(set( - atom for res in STANDARD_AA if res in PLANAR_ATOMS_BY_RESI - for atom in PLANAR_ATOMS_BY_RESI[res] -)) +AA_PLANAR_ATOMS = sorted( + set( + atom + for res in STANDARD_AA + if res in PLANAR_ATOMS_BY_RESI + for atom in PLANAR_ATOMS_BY_RESI[res] + ) +) -NA_PLANAR_ATOMS = sorted(set( - atom for res in (*STANDARD_RNA, *STANDARD_DNA) if res in PLANAR_ATOMS_BY_RESI - for atom in PLANAR_ATOMS_BY_RESI[res] -)) +NA_PLANAR_ATOMS = sorted( + set( + atom + for res in (*STANDARD_RNA, *STANDARD_DNA) + if res in PLANAR_ATOMS_BY_RESI + for atom in PLANAR_ATOMS_BY_RESI[res] + ) +) class NucMolInfo: @@ -62,53 +67,126 @@ class NucMolInfo: """ def __init__(self) -> None: - - # Hbond interaction-class indices of the `hbond_count`` array: - # `hbond_count`` array is (L, L, 3), where the last dimension + # `hbond_count`` array is (L, L, 3), where the last dimension # encodes interaction type between tokens i & j - self.BB_BB = 0 # backbone-backbone hbond interactions - self.BB_SC = 1 # backbone-sidechain hbond interactions - self.SC_SC = 2 # sidechain-sidechain hbond interactions + self.BB_BB = 0 # backbone-backbone hbond interactions + self.BB_SC = 1 # backbone-sidechain hbond interactions + self.SC_SC = 2 # sidechain-sidechain hbond interactions - # We sum over the last dimension of the hbond_count array, scaling + # We sum over the last dimension of the hbond_count array, scaling # count by the following weights to get the interaction score: self.bp_weight_BB_BB = 0.0 self.bp_weight_BB_SC = 0.5 self.bp_weight_SC_SC = 1.0 - self.bp_summation_weights = [self.bp_weight_BB_BB, - self.bp_weight_BB_SC, - self.bp_weight_SC_SC] + self.bp_summation_weights = [ + self.bp_weight_BB_BB, + self.bp_weight_BB_SC, + self.bp_weight_SC_SC, + ] - # Parameters fo sigmoid function that gives us a continuous step function for + # Parameters fo sigmoid function that gives us a continuous step function for # meeting basepair interaction criteria based on hbond counts alone (1st filter). # Calibrated such that: # >= 2 base-base H-bonds -> ~1.0 # 1 base-base H-bond + 1 base-backbone H-bond -> ~0.5 self.min_hbonds_for_bp = 2.0 - self.bp_hbond_coeff = 9.8 # determined heuristically - self.bp_val_cutoff = 0.5 # minimum basepairing score for binarizing basepairs when needed + self.bp_hbond_coeff = 9.8 # determined heuristically + self.bp_val_cutoff = ( + 0.5 # minimum basepairing score for binarizing basepairs when needed + ) self.base_geometry_limits = {} - self.base_geometry_limits['D_ij'] = 16.0 - self.base_geometry_limits['H_ij'] = 1.5 - self.base_geometry_limits['P_ij'] = math.pi/5 - self.base_geometry_limits['B_ij'] = math.pi/5 + self.base_geometry_limits["D_ij"] = 16.0 + self.base_geometry_limits["H_ij"] = 1.5 + self.base_geometry_limits["P_ij"] = math.pi / 5 + self.base_geometry_limits["B_ij"] = math.pi / 5 - self.rep_atom_dict={"protein": "CA", "rna": "C1'", "dna": "C1'"} + self.rep_atom_dict = {"protein": "CA", "rna": "C1'", "dna": "C1'"} # go through self.vec_atom_dict and remove spaces from atom names (values in inner dicts), and remove spaces from keys + replace 'R' with '' in outer dict keys self.vec_atom_dict = { - "DA": {"W_start":"N1", "W_stop":"N6", "H_start":"N7", "H_stop":"N6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, - "DG": {"W_start":"N1", "W_stop":"O6", "H_start":"N7", "H_stop":"O6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, - "DC": {"W_start":"N3", "W_stop":"N4", "H_start":"C5", "H_stop":"N4", "S_start":"C1'", "S_stop":"O2", "B_start":"C1'", "B_stop":"N1" }, - "DT": {"W_start":"N3", "W_stop":"O4", "H_start":"C5", "H_stop":"O4", "S_start":"C1'", "S_stop":"O2", "B_start":"C1'", "B_stop":"N1" }, - "A": {"W_start":"N1", "W_stop":"N6", "H_start":"N7", "H_stop":"N6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, - "G": {"W_start":"N1", "W_stop":"O6", "H_start":"N7", "H_stop":"O6", "S_start":"C1'", "S_stop":"N3", "B_start":"C1'", "B_stop":"N9" }, - "C": {"W_start":"N3", "W_stop":"N4", "H_start":"C5", "H_stop":"N4", "S_start":"C1'", "S_stop":"O2", "B_start":"C1'", "B_stop":"N1" }, - "U": {"W_start":"N3", "W_stop":"O4", "H_start":"C5", "H_stop":"O4", "S_start":"C1'", "S_stop":"O2", "B_start":"C1'", "B_stop":"N1" }, - } - + "DA": { + "W_start": "N1", + "W_stop": "N6", + "H_start": "N7", + "H_stop": "N6", + "S_start": "C1'", + "S_stop": "N3", + "B_start": "C1'", + "B_stop": "N9", + }, + "DG": { + "W_start": "N1", + "W_stop": "O6", + "H_start": "N7", + "H_stop": "O6", + "S_start": "C1'", + "S_stop": "N3", + "B_start": "C1'", + "B_stop": "N9", + }, + "DC": { + "W_start": "N3", + "W_stop": "N4", + "H_start": "C5", + "H_stop": "N4", + "S_start": "C1'", + "S_stop": "O2", + "B_start": "C1'", + "B_stop": "N1", + }, + "DT": { + "W_start": "N3", + "W_stop": "O4", + "H_start": "C5", + "H_stop": "O4", + "S_start": "C1'", + "S_stop": "O2", + "B_start": "C1'", + "B_stop": "N1", + }, + "A": { + "W_start": "N1", + "W_stop": "N6", + "H_start": "N7", + "H_stop": "N6", + "S_start": "C1'", + "S_stop": "N3", + "B_start": "C1'", + "B_stop": "N9", + }, + "G": { + "W_start": "N1", + "W_stop": "O6", + "H_start": "N7", + "H_stop": "O6", + "S_start": "C1'", + "S_stop": "N3", + "B_start": "C1'", + "B_stop": "N9", + }, + "C": { + "W_start": "N3", + "W_stop": "N4", + "H_start": "C5", + "H_stop": "N4", + "S_start": "C1'", + "S_stop": "O2", + "B_start": "C1'", + "B_stop": "N1", + }, + "U": { + "W_start": "N3", + "W_stop": "O4", + "H_start": "C5", + "H_stop": "O4", + "S_start": "C1'", + "S_stop": "O2", + "B_start": "C1'", + "B_stop": "N1", + }, + } def calculate_hb_counts( @@ -117,7 +195,7 @@ def calculate_hb_counts( mol_info: NucMolInfo, cutoff_HA_dist: float = 2.5, cutoff_DA_dist: float = 3.9, - ): +): """Count hydrogen bonds between residue pairs using HBPLUS. Args: @@ -195,14 +273,16 @@ def calculate_hb_counts( ) # d_atm = atom_array[d_mask] # d_idx = d_atm.token_id - d_idx = token_level_data["resi2index"].get(f"{d_chain_iid}__{d_resi}", None) + d_idx = token_level_data["resi2index"].get( + f"{d_chain_iid}__{d_resi}", None + ) if d_idx is None: continue # Handle standard polymer residues for donor atom: if d_resn in ATOM_REGION_BY_RESI.keys(): - d_is_sc = (d_atom_name in ATOM_REGION_BY_RESI[d_resn]['sc']) - d_is_bb = (d_atom_name in ATOM_REGION_BY_RESI[d_resn]['bb']) + d_is_sc = d_atom_name in ATOM_REGION_BY_RESI[d_resn]["sc"] + d_is_bb = d_atom_name in ATOM_REGION_BY_RESI[d_resn]["bb"] else: # If non-polymer, define any ligand HBonding atom as backbone: if d_mask.sum() > 0: @@ -219,45 +299,51 @@ def calculate_hb_counts( & (atom_array.res_id == a_resi) & (atom_array.chain_iid == a_chain_iid) ) - a_idx = token_level_data["resi2index"].get(f"{a_chain_iid}__{a_resi}", None) + a_idx = token_level_data["resi2index"].get( + f"{a_chain_iid}__{a_resi}", None + ) if a_idx is None: continue # Handle standard polymer residues for acceptor atom: if a_resn in ATOM_REGION_BY_RESI.keys(): - a_is_sc = (a_atom_name in ATOM_REGION_BY_RESI[a_resn]['sc']) - a_is_bb = (a_atom_name in ATOM_REGION_BY_RESI[a_resn]['bb']) + a_is_sc = a_atom_name in ATOM_REGION_BY_RESI[a_resn]["sc"] + a_is_bb = a_atom_name in ATOM_REGION_BY_RESI[a_resn]["bb"] else: # If non-polymer, define any ligand HBonding atom as backbone: if a_mask.sum() > 0: a_is_bb = atom_array[a_mask][0].is_ligand # 0 -> both backbone (BB-BB) - hbond_count[a_idx, d_idx, 0] += (a_is_bb * d_is_bb) - hbond_count[d_idx, a_idx, 0] += (d_is_bb * a_is_bb) + hbond_count[a_idx, d_idx, 0] += a_is_bb * d_is_bb + hbond_count[d_idx, a_idx, 0] += d_is_bb * a_is_bb # 1 -> one backbone, one sidechain (BB-SC) - hbond_count[a_idx, d_idx, 1] += (a_is_bb * d_is_sc) | (a_is_sc * d_is_bb) - hbond_count[d_idx, a_idx, 1] += (d_is_bb * a_is_sc) | (d_is_sc * a_is_bb) + hbond_count[a_idx, d_idx, 1] += (a_is_bb * d_is_sc) | ( + a_is_sc * d_is_bb + ) + hbond_count[d_idx, a_idx, 1] += (d_is_bb * a_is_sc) | ( + d_is_sc * a_is_bb + ) # 2 -> both sidechain (SC-SC) - hbond_count[a_idx, d_idx, 2] += (a_is_sc * d_is_sc) - hbond_count[d_idx, a_idx, 2] += (d_is_sc * a_is_sc) - ''' + hbond_count[a_idx, d_idx, 2] += a_is_sc * d_is_sc + hbond_count[d_idx, a_idx, 2] += d_is_sc * a_is_sc + """ try: os.remove(pdb_path) os.remove(hb2_path) except: print("temp pdb/hb already removed or not created to begin with") - ''' + """ return hbond_count def find_planar_positions( - atom_array: AtomArray, - mol_info: NucMolInfo, - tol: float = 1e-2, - ) -> Dict: + atom_array: AtomArray, + mol_info: NucMolInfo, + tol: float = 1e-2, +) -> Dict: """Identify residues with planar sidechains via known atom lists or PCA plane-fitting. For canonical residues the planar atoms are looked up from ``mol_info``; @@ -285,11 +371,10 @@ def find_planar_positions( # for chain_iid, res_id in unique_positions_list: for chain_iid, res_id, res_name in unique_positions_list: - mask = ( - (atom_array.chain_iid == chain_iid) & - (atom_array.res_id == res_id) & - (atom_array.res_name == res_name) + (atom_array.chain_iid == chain_iid) + & (atom_array.res_id == res_id) + & (atom_array.res_name == res_name) ) res_atoms = atom_array[mask] @@ -297,9 +382,9 @@ def find_planar_positions( if res_name in PLANAR_ATOMS_BY_RESI.keys(): # Shared atoms between residue and known planar atoms for that residue type: planar_atom_list = list( - set([atm.atom_name for atm in res_atoms]) & - set(PLANAR_ATOMS_BY_RESI[res_name]) - ) + set([atm.atom_name for atm in res_atoms]) + & set(PLANAR_ATOMS_BY_RESI[res_name]) + ) planar_atom_list_dict[(chain_iid, res_id)] = planar_atom_list # If unknown or noncanonical residue, compute planar atoms geometrically: @@ -337,7 +422,9 @@ def find_planar_positions( all_quad_centered = coords - quad_center quad_centered = quad_coords - quad_center # covariance matrix - quad_cov = (quad_centered.T @ quad_centered) / max(quad_coords.shape[0] - 1, 1) + quad_cov = (quad_centered.T @ quad_centered) / max( + quad_coords.shape[0] - 1, 1 + ) # eigen decomposition _, quad_eigvecs = np.linalg.eigh(quad_cov) quad_normal = quad_eigvecs[:, 0] # eigenvector with smallest eigenvalue @@ -348,34 +435,39 @@ def find_planar_positions( quad_valid_mask = quad_dists <= tol # Filter for if we have a valid plane in the first place: - valid_plane_filter = (np.nanmax(quad_dists[:4]) < tol) + valid_plane_filter = np.nanmax(quad_dists[:4]) < tol # Filter for if we have enough atoms in the plane: - plane_atom_filter = (int(np.sum(quad_valid_mask)) >= 4) + plane_atom_filter = int(np.sum(quad_valid_mask)) >= 4 if valid_plane_filter and plane_atom_filter: - # Set the planar atom list for this position to those that are within tol of the plane: + # Set the planar atom list for this position to those that are within tol of the plane: # using quad_valid_mask and candidate_planar_atm_names: - planar_atom_list = [n for n, keep in zip(candidate_planar_atm_names, quad_valid_mask.tolist()) if keep] - + planar_atom_list = [ + n + for n, keep in zip( + candidate_planar_atm_names, quad_valid_mask.tolist() + ) + if keep + ] + # not enough atoms close to a common plane else: planar_atom_list = [] else: - # need at least 4 atoms to define a robust plane planar_atom_list = [] - - planar_atom_list_dict[(chain_iid, res_id)] = planar_atom_list + planar_atom_list_dict[(chain_iid, res_id)] = planar_atom_list return planar_atom_list_dict -def make_coord_list(atom_array: AtomArray, - residue_list: list[str], - chain_list: list[str], - atom_list: list[str], - ) -> list[list[str]]: +def make_coord_list( + atom_array: AtomArray, + residue_list: list[str], + chain_list: list[str], + atom_list: list[str], +) -> list[list[str]]: """Extract per-residue representative coordinates from an AtomArray. All three input lists must have the same length. Missing atoms are @@ -393,24 +485,20 @@ def make_coord_list(atom_array: AtomArray, """ coord_list = [] for res_id, chain_id, atom_name in zip(residue_list, chain_list, atom_list): - # Check if the residue exists in the atom array if atom_name == "atomized": # Check for atomized residue, in which case we take the first atom of the residue # full mask should be length-1 if atomized - mask = ( - (atom_array.chain_id == chain_id) & - (atom_array.res_id == res_id) - ) + mask = (atom_array.chain_id == chain_id) & (atom_array.res_id == res_id) else: # General case for non-atomized residues # should have a unique solution, but we take the first entry either way. mask = ( - (atom_array.chain_id == chain_id) & - (atom_array.res_id == res_id) & - (atom_array.atom_name == atom_name) - ) - + (atom_array.chain_id == chain_id) + & (atom_array.res_id == res_id) + & (atom_array.atom_name == atom_name) + ) + # Get the coordinates for the masked atoms coords = atom_array.coord[mask][0:1] @@ -428,8 +516,8 @@ def get_token_level_metadata( *, NA_only: bool = False, planar_only: bool = True, - seq_cutoff = 2, - gap_length = 200 + seq_cutoff=2, + gap_length=200, ) -> dict: """Build lightweight token-level metadata (no coordinate geometry). @@ -468,9 +556,21 @@ def get_token_level_metadata( # molecule type flags # Instantiate encoding locally to avoid retaining large arrays at module scope. sequence_encoding = AF3SequenceEncoding() - is_protein = np.isin(token_level_array.res_name, sequence_encoding.all_res_names[sequence_encoding.is_aa_like]) - is_rna = np.isin(token_level_array.res_name, sequence_encoding.all_res_names[sequence_encoding.is_rna_like]) - is_dna = np.isin(token_level_array.res_name, sequence_encoding.all_res_names[sequence_encoding.is_dna_like]) + + ################### + # is_protein = np.isin( + # token_level_array.res_name, + # sequence_encoding.all_res_names[sequence_encoding.is_aa_like], + # ) + ################## + is_rna = np.isin( + token_level_array.res_name, + sequence_encoding.all_res_names[sequence_encoding.is_rna_like], + ) + is_dna = np.isin( + token_level_array.res_name, + sequence_encoding.all_res_names[sequence_encoding.is_dna_like], + ) is_na_arr = (is_dna | is_rna).astype(bool) @@ -500,7 +600,7 @@ def get_token_level_metadata( sc_planarity_list.append(False) # representative & sugar-edge atoms - if (is_glycine(atm.res_name) | is_protein_unknown(atm.res_name)): + if is_glycine(atm.res_name) | is_protein_unknown(atm.res_name): rep_atom_i = "CA" S_start_atom_i = None S_stop_atom_i = None @@ -534,7 +634,9 @@ def get_token_level_metadata( S_stop_atom_list.append(S_stop_atom_i) # residue index <-> token index map - resi2index = {f"{c}__{r}": i for c, r, i in zip(chain_iid_list, resi_list, ind_list)} + resi2index = { + f"{c}__{r}": i for c, r, i in zip(chain_iid_list, resi_list, ind_list) + } # relative sequence positions w/ chain gaps rel_pos_list: list[int] = [] @@ -547,9 +649,7 @@ def get_token_level_metadata( rel_pos_list.append(int(r + chn_bias)) rel_pos = np.asarray(rel_pos_list, dtype=np.int64) - seq_neighbors = ( - np.abs(rel_pos[:, None] - rel_pos[None, :]) <= int(seq_cutoff) - ) + seq_neighbors = np.abs(rel_pos[:, None] - rel_pos[None, :]) <= int(seq_cutoff) na_inds = np.nonzero(is_na_arr)[0].tolist() na_tensor_inds = {na_i: i for i, na_i in enumerate(na_inds)} @@ -647,12 +747,16 @@ def add_token_level_geometry_data( S_start_atom_list: list[str | None] = token_level_data["S_start_atom_list"] S_stop_atom_list: list[str | None] = token_level_data["S_stop_atom_list"] - planar_atom_list_dict = find_planar_positions(atom_array, mol_info) # {(chain_iid, res_id): [atom_name, ...]} + planar_atom_list_dict = find_planar_positions( + atom_array, mol_info + ) # {(chain_iid, res_id): [atom_name, ...]} has_planar_sc: list[bool] = [] - xyz_planar: list[list[list[float]]] = [] # list[I] of [K_i, 3] (K_i varies per residue) - xyz_S_start: list[list[float]] = [] # list[I] of [3] - xyz_S_stop: list[list[float]] = [] # list[I] of [3] + xyz_planar: list[ + list[list[float]] + ] = [] # list[I] of [K_i, 3] (K_i varies per residue) + xyz_S_start: list[list[float]] = [] # list[I] of [3] + xyz_S_stop: list[list[float]] = [] # list[I] of [3] for c, r, S_start_atm, S_stop_atm in zip( chain_iid_list, @@ -663,7 +767,9 @@ def add_token_level_geometry_data( planar_atoms_i = planar_atom_list_dict[(c, r)] has_planar_sc.append(bool(len(planar_atoms_i) >= 4)) - atom_array_i = atom_array[(atom_array.chain_iid == c) & (atom_array.res_id == r)] + atom_array_i = atom_array[ + (atom_array.chain_iid == c) & (atom_array.res_id == r) + ] planar_coords_i: list[list[float]] = [] for pl_atm_name_j in planar_atoms_i: @@ -673,7 +779,9 @@ def add_token_level_geometry_data( else: planar_coords_i.append(pl_atom_array_ij[0].coord) - xyz_planar.append(planar_coords_i if len(planar_coords_i) > 3 else [[float("nan")] * 3]) + xyz_planar.append( + planar_coords_i if len(planar_coords_i) > 3 else [[float("nan")] * 3] + ) if S_start_atm is None: xyz_S_start.append([float("nan"), float("nan"), float("nan")]) @@ -698,21 +806,26 @@ def add_token_level_geometry_data( del atom_array_i # frame coordinates and backbone direction - frame_xyz = np.asarray( # [I, 3] representative-atom coordinates + frame_xyz = np.asarray( # [I, 3] representative-atom coordinates make_coord_list(atom_array, resi_list, chain_list, rep_atom_list), dtype=np.float32, ) - padded_centers = np.concatenate([frame_xyz[:1], frame_xyz, frame_xyz[-1:]], axis=0) # [I+2, 3] - M_i = ( # [I, 3] smoothed backbone-direction vectors - (padded_centers[1:-1] - padded_centers[:-2]) - + (padded_centers[2:] - padded_centers[1:-1]) - ) / 2.0 + padded_centers = np.concatenate( + [frame_xyz[:1], frame_xyz, frame_xyz[-1:]], axis=0 + ) # [I+2, 3] + M_i = ( + ( # [I, 3] smoothed backbone-direction vectors + (padded_centers[1:-1] - padded_centers[:-2]) + + (padded_centers[2:] - padded_centers[1:-1]) + ) + / 2.0 + ) - is_planar_arr = np.asarray(has_planar_sc, dtype=bool) # [I] + is_planar_arr = np.asarray(has_planar_sc, dtype=bool) # [I] token_level_data["is_planar"] = is_planar_arr - is_na_arr = np.asarray(token_level_data["is_na"], dtype=bool) # [I] + is_na_arr = np.asarray(token_level_data["is_na"], dtype=bool) # [I] if NA_only and planar_only: filter_mask = is_na_arr & is_planar_arr elif NA_only and (not planar_only): @@ -721,7 +834,7 @@ def add_token_level_geometry_data( filter_mask = is_planar_arr.copy() else: filter_mask = np.ones_like(is_na_arr, dtype=bool) - token_level_data["filter_mask"] = filter_mask # [I] bool + token_level_data["filter_mask"] = filter_mask # [I] bool token_level_data.update( { @@ -777,7 +890,7 @@ def _compute_local_frames( n_tokens = len(xyz_planar) # Mean-centre the planar atoms per residue - centered_points = [ # list[I] of [K_i, 3] + centered_points = [ # list[I] of [K_i, 3] np.asarray(xyz_i, dtype=np.float32) - cen_i for xyz_i, cen_i in zip(xyz_planar, planar_centers) ] @@ -857,19 +970,23 @@ def _compute_pairwise_geometry( ``"Z_ij"`` [I, I, 3], and optionally ``"O_ij"`` [I, I]. """ # Orientation-selected pairwise Z-axis - Z_sum = Z_i[:, None, :] + Z_i[None, :, :] # [I, I, 3] - Z_diff = Z_i[:, None, :] - Z_i[None, :, :] # [I, I, 3] + Z_sum = Z_i[:, None, :] + Z_i[None, :, :] # [I, I, 3] + Z_diff = Z_i[:, None, :] - Z_i[None, :, :] # [I, I, 3] Z_ij_oris = 0.5 * np.stack((Z_sum, Z_diff), axis=0) # [2, I, I, 3] base_ori_ij = ( # [I, I] 0=parallel, 1=antiparallel np.linalg.norm(Z_ij_oris[1], axis=-1) > np.linalg.norm(Z_ij_oris[0], axis=-1) ).astype(np.int64) - Z_ij = np.where(base_ori_ij[..., None] == 0, Z_ij_oris[0], Z_ij_oris[1]) # [I, I, 3] + Z_ij = np.where( + base_ori_ij[..., None] == 0, Z_ij_oris[0], Z_ij_oris[1] + ) # [I, I, 3] Z_ij = Z_ij / (np.linalg.norm(Z_ij, axis=-1, keepdims=True) + eps) # Pairwise Y (inter-residue direction) and X axes - Y_ij = frame_D_ij_vec / (np.linalg.norm(frame_D_ij_vec, axis=-1, keepdims=True) + eps) # [I, I, 3] + Y_ij = frame_D_ij_vec / ( + np.linalg.norm(frame_D_ij_vec, axis=-1, keepdims=True) + eps + ) # [I, I, 3] X_ij = np.cross(Z_ij, Y_ij) # [I, I, 3] X_ij = X_ij / (np.linalg.norm(X_ij, axis=-1, keepdims=True) + eps) @@ -882,22 +999,30 @@ def _compute_pairwise_geometry( np.sum(Z_i[:, None, :] * Y_ij, axis=-1, keepdims=True) * Y_ij + np.sum(Z_i[:, None, :] * Z_ij, axis=-1, keepdims=True) * Z_ij ) - proj_Z_i_YZ_norm = proj_Z_i_YZ / (np.linalg.norm(proj_Z_i_YZ, axis=-1, keepdims=True) + eps) - cos_buckle = np.sum(proj_Z_i_YZ_norm * (-proj_Z_i_YZ_norm.swapaxes(0, 1)), axis=-1) # [I, I] + proj_Z_i_YZ_norm = proj_Z_i_YZ / ( + np.linalg.norm(proj_Z_i_YZ, axis=-1, keepdims=True) + eps + ) + cos_buckle = np.sum( + proj_Z_i_YZ_norm * (-proj_Z_i_YZ_norm.swapaxes(0, 1)), axis=-1 + ) # [I, I] # Propeller (P_ij) proj_Z_i_ZX = ( # [I, I, 3] np.sum(Z_i[:, None, :] * Z_ij, axis=-1, keepdims=True) * Z_ij + np.sum(Z_i[:, None, :] * X_ij, axis=-1, keepdims=True) * X_ij ) - proj_Z_i_ZX_norm = proj_Z_i_ZX / (np.linalg.norm(proj_Z_i_ZX, axis=-1, keepdims=True) + eps) - cos_propeller = np.sum(proj_Z_i_ZX_norm * (-proj_Z_i_ZX_norm.swapaxes(0, 1)), axis=-1) # [I, I] + proj_Z_i_ZX_norm = proj_Z_i_ZX / ( + np.linalg.norm(proj_Z_i_ZX, axis=-1, keepdims=True) + eps + ) + cos_propeller = np.sum( + proj_Z_i_ZX_norm * (-proj_Z_i_ZX_norm.swapaxes(0, 1)), axis=-1 + ) # [I, I] if clamp: cos_buckle = np.clip(cos_buckle, -1.0, 1.0) cos_propeller = np.clip(cos_propeller, -1.0, 1.0) - B_ij = np.arccos(cos_buckle) # [I, I] + B_ij = np.arccos(cos_buckle) # [I, I] P_ij = np.arccos(cos_propeller) # [I, I] result: dict[str, np.ndarray] = { @@ -920,8 +1045,12 @@ def _compute_pairwise_geometry( np.sum(X_i[:, None, :] * X_ij, axis=-1, keepdims=True) * X_ij + np.sum(X_i[:, None, :] * Y_ij, axis=-1, keepdims=True) * Y_ij ) - proj_X_i_XY_norm = proj_X_i_XY / (np.linalg.norm(proj_X_i_XY, axis=-1, keepdims=True) + eps) - cos_opening = np.sum(proj_X_i_XY_norm * proj_X_i_XY_norm.swapaxes(0, 1), axis=-1) # [I, I] + proj_X_i_XY_norm = proj_X_i_XY / ( + np.linalg.norm(proj_X_i_XY, axis=-1, keepdims=True) + eps + ) + cos_opening = np.sum( + proj_X_i_XY_norm * proj_X_i_XY_norm.swapaxes(0, 1), axis=-1 + ) # [I, I] if clamp: cos_opening = np.clip(cos_opening, -1.0, 1.0) result["O_ij"] = np.arccos(cos_opening) # [I, I] @@ -989,13 +1118,14 @@ def _compute_basepair_mask( | (P_ij >= math.pi - mol_info.base_geometry_limits["P_ij"]) ) - D_ij_filter = (D_ij <= mol_info.base_geometry_limits["D_ij"]) + D_ij_filter = D_ij <= mol_info.base_geometry_limits["D_ij"] bp_geom_filter = H_ij_filter & B_ij_filter & P_ij_filter & D_ij_filter # [I, I] if bool_only: basepairs_bool_ij = ( # [I, I] - (~seq_neighbors) & bp_geom_filter + (~seq_neighbors) + & bp_geom_filter & (bp_preds >= float(mol_info.bp_val_cutoff)) ) return basepairs_bool_ij @@ -1015,7 +1145,7 @@ def _compute_basepair_mask( def compute_nucleic_ss( - mol_info, + mol_info, token_level_data, hbond_count, clamp_pairwise_params=True, @@ -1061,14 +1191,24 @@ def compute_nucleic_ss( mask_1d = np.asarray(token_level_data["filter_mask"], dtype=bool) # [I_full] # --- Unpack and filter token-level data ---------------------- - M_i = np.asarray(token_level_data["M_i"], dtype=np.float32)[mask_1d] # [I, 3] - frame_xyz = np.asarray(token_level_data["frame_xyz"], dtype=np.float32)[mask_1d] # [I, 3] - xyz_S_start = [v for v, k in zip(token_level_data["xyz_S_start"], mask_1d) if k] # list[I] of [3] - xyz_S_stop = [v for v, k in zip(token_level_data["xyz_S_stop"], mask_1d) if k] # list[I] of [3] - xyz_planar = [v for v, k in zip(token_level_data["xyz_planar"], mask_1d) if k] # list[I] of [K_i, 3] - - hbond_count = np.asarray(hbond_count)[mask_1d, :][:, mask_1d] # [I, I, 3] - seq_neighbors = np.asarray(token_level_data["seq_neighbors"], dtype=bool)[mask_1d, :][:, mask_1d] # [I, I] + M_i = np.asarray(token_level_data["M_i"], dtype=np.float32)[mask_1d] # [I, 3] + frame_xyz = np.asarray(token_level_data["frame_xyz"], dtype=np.float32)[ + mask_1d + ] # [I, 3] + xyz_S_start = [ + v for v, k in zip(token_level_data["xyz_S_start"], mask_1d) if k + ] # list[I] of [3] + xyz_S_stop = [ + v for v, k in zip(token_level_data["xyz_S_stop"], mask_1d) if k + ] # list[I] of [3] + xyz_planar = [ + v for v, k in zip(token_level_data["xyz_planar"], mask_1d) if k + ] # list[I] of [K_i, 3] + + hbond_count = np.asarray(hbond_count)[mask_1d, :][:, mask_1d] # [I, I, 3] + seq_neighbors = np.asarray(token_level_data["seq_neighbors"], dtype=bool)[ + mask_1d, : + ][:, mask_1d] # [I, I] # Nothing passed NA/planar filtering for this structure. # Return empty outputs instead of failing downstream on np.stack([]). @@ -1107,12 +1247,15 @@ def compute_nucleic_ss( # --- Precompute centroids and displacement vectors ----------- planar_centers = np.stack( # [I, 3] - [np.nanmean(np.asarray(xyz_i, dtype=np.float32), axis=0) for xyz_i in xyz_planar], + [ + np.nanmean(np.asarray(xyz_i, dtype=np.float32), axis=0) + for xyz_i in xyz_planar + ], axis=0, ).astype(np.float32) - frame_D_ij_vec = frame_xyz[None, :, :] - frame_xyz[:, None, :] # [I, I, 3] - sc_D_ij_vec = planar_centers[None, :, :] - planar_centers[:, None, :] # [I, I, 3] + frame_D_ij_vec = frame_xyz[None, :, :] - frame_xyz[:, None, :] # [I, I, 3] + sc_D_ij_vec = planar_centers[None, :, :] - planar_centers[:, None, :] # [I, I, 3] # --- CALC I: per-residue local coordinate frames ------------- need_full_frame = return_local_params or return_opening_angle @@ -1125,8 +1268,8 @@ def compute_nucleic_ss( compute_full_frame=need_full_frame, eps=eps, ) - Z_i = local_frames["Z_i"] # [I, 3] - X_i = local_frames.get("X_i") # [I, 3] or None + Z_i = local_frames["Z_i"] # [I, 3] + X_i = local_frames.get("X_i") # [I, 3] or None # --- CALC II: pairwise base-step geometry -------------------- pw_geom = _compute_pairwise_geometry( @@ -1187,7 +1330,6 @@ def compute_nucleic_ss( return nucleic_ss_data - def annotate_na_ss( atom_array: AtomArray, *, @@ -1258,10 +1400,10 @@ def annotate_na_ss( NA_only=NA_only, planar_only=planar_only, ) - # Note: this mask gives positions that are *chemically valid* for forming + # Note: this mask gives positions that are *chemically valid* for forming # base pairs, which is different from custom mask-generation for features mask_1d = np.asarray(token_level_data["filter_mask"], dtype=bool) - + subset_idxs = np.nonzero(mask_1d)[0] is_na_full = np.asarray(token_level_data["is_na"], dtype=bool) @@ -1295,15 +1437,19 @@ def annotate_na_ss( if planar_only: n_tokens = bp_bool.shape[0] has_planar_sc = np.asarray( - token_level_data.get("has_planar_sc", np.ones(n_tokens, dtype=bool)), dtype=bool + token_level_data.get("has_planar_sc", np.ones(n_tokens, dtype=bool)), + dtype=bool, ) bp_bool &= has_planar_sc[:, None] bp_bool &= has_planar_sc[None, :] # Optional: filter to canonical Watson-Crick basepairs only. # Sampled probabilistically to allow mixed supervision during training. - do_canonical_filter = bool(p_canonical_bp_filter and (np.random.rand() < float(p_canonical_bp_filter))) + do_canonical_filter = bool( + p_canonical_bp_filter and (np.random.rand() < float(p_canonical_bp_filter)) + ) if do_canonical_filter: + def _base_letter(res_name: str) -> str | None: rn = str(res_name).strip().upper() if rn in STANDARD_RNA: @@ -1313,11 +1459,16 @@ def _base_letter(res_name: str) -> str | None: return None allowed_pairs = { - ("A", "U"), ("U", "A"), - ("A", "T"), ("T", "A"), - ("G", "C"), ("C", "G"), + ("A", "U"), + ("U", "A"), + ("A", "T"), + ("T", "A"), + ("G", "C"), + ("C", "G"), } - base_letters_full: list[str | None] = [_base_letter(rn) for rn in token_res_names] + base_letters_full: list[str | None] = [ + _base_letter(rn) for rn in token_res_names + ] bp_bool = np.asarray(bp_bool, dtype=bool) bp_rows_tmp, bp_cols_tmp = np.nonzero(bp_bool) @@ -1401,7 +1552,9 @@ def _base_letter(res_name: str) -> str | None: continue # A residue is treated as atomized if any atom in the residue carries atomize=True. if "atomize" in atom_array.get_annotation_categories(): - residue_is_atomized = bool(np.any(np.asarray(atom_array.atomize[int(start):stop], dtype=bool))) + residue_is_atomized = bool( + np.any(np.asarray(atom_array.atomize[int(start) : stop], dtype=bool)) + ) else: residue_is_atomized = False if residue_is_atomized: diff --git a/models/rfd3/src/rfd3/transforms/pipelines.py b/models/rfd3/src/rfd3/transforms/pipelines.py index 940dfab6..8d8fee10 100644 --- a/models/rfd3/src/rfd3/transforms/pipelines.py +++ b/models/rfd3/src/rfd3/transforms/pipelines.py @@ -216,7 +216,9 @@ def get_crop_transform( ), "Crop center cutoff distance must be greater than 0" pre_crop_transforms = [ - SubsampleToTypes(allowed_types=allowed_types, association_scheme=association_scheme), + SubsampleToTypes( + allowed_types=allowed_types, association_scheme=association_scheme + ), ] cropping_transform = RandomRoute( @@ -361,11 +363,9 @@ def build_atom14_base_pipeline_( max_ss_frac_to_provide: float, min_ss_island_len: int, max_ss_island_len: int, - ## Nucleic acid features ##### - #add_na_pair_features: bool, + # add_na_pair_features: bool, ## This should not be necessary, controlled through feature names in model, and meta conditioning probabilities, inference behavior handled in transform itself ##### - **_, # dump additional kwargs (e.g. msa stuff) ): """ @@ -373,7 +373,7 @@ def build_atom14_base_pipeline_( """ warnings.filterwarnings("ignore", category=RuntimeWarning) warnings.filterwarnings("ignore", category=DeprecationWarning) - + # Add any data necessary for downstream transforms transforms = [ AddData( @@ -415,7 +415,7 @@ def build_atom14_base_pipeline_( max_binder_length=max_binder_length, max_atoms_in_crop=max_atoms_in_crop, allowed_types=allowed_types, - association_scheme=association_scheme + association_scheme=association_scheme, ) if zero_occ_on_exposure_after_cropping: @@ -448,7 +448,7 @@ def build_atom14_base_pipeline_( ) ) # Add nucleic acid geometry features - #if add_na_pair_features: + # if add_na_pair_features: transforms.append( CalculateNucleicAcidGeomFeats( is_inference, @@ -639,8 +639,8 @@ def build_atom14_base_pipeline( kwargs.setdefault("min_ss_island_len", 0) kwargs.setdefault("max_ss_island_len", 999) kwargs.setdefault("max_binder_length", 999) - # This should not be necessary. - #kwargs.setdefault("add_na_pair_features", False) + # This should not be necessary. + # kwargs.setdefault("add_na_pair_features", False) kwargs.setdefault("b_factor_min", None) kwargs.setdefault("zero_occ_on_exposure_after_cropping", False) diff --git a/models/rfd3/src/rfd3/transforms/training_conditions.py b/models/rfd3/src/rfd3/transforms/training_conditions.py index f2173397..67ced33a 100644 --- a/models/rfd3/src/rfd3/transforms/training_conditions.py +++ b/models/rfd3/src/rfd3/transforms/training_conditions.py @@ -13,14 +13,13 @@ spread_token_wise, ) from biotite.structure import AtomArray, get_residue_starts +from rfd3.constants import backbone_atoms_RNA from rfd3.transforms.conditioning_utils import ( random_condition, sample_island_tokens, sample_subgraph_atoms, ) -from rfd3.constants import backbone_atoms_RNA - nx.from_numpy_matrix = nx.from_numpy_array logger = logging.getLogger(__name__) @@ -74,7 +73,7 @@ def __init__( p_fix_motif_coordinates, p_fix_motif_sequence, p_unindex_motif_tokens, - association_scheme = 'atom14', + association_scheme="atom14", ): self.name = name self.frequency = frequency @@ -93,7 +92,7 @@ def __init__( self.p_fix_motif_coordinates = p_fix_motif_coordinates self.p_fix_motif_sequence = p_fix_motif_sequence self.p_unindex_motif_tokens = p_unindex_motif_tokens - + self.association_scheme = association_scheme def is_valid_for_example(self, data) -> bool: @@ -107,7 +106,7 @@ def is_valid_for_example(self, data) -> bool: else: if np.any(is_protein): return True - + return False def sample_motif_tokens(self, atom_array): @@ -162,7 +161,7 @@ def sample_motif_atoms(self, atom_array): if random_condition(self.p_diffuse_motif_sidechains): backbone_atoms = backbone_atoms_RNA.copy() backbone_atoms.remove("C1'") - backbone_atoms = ["N", "C", "CA"] + backbone_atoms #covers DNA also + backbone_atoms = ["N", "C", "CA"] + backbone_atoms # covers DNA also if random_condition(self.p_include_oxygen_in_backbone_mask): backbone_atoms.append("O") is_motif_atom = is_motif_atom & np.isin( @@ -500,7 +499,9 @@ def sample_conditioning_strategy( atom_array.set_annotation( "is_motif_atom_unindexed", sample_unindexed_atoms( - atom_array, p_unindex_motif_tokens=p_unindex_motif_tokens, association_scheme=association_scheme + atom_array, + p_unindex_motif_tokens=p_unindex_motif_tokens, + association_scheme=association_scheme, ), ) return atom_array @@ -526,7 +527,6 @@ def sample_is_motif_atom_with_fixed_seq( is_motif_atom_with_fixed_seq = ( is_motif_atom_with_fixed_seq | ~atom_array.is_protein ) - return is_motif_atom_with_fixed_seq diff --git a/models/rfd3/src/rfd3/transforms/virtual_atoms.py b/models/rfd3/src/rfd3/transforms/virtual_atoms.py index 31ec59ae..d9097fea 100644 --- a/models/rfd3/src/rfd3/transforms/virtual_atoms.py +++ b/models/rfd3/src/rfd3/transforms/virtual_atoms.py @@ -53,6 +53,7 @@ def map_to_association_scheme( else: return ATOM_NAMES[idxs] + def map_names_to_elements( atom_names: list | str, default=VIRTUAL_ATOM_ELEMENT_NAME ) -> np.ndarray: @@ -179,7 +180,7 @@ def forward(self, data: dict) -> dict: token_ids = np.unique(atom_array.token_id) assert len(token_ids) == len( is_motif_atom_with_fixed_seq - ), "Token ids and token level array have different lengths!" + ), "Token ids and token level array have different lengths!" # Unindexed tokens are never fully atomized, but may be assigned as atomized to have repr atoms: if self.association_scheme == "atom23": @@ -230,14 +231,14 @@ def forward(self, data: dict) -> dict: else: n_atoms_per_token = self.n_atoms_per_token central_atom = self.atom_to_pad_from - + n_pad = n_atoms_per_token - len(token) if n_pad > 0: mask = get_af3_token_representative_masks( token, central_atom=central_atom ) - + assert_single_representative(token, central_atom=central_atom) # ... Create virtual atoms diff --git a/models/rfd3/src/rfd3/utils/inference.py b/models/rfd3/src/rfd3/utils/inference.py index 426eace2..1e00f566 100644 --- a/models/rfd3/src/rfd3/utils/inference.py +++ b/models/rfd3/src/rfd3/utils/inference.py @@ -452,7 +452,10 @@ def infer_ori_from_com(atom_array): def set_com( - atom_array, ori_token: list | None = None, infer_ori_strategy: str | None = None, ori_jitter: float | None = None + atom_array, + ori_token: list | None = None, + infer_ori_strategy: str | None = None, + ori_jitter: float | None = None, ): if exists(ori_token): center = np.array([float(x) for x in ori_token], dtype=atom_array.coord.dtype) @@ -512,7 +515,7 @@ def set_com( # Random length (mean ~ scale) length = np.random.exponential(scale=scale) - jittered_offset = direction*length + jittered_offset = direction * length atom_array.coord -= jittered_offset From 3da4cdfe191b293d1ac43c99556852f3b0a0c569 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 27 Mar 2026 11:25:56 -0700 Subject: [PATCH 44/49] ruff_format_2 --- src/foundry_cli/download_checkpoints.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/foundry_cli/download_checkpoints.py b/src/foundry_cli/download_checkpoints.py index 8a27c1b7..ef367a1b 100644 --- a/src/foundry_cli/download_checkpoints.py +++ b/src/foundry_cli/download_checkpoints.py @@ -132,9 +132,7 @@ def install_model(model_name: str, checkpoint_dir: Path, force: bool = False) -> ) try: - download_file( - checkpoint_info.url, dest_path, checkpoint_info.sha256 - ) + download_file(checkpoint_info.url, dest_path, checkpoint_info.sha256) console.print( f"[green]✓[/green] Successfully installed {model_name} to {dest_path}" ) From 28d1375f96db824f73489dc9055cf06cf3ffeb92 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 27 Mar 2026 11:32:08 -0700 Subject: [PATCH 45/49] cleanup debug comment --- models/rf3/src/rf3/loss/af3_losses.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/models/rf3/src/rf3/loss/af3_losses.py b/models/rf3/src/rf3/loss/af3_losses.py index 1bb0cd27..974db267 100644 --- a/models/rf3/src/rf3/loss/af3_losses.py +++ b/models/rf3/src/rf3/loss/af3_losses.py @@ -349,13 +349,9 @@ def forward(self, network_output, loss_input, symm_input): x_native = symm_input["coord_atom_lvl"].to(x_pred.device) mask_native = symm_input["mask_atom_lvl"].to(x_pred.device) - try: - x_native_aln, x_native_mask = self._resolve_subunits( - mol_entities, mol_iid, crop_mask, x_native, mask_native, x_pred - ) - except Exception: - # fd ... TO DO: DEBUG! - return loss_input + x_native_aln, x_native_mask = self._resolve_subunits( + mol_entities, mol_iid, crop_mask, x_native, mask_native, x_pred + ) loss_input["X_gt_L"] = x_native_aln loss_input["crd_mask_L"] = x_native_mask From da7b89cc14c0b9097e9ff56bb664f21fa5de9f95 Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Fri, 27 Mar 2026 12:27:56 -0700 Subject: [PATCH 46/49] docs and json progress --- models/rfd3/README.md | 14 +++- models/rfd3/docs/.assets/multipolymer.png | Bin 0 -> 711047 bytes models/rfd3/docs/.assets/overview.png | Bin 158871 -> 480735 bytes models/rfd3/docs/examples/atom23_design.json | 73 +++++++++++++++++++ models/rfd3/docs/input.md | 3 +- 5 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 models/rfd3/docs/.assets/multipolymer.png create mode 100644 models/rfd3/docs/examples/atom23_design.json diff --git a/models/rfd3/README.md b/models/rfd3/README.md index ecb4f34c..0886afc0 100644 --- a/models/rfd3/README.md +++ b/models/rfd3/README.md @@ -74,10 +74,6 @@ you will need to change the path in the `.json` file(s) before running. - + + + +
-

Nucleic acid binder design

- -

Small molecule binder design

@@ -86,6 +82,11 @@ you will need to change the path in the `.json` file(s) before running.

Protein binder design

+

Nucleic acid binder design

+ +
@@ -96,6 +97,11 @@ you will need to change the path in the `.json` file(s) before running.

Symmetric design

+

Multipolymer design

+ +
diff --git a/models/rfd3/docs/.assets/multipolymer.png b/models/rfd3/docs/.assets/multipolymer.png new file mode 100644 index 0000000000000000000000000000000000000000..f081043ac427c5458147e4c67cc21da25fd1a6f7 GIT binary patch literal 711047 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�D^;Jb7?9xQTh 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%0Anf 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 z }%M>Yghlt}ZARNyVhu;3YH&lSUYvhm8g;=EF#l5<-rr1i z8&AJ(E1U9zD^mn;y;sw_@9C=c&+czLL;&Rd$({<1-@lly4V*zb1HI0%dJR9Mr};QjN~$wHQDFH?4*&EiIj7!R`mH*%dV1f2eiY1pbOgnK&e3p&H~V zPA4qcF_!9DEYxwpJ>_0{Q^`*?H2FMKeVwZvtya(MH+vy0OdZB|pZ@yA7up&lnm)4A zQq`4{;~>}@+R=O5tu>h!aXiWU`Rz`Y!Qo1r6|PZ6E;ZhQ8}w4rjJuX9TLPulNXvEw zD8k_(E^U6c39&9R7M0U7K8ptfoLxbupLQJwTte;)!H0I)*$1vaWjA{@T)=-5bf!u= z2;QG3OU3E!UW|SX9kJ)IKN%-#SCk`qMrpmBo`AzYqGXd0&5cQN!Zugj+#7f-P=K-6Rl6zJRjB(8X$qrdRdX zMIq}yQZpQU{t>0_$RN*dhXw-FAjx(+>q2r>>#gY|XDxpkTF+r5uIP!VtR zYcK_r!u&>(c~Dl)=6Finp%e8`VX9U2ieuJ9A!z)1U*pcXo4)_yTvB6+e1d~RlYo`V z(8FD5>8^^Y(F+1aSjDXAc$M-f%rYXCga543!$PH;uwPw?^et^GZN2JgLL^_MCUbS- zW)qWv*9Ff5w&!8!68!EgebUkM(65v9^jZ})c}(3;ia=$kPf)6^2N%Z#TCkck?dWZH zE$lcr*kb(^D+Uru=Twu$l?Ae|l9@97r_L_i9Hb)8bCPK>s;X8FKHdP`-oF!t#f~Sc z#Toa9`>ziwq)rn8vS=1_>Ba16oBy@4+&*AnfBLJ75{7RGB6HS1D1Nkhksw0@{O5jW8^ghlz+?~nnr2+Yr=WNoP&>i4w z{5mVHoZ4pn%Qhh{#>^vylWf7xDIC_{)^DuQR9TJY(?J8rUW8x`XXnetur=zQF%?JJfQz|0+OgEV()z3J> zM;${Ayl>!!-(XPbv$Gm>-%UCQ;4{3iz`iS1lNy!Rb>6sSzpbl+AlI(vMtvS+gSHNK zPSmbd%{!aKoqE6gW6_>zr4W(NItsm%$>(+i;pv3bO}Rm7UXlUS%r|J^`{qa-O9kj5 zj%8+Chg?_0fmhi|`OIcwrcjRm^04RIiAFqXOFXjqJ}RvaypT^z<|EMWqcN?F|LI-+ z;xO%$Qzw-BYF#^!z&arg<-7P07g|Pjddof?%XrE9oo5!y?Q)gd{K`Hk^Sb)a{igFf zOyE#w6Li3WBxBYnV6w5mg5kpFwz3=TrDm{iiM%9eP$~Y#MHc39$(01K*F9ZMsmPb~ zH}>q~^@|Ymt(p{ay#6kc4_o?>Sb}C}b|=y{D|OYjqXI>)X4tO$;^2;`UlK1O967>S z^zrScNMeFHlBG0`0NdkYKaZHyizjK!GPL#rWe#(FaMUCIred4gXxz4ypJ(wsmuv(A zi+E`#e_7R(r?yN|#8$3T*fy2rDkmqJx?PL{?suy_T!_RsE556B!qw2f-My5ui}R;^{Y8PQSHy zFw~t1cbl$6j^d<;g!7BNF6s&lZXSxtq?+g?IiXQ#dquy6bA7M-z6uh?h;}Dy2 zUO$bx=ryt#!!Ue`Lh~Jph-^@PhgLeA#%F{ZK~l&-Cr_pk=-wXhNNUlnQro!_5Zaa} zcH65wWt*DSs?@Y`IwcjXOvq)df1T+>!ouGi;lz7n7bvPsS6YVii^GE2AB{>~fcLxr zuWBDi!!JJZyLDJL8sJ1yxsiGRWRErO2Ppk~=KA%9-vH0Iue1e-I~@dRn*?VPF?3FW z-6KOhbMo~<+gsK#DKNwu=plK_?TzbWrz*w9lN^Nf01v)x-p}|GGMk`7qOQx$EU53r zqZfax&i!2I`<^aEiv45VK^bS)-uYgr)<~&}ioT5(A_TQSh3jH_vtJjh)azgKN(qOl zzDgrj6zRLU7x{tJBIL6i`%*^58d>FKWd89OzD$R}gr$HSRFqQ!kkGxYTG&~SYzfL%7^ z{$-GPpy}>S((Jy&% zr5^TpJt@f@So+69IzXzGks(6o*$@0*Zt8vHtqwG#B-@8%Rr}_=S(aIttNxOFhWV!5 z+#f!4NBR4I6cYGkg1S0?g_Cq;p<`QWoJ*4sxigv;SZ~$*V!l#G$wsrk95S$7hz*kH zSG9bkulRvf1$HE>uGf^GAO%6dSp>G3H3wr!n0XL9X=j#X?G*1~VbImz5rNOF=e;_z{+$t<=$%G1X-pgLpIb<18hA3j zx?Fq}tHX90CYPJ+iq?tRZBix;{$Pf_ZRkp52vD6tjj)^m%!ov4_Yn#I+{wqR>WTBz zH-pnOd?FlQEt?BY>q}>XYh!N78C$Sq+=V!ZOB3p`s6T3;fX0vhQL?kWfr;QGB1#tl zPH_Rpk&}*_XY9G=jJU`{UdyPS8k_i{^l&)UnQDeYupUdZ|8;qnX;Y(f7hE$PbU$0M z5rHK669^v&^MO~(KERR3PTpZ*to;tJ+b`UcSZ?H_fdiaYerDfa%KHJJv6wuYXpFl7tTYt0x-YpV%dzb|fZbmG5AB*5Jpd5|*4izT=qy7^=KWOGcdJFjpU+!Rn9) z2cS_1cC0;RqwnD#;UW2O|MtCgGu_W{cD91s4uzCNuQmbp3&hgG+>4J@yj@*ld)<(c zVAwMT)W*f8!9SIpQ-k!Y6TaHOy1M>PuYG@W242;rc{pAG!@`ky^A&Kiy3B>MJQf|# z%j*^22Lx%(iEyTlY9EY8wYlr0q}En-7Z)I0ypw2R2-b|@8rM7WR`Nllim@5bJ1(+L zjja{wy5KJtsg^kkc(?_0u`#xUFH^`F*b+iz)0d*SUJ3=HaguNBc*Z>@B5MT`RI7au z1#DV7)@_`lR%qcV4ow;YIFAk3qoGt z*>LcBs3_(G=Dm*FPX-Pa07%0#EB3->=-vr6UXReSYQLYJ|uT|FTWnY`p`%K?4g4m(H1`(SW@!Pu#TKi3iofzX2_n1VQVLZ$XYtoLy=8op0 ziHm&EHz2S33dtx8`*+fh)O9Ad>y$V8h#1d48op1DSU(js>GJ&6*1^mxadKP-55_otaslQt!QE64&{IWfz(Ve65E@dW6A88T9Ra+<<|R? zGmlzYgcV`Ws4GGig7aWY7D5KoRB(F7ZjlgVCv_%Lvk22Rok=T=gmUm|I0`9AIW!vA zqAEbBa5rH7oK8L|Kb#WFV(r)@8K#mC6~AbkIHqcI!o_K<<3&>>&i`E(SG>v)*8dH) zK6a>xh-`2}ULkXnxfoDk2kx(8kL|cK8w^>%U-3#{6J&o9@NF6mK%FKw^3wA1>Fjav z;Iij06lHh!aN>V)Jcec>aST1YA8(u$rK-akXsfoVod@U7pP$Au)s3dz|09x-#64`q z6Cy*+#B_&<+nN2<9H~=0%wd)d7yP&UjX6O+z-i_bd(ycJ>B}KRGBq8|?62ybF|PQf zt!?NsgN*FgQyZe+JCt0DK4#HGs+bH5_P-Y73)FY&vBW;gFnQn7WJ5vs~b>)va>U>Vz8v|)} ze-g^K9_!_t39AQaUzu=MeT8^?@{h%nsQa*)AP!S1S{( zK8FY>Yx!-NX5O2o8E5_xNazFB@A{kU)8%iw<^T>fcWl8MIsb@l$15iA+r0%f5%xwg z28Mw+u4VemefDZ4r@C+wb*^9_DaN|_w_C3baNyws=@r>5^6*N`q0To#p^0`i#a7UU zup%yyPGDyY*9hE$FKd?GPhFxrokm?~nq&)2wGV1~c?qXAQ!A1i#a*C!iT%SaEt&ii znz`UC(dHMMu+4YCN96A;V3g8hr>8ho`*jAD-$t!BTE9bu2bzqYlPkT%g&-@>RQ2o&lPli1uMLN`tfcJ z*We-h|6J1d61BN5)hzaL4PX1@T#pD@742heV6$t7R8y~6tqguSyA9WFe2!JHIm~NxmLlzX4W@jPBae^RH|e zRZzE^@A2$2sw1DR%=X`;s1nkMFIxEZ61m9 zhk(V;%fku1fZRdgHb@?hyYLq$MWr|Yc?k0yXqG8b~h$0U$zFHM_aB}Q{5@_Up|6-Ce#V| zufg@%8eEBi0t0MLzrEY(M%~45r5$t>ZJQHon6qSxWSf1)z+>StJb$>V1_Y1+qe@ta zE5#GhLT}KmYWiukA_x2zen?7tIJSC0R>Gq{3A8Go#~U3=C#diKq5+B-fWvCk`l%h`sgPAgUq;ZoOEp+Pf;=8Ohd{z%!#}oh zk<$6-Wl!A#F$gEc-Pj^(MN8nKL3!XYV$ZQ`d6msN2hb%Pe@x`sZ232dkzq|%#Ws=1 zcvL{7NfSSGafuD+P<^MAPFB!Nthz>KL7l#q`-^FsJasMW*f=DERIy9Sq~Lo0^>a20 z%hG6C@%HMSNY-K6;d{FIQMoyivrz(JwylyvGcHl5$xO=qDk&;UVFIkd=fW(GsZ3os413SI7k z{}`@vvS@uzt*ZycZZ*NR;g?S<3TNAInq;%EH2kl9qbur93Zv@&8bzqg0rkH?`6i>} z+xIuMlM?+N$De(hC1qTwwRN!VVQ0KN`&dkb#DdP!@hRkZ5arA35ihq)Wly3Ew7%6>XMeAg1o=Pxg5@!c zb~)_U3cH86>iSo6SJdH=(G8TW2Y%!>rfe#(D?TnTCQN$Ss`sl3EujD}ZQmRdHJa9{ zcG(?ZvNkt2!yan?LaB?RbB>$SAp`-Ltn~cv~jbXN< zv3Nhu!bVvV$t1pEn2osCI1wru*jCOaRFmd_fE>@_)B~g1Bc)hF7E*Uz!Kqd$W-%kMS9VC+=Y7KUrK--2l@~l(v&FNLO9#F#r7-qNY7HvlAosf-N9<-<@uqJ`X^v2v7=Slovy{ATLj$9`SI5{%Q)!ti%cHm95YLo$A)K z@@M&&iA(81i&wBb@-Qk2MokCeF4cP2;MGIe2fLg{Mce}C<`FRb`+~3?{GTekAMpR> zl3I352fzu)@z@kyIQ!cx>t&>>`n&DhThZ&sJ3`>U>AGHv4eAu7f6&b^o&D%L9Pr1d zjF(M2SWla~ngh0Ht>dKHnDEZD+$B7U=$z`7ReTymhQMM=9$eZpDtY?lKiOWR*GxaJ?76xBTpOY!`aJ)$a|rN zQc2X)crLX(J@F})mGl8l<$r!Byx;kY@OHooAt9bmlq%MIL!d`N<3NR^eD+ss*XDG| z_|wl1wzGiq?|QL?nG9u|9R1d@Odaxwr;<=}yZmh8C;IozfA;?@Q6N6iHiWKR9FKof zID-F7A$PtQ;z3-n9&v88=E$Nn>EfVo(3oOqXhhWbA!iiz&sHp0Nb0(4Qi8>uqr%knGd-1Ts(RjA>!9}^Ok81-J?xfU}qDLR*z?>t95kUHLBp408! zrZL3GsV4q69C0f67QNd`Ke8*U&}C2tqYA>(uuDvDuos-8GgpI$20?-FcnBZ#{r<_G zr>rsWJnS;)$~h1mU~zAHE8r9qzC8Hox}qv$kY#HV0E;{3KJ^w&&|f?S8( z9mgVV0^JwZcI{9{>Hwm%BPc+b=xE5DWG2b>R=C|&5wFD3cW8^>`-;)z9Br5DYua7u zl7Zb{nid16WjMm=$?_G}?9~nhYFTA!K_mO!atBprP<%|fZ`0P!zi{|NcgSznkQ+sV zN&-`GdI0LPDZzgR$ub_H`@~%t#qvM+9$t|NG{qkJ>gm``RmmlNnLWcizhO#IxLFt% zSv`I{I(~}kfy1Z0U2u)B0O~YlAOB^FK86RmH=9{;*V}MlHdb3INcw|3#;)A=y7|K< zxeTO%r6!0VXYk1qO7bw+{2RLg*bY|Yzt#J@^}G=H)Fymz>&ztw4zHZ-ejw`A&eQ$e z9C)Mld-ix!N@sH0e;un+lV!iw2kXaPVHxZ9!5Je8rs~@R?01I1!2Wm_UB6iTj^-!p z*sWelLGVb^%;$@VdD5v0#px6vY=S5CIqXYbqRNf0r_|s%)>cS~@V6jc^oaq(ul#WY zQ*D01dAccn;rvW5oWl2v7}L~;M!iRQ6p3>4jvvNT*VPjs7Pg)@`o^VnoW~dbV4?V( zF1iTQ?zQ;(>b?5@^aJ}jmhu(~rhZQM8jnO*0B%_Wy@F;EwY?RlFrVJz-E_g#3Ts3v zf+OkRMi!=i8kvzr;-qK|@5NnI$Tcc)JPNRva*Jc*oqw%eR?&OEvgYR`kfRyctymq> zYb|Ik0y`)YFflQi+Vvz)c^E8)Ka}o7@lqt7{@9B=>#8F!8ow>pDVdcN`nmBOWJ9JX z)<6eJ3@GMt+2))X%|WEUHAZ?pPf)nPHThG9U-EDT7-@N{#vRGHFTACCu3I3q~ zwn9M>@BubN$_5-Jz3VQ&YF&Yg^1^i$K;aqatZ}M&P8AbMEQ5hsNu`V<|LNZ=+rrb6 zfyznS{}y>9Hg}d^B^4uT_8`a|68t4#fKnf4en41sqm-8$)O6nF`~^b>DwM#>c+m#$ zoI7rse7`hBMQ7w!TEuX08@Z99v zkRB0ce)v^)w5{zBjl1CatgYy5)3?zS3z=g(W@#OGhanD@eUhF6wv6(eNGrfq6*oPt z2}G=G;2P4U-^a(vXOU0)e>9zCSe0EDttmsfQmF~&`8I*OZe3f37KKex3M(&pj_P(^)1SqW`8qo5FB z7{4{yikF895fMTBYFUxS`VdL`OL-`nEDcT5pq=2fJkhdlIvsc>%9V_IxQ)m;YAK34 z8JZmRNhr^z#6_g=2L9eWb=+ zEPii`IJ&w*N}=9_(pEEn;;a;@HT3qzwjN|%3haL=DdG@zmMW}MC`Z6wA-(ty9?HNW?$kBuy;txF&?nI@wh-6b zB+k&FpJR~X^8WVt{+sB5fOemxj#H%)UFE(nhE8& zc=MZg>D41uFG{#DHb-q=*K|Oq%!@7w75(+fK^D?TaBo~iXmE^`nnho|U3~McZYW72 z!Td<$wX=^f_7t%%fMsN;L84f&!6nA_=In@T`p~$QwD1^TCvZc=w_8|{P2>69Q z9_`6x_wCBs8d@bTAIfk6u9c%ao&tqFt0fY%|BVaCPxtQcBY`a*XwqXG-MG3+0&`3h zel=1rZ}wW=)ZUk6X4-&|^*4{j_%25LXeq}>D|6JZ&>U^1YUvr&PJ;|U=}8?Ojp~H# zfK2W2F=@*7CU+Z;0xaB7KI*bjn3?vSAHv!x<(8PRG0oVcpG!AwJ>#O`ou>h@Y+K>} zNK1ecI#s4055zAHQoecpKOK?pd3jc}Y{>SyXfUE95^;{--BMZoTSaddEy01c$3C5Tw5byn)(=5?2!y7IY-U1Qh6KmFt>Ye=$+ z>8tSroVvA{V`rE?d;%LCGkx{Pq7*-GrjJI{mxQ*;Bc6Tm2vPQzhK@h~V|5ue7>cP+ z0&5jg+qkOH^I;_L6#Lr0ULy0$&8wV!k4=%6)|~wsNJbn!u{^5@g_P+Yp`{*ez2vD^ zzWgCw-25EJP`C<#$s^i6ilIpHG0+B)T-}_h6V6f&XfWY64a0r+@m^X*rs$y=b`AN zBeSb9GMLyjwT@vNYZ-qti<%RBZ@muFBg(P&Y7MeSSUJu`kib!$XZL&RC3WT-L<2)} ze9U)x2e!~pA(ZbChZEt}7s6--5ENpf2Q*U%$2u7MP~RmrOTc>W&sPXcecKrMteQ%1 zzNeSZgfeTLaNB0O$uP$(%9UXxozDo8c;G)GQf1)2SzX)^_nEA28Jc0}T>)-c-CO=^ zjF{jCJ9YydVhS0V)Um1Hu5U00JjK2#;#ypHxKL6Iu;!=l)Nt~GNcXM3zja?wj!xbk z;t(1C@foFjkws`lXUuzMPml+V=zg+ryh%P}?UV7nPz=VxVG;D`%%6a)e5jEn`HSsz z#+Wl?PEK69y~QBgW~y`2zx%9Slbq1J9Ps~^j^moKGiTxH#+2Jr^=zCem9kAN>(+^n zhXw!b;X&j$wAL5kIk0H1nrj}3jIBp zC#p-pD|d)edB^%MlR1E|@KK7Bd$P67 zxK6J|$8K>u@{gO+n2>v)Bp;e61MJWe9^W|H$s2#P7l_dPuCKGLI(sg&$us9L#LV={ zyk5F_86by%!uo3P=E|sDh5Nl2E%0CdG}HTIV^96U6;Ul_DQ`u8VH~0vbg0gJLD8f8 zD3x@(R2S|TDJ~EpOwz12aN*Xj`3@(262BS9FU}QH^Gunt%%*Huq`pog9K(3GN%wtR zRgEm3j`+eda7ljZJT)b2ivPmX*%LHYPuwc+$wr}9f|7%{(a}-SOS@5b_MVS0QkKUF z7HLS1rtlp#95pqh_zbA1{paZ{sn~F;)2`sh-U1wH0JpyvLUsk`|1MzY@>VVP+_o>I zK))%llqX<>}%ysZKqEzP}3Nyfhl6!u#B1`%-&4{$l3N2FdsX13k|(y zWDp+wr6BHZ0p+Ma(G0XjIN79se%4{?5XU?;Q=6q4^%(78LMYOir`#x&l=#`yzI4Op zzY_Mu+R!ZHbM0!Gr`gy#;)RC#RdANB(N@^n~hV831Jg2$;p?c<(rx0_vR znLi?BoG4yU`a4;ZxkFvX4@EP)#p*n~4o$j@1*FT=571tY!V1nz8FVW`A2nR?+E-vv z+kIpGpq^1EEt{8L<9-|&@&I(;L~=?v=FU$u!LBn#*>wExkyJquJaSK3I@2zJ-wvVb z(9zYk0pI9l;mYtugY&+!Sd3eHR?Xr+n(m+W;@g*E9pyxvKhv8>*k%2$#r6zkuzB|j zEGB9gqds;&C5*W$WSgB`O+%4ruyX0($D{vn&i`doFIe^L4|f*$>ytdxzm>Iue|}m0>65%V;;xm_ zZ^V+jV*SNxvK^7M0 z*jS)nPtApgDX>syE)kGK2~6P~8NsY9{)Xkp-J|1BOM+kpl=v}dv6GKmNr1Yw$w zSHN^khZZ|z7vzVy5+^X@vFK9Ze>hrvOZ)}2{qseLOr$d2^1=T~G{_r6c#I-m3wI|L z)TLk~-d|X7lF@;RrEi8BqHbHHZf2~b?vFJI!70@bNoN{j5)mTGM-YU?!8@L}iqx{J ztvWqR9yoQA4vLf8HWiKYu3~l2x0CCR^i(r5on8NxI_|+gX&uPax^^4-^Y?o>cNa6L z@r2X;3(>0o$VZoj^&7c%1ItK~D^(AlZ#x5YxBGA@YM$iF-^DTqv|VUtXVAATGu^nx zbpJPbEgw{jRq$&$2_m&?N&A4HC-V%ucy-zw)i8Fu7ulSr#f%7A==GcvEQ6Ig>EYS**+|ru8puRdP@F+Renya_bpq@nF zttEt;h?7kpH{5L%DBksd^y{I^@d1H^6@*5%>hufX9tGDyQ2*)V!VVx4GpC0C?#W`P z@- zmAmeN*$aj2)IhmZxqtidyaTPSSYMNL+L@F%fZ@Zqk?zUBTJ8lZK0clIJ<6T(-m8*W zt@#4^1v%YacliEt{9akjpNFI8T7&_m68kK#uI#r?Wp&%X1K3*vC-V2*U8Q9(8g7$l zb`9INw@gdcx}$X?w<8ub@qaHhk&0sM=N(`Ve9Pt^wc5+>50AAN@jCpjBaf~7B>~2S zue)&5Q=;a#bJf`Gvv=%K_wDzOONK_?+ro_qeR9x6k~w-GdO5cHt;ZRc);WoMF7``6 zqWviCEYEKiA3|BIC0{iB4=j;3&yzS-;>}sBX1*%Tp)0C~Jgu^_xF zjl?TRdUmxx)0t?xc8j@xayz};j;-Wyi;nY;jA3(<_=*TTm#m$4f5GGamEnF}Oq*%&hCQ`+8v&FKhY>Bs9x1O0j zGjn%j3+>_~Qo*x;APlfZFP=w#h{uGUcwltKOx+}W#+El>mKdUlO)!R4kvb;)Gg*sT zb9FNpkX@O=s%_7Sy0_m3uaw;1lNv;xayVAkgKut-AruW?3PY{7K5n^mY+Nyn!<#{= zkG^>J{YJmUPHr0IJJ;s#Nz14Rp3j90DQrtwe38f)O)MgIT$9;0azcGsNbhPFu}YBk z_XwW1{)3CgcoR{CBWFIuJ%88q-J3%cExaX)#<^A07S<)3Dacf79ZlPEai5XB>p!l* zH1;(KZlD%gw})DCqb?9gu;>#AI~c?xyhV))cZn`tv3?e+$xGtA<>feqg8MJnZ4U;K zx$zKra$J1!dt3(7xU&TNC@<05d&BO#px7LLIdDE)q7OQO7U@^-D1D6f8|au*lj}Au z)Ph=ulQ(GyPy2BldW!zYFObwH)$4OLK??OzPsaD&jjI=z)gr(-h|K`v1kRuf+pE)D zAe$xok5)w!pc>JlIKafmg)a-b2yUGuN*>&5ebHY-Vi9ol0%iPzs$>dLgfVWd?pr81gI9o_?TeJJYAJo@*qxJ$HHTmh&;y@^}z$oK~{xew$~zcsTOumTtmO3TJ|Dxc!cRGGT@zFs2<{#~`+ zMaQ&h9QW!z41QYpogAzed#0kkT!Af$`(3b5Nas|tvvM}{A@!G*Z?}w`XEr;CRJL{v zsHb1L|A>XB@>%9>**iq3!jU<-B!Cu4YW7#NXP=b7(GGlniA&2Uol+m|-l6?b+HQFG z9P@Q8;?*fhsMBdU>sj@p;adX72J$#5G{6tYgI2?YKU(&)d2aV6e%Je()G5N&CpH*A zK!Zns>meE1zxDR6Hyo|2vCGghqxMuVuq5vahjgnBnp8gJP#19?^3W<%I6gGL z=4bnMbNm$&sE^$Ffo)nkA#NAx@EY~|XY}r=k`afvl#Td|rmbcEQ7% zn~o6*pAgz)ccC9bpcw7&D{IPYR1jg-u5a<%R6r)vWJcu_&ZYjeJBt2Y20M|?v?WUD z=NaYqp$&{`DTIb@sB4yu$L?EJGD1fM*_nNdtfGOd@SoYyqj#o!0=@Zr)QL(~L`l9+ z3T|F1;l*EVIe(YIGR4TJ?S&FcaXUqr;`AGI^@>zrcg3Nac}vH-nX4DBhB(8;F5U00 z3?(~qM=+BT>TLVh@)K8Dd=*zqmt;Q2;dMH&^sX8hx^U;j-|#=SVuv>6G(@MR&Jm22 zF^Wk`+owg;PGi8r1mgGe)Z;GlQCtc-uSs$WSl%J7eF)%(UEQCCTX@g$$96d&1QmV7 zicr3Xng(5T0lsD_4uMhwhia1mb8zSyzEvyDvPqtN%AOL)5GkH$Y3JG&D1m?2u9$bx`pnK-{0+PYDsdd^ao=u_2ffcZ>C8vSS6rUBQb+o>##FB(<3 zso~G7)M!U#-RRx zefQ`4?yVJ&5e2QxI1<1r=GCb?u*nL1&n!z=gOu8BK`o)KOIr5CR@`wZ;c@UCAI@vN zTkRmfpQ^DgIH*x~!DcvrEM$e5S{<)-@7)t-ihs!VZCpxJ(m>|g)qXf)kg$}N54F14 zkg)soo`Bdk=6mf#N!g3YeH)K0Cl0>#;Y2#0tEtybFVG%uuik|3lgriAPt&dYbWtGE z^4P=9+rZN9^+6_9Gu)(|buHS_jsFaJmbQ9PEEY12BoxU)AdOw+oAsuL3n@PsxE96S z=965^|3GJ=h>O1~s7p`!dqwvRwaVDSoC4$50QeyG{$x1;%YZWNDn`J(P~jkz!29eM zMW@)XdHPFe|k6hZ<6+VD?0ao61oGs7O!DU@CS0(hG4b2)xHxXDBfQ7odR*BiS&Yz z7WoHUC3KS=8FKoi%!(nU(R>HX=fAnZ=julLw4>&38b7^#*38%l0V_f+woxh4j0Ds) z*5&`Icl%qAwQ-ww@dMgTT{%;jDuj?|6vhv+0nkPfEJ1gXCT6E4q+X3;A zXDwXw$Kr1;v%-mn!pWVPareVA-ex z8mhnq-^$3LgmY(!#c!pZa^nXW{YxdjXyX{a@%_k;wL_JQ*Ag=?{>#B#4A^ zjY0MOCSWSBIOio=>1A3)^_4yIg!W^x>Q0_s^8)rF56PU-mdTUDG8YJfUiegOi|Q`m zI)^u*1U9_!BvBQ28hh+@!_4|*L11^!clTl*oH;%emDy`&bF118cVH{qoK{$~XpH*? zhDnlr^5kcq(8czLi|dp>w{eEP(1Rx8o)|_8^SNT_#@$`LU2S>TbUcZy8&7W+PxE{f z2M-^P81h{`-OXLp(kV4<>NI&roRm75dCXD-2SW>LW4fD=obY8UI)070Z25evV^rym z{((Sor4Xn>bXFG}x#=Yiv{X&`{5PXUK+p=^;0{YAH zLbh(CjD+2e5;Wgz4%BiT0lZyUFlEMA*w}FrOXN_YUl%gWF*4t@_E(ASaO>tqn~I*O zUufcP`gWWi9AVRT8lmy#4u}?> z&tbM)bn;ji_6Xw&7&*eToA0SB=Cu6p$Xjx3G#!k$yb4w<)fvzQ@L5TeqQh~Xv*E=* z=p3drp!{3CQ9H5NMiEj!g!^2iv!9!-+BnbLep&|SCySvdO`0)-O!Z$o!?>3$0-!Bz z&3C_Wc7s{edi1^OfPka_Pc+h$X9{VxOUExGcir&!hO<^WNt~yZSJyjVZgxu{nkm!C zU3Dw=o*<`ly4neBAYuI%q*m!vp;5%qPRk`c$0kP_h30S=+7-IgHch5mo z`Xjcz%kSmL+3e_}a6@?vLuZjgYhqJIe2rRb>S8hlFU}rlOR1H4STp6Fk>CsYmTi z!jZOhx8D63W*PLfWJ8;3S@d(+kX!QE^Siu7?opSCr$&11Mt!-#GhFCMC2^TP^o_H+ zy3HzDcscz`d{6nN;6O$MAWr`{;)?XF=MIbQ7DHZr+nJ zo)|Hp{jw0$=+XW@M`m!r5sD2m9%x<9-On;sjIVZ39cjt)(*1!UDO=~-xBnB(OAjdq zC?v!C3?8SeiCcuNN$tUZ3@*KiW?~s*8GO+>`9ekCe_ON0d<*aP)Y6><3B{13#qN5# zkUcp)^?ZKdyu9z&8sseB_D<=Dhbg4}r|4cmZtCM+F1HUh-kc zj>GKkpy@OvO>V0QCv+L@TKcnX*DUMfbVqet^P=MAEqNa}`~J0{neM;1@}rG-Foe95 zR_$f^UB?KN5$@YtQxRF+c}gYqU$=S)4uiM!e572;znj+>H3vDzJDi#zq=~{n7%0z zv{~rqAc$hdMs|MlkWM{kU)yWn!zI3|Fl>Qhr|sbvWNUS+Rf|;1t$S2{yCBnJnY)6) zt!qjd|9ZI#sfiZOZIDw{LFmU1CM#POp=G#O*4$c-GiDRj&!!v@L*-Dv8fX8@C9bEx zxiWTE)XSGnAt{FFqohJ-f&oK<;JqNGW%x9Bp!8(duHyRO0{kJHRAjZ_Z-mR zQ>=mx+%RF;4Knb4k6=tUiu@@1lqHj7t-l3AL{AU%-JcmG2*Lnkac-HZ{5rkge2g#V zn?p&V2Yb@4^^a8r-Qc7ZG}j=$`+%k;_Pf3&P9}ZL_9Zj~N2f3uEL8E&toO9yri8}C z#xzJ(FeO`N{L-}=#HbbTiqt*BRn>Y^%^>&8a zqy*SuDiy5=_W(X3lWjr`O3YE3jVHCiU*((kI9_%*SlbIj$~is)Fhv;BkqMy+;_HuQ z#fw-N8dx-=eOA05+r^I1DsZ6^mW--8JZ~W~H$Rc9*?TlcI;U#N5|?mOM2-8AZmhqz z>umNjB>LshSy=cyM^%FuPT%cwXXiiGd-SDFCq-k~&?U=eXG$_Msh6cK|C!n1Mf=N7 z%l~bXwO2nppDIH%tr1oQ!3YkrmapktFii7hISFUgu8RMj;@>#KTW=aYs`F)R58ZCU zXlh#0@Dz=&kkZf;KjhDM6iG0Zy2WW{?*VNk<(0Z-K1^1Q7!}^)k`e-1V&oNQYSmN1 zdN(424r;Qtn2lO5I!;&*K>Y(KaAf9riGkDc$><5j6|q#HPPzi45$v#1IT_hgD`Pk4ji z8Vr2JZ7WnHgRs<|Wc4d@A`Ia8j43eL6f9)-a^M(9DyD4aUc(qmNmvofavjcMG0fv5ZKK%m7 zy@Jj$TVm(c!%I^h(@ErLd9!NG>+Uub^s!)hl=|S_-;VyuMdMkcK`gSZv0QSAsjH4d zQ&YeY_z(KQuE|5{A1D4irH^FUC<5Q|w+{wYWd3gDy+xP6KizQwfnT9i8`UOb?&7_|QZ!1U>=ev*J1gjLbl< z1D+YT=Nq=jcNYRQZ!P|qSJ&9ZPTe6@YUI59i>6+5cDWQ>^SzA(l7-OYQ9a+lP);9Y z%sai~G7q&qfq(2*Q8?Gi4!k+?)dBBL=h&k#JY?PkPqdwMM0D^JOVr}el|T~4mV`(G zH54NrO3Hf5)04R2T37_jbZ!kJ5Yp=u zR~1|~ms4t5S{hmkV>&sFXC$K{jwwN)a>X}PZ^9!yYoF0O4P}@DiY|XYzukR^NrCa_ z`4l5Lq!8e08%JZLIbyrs$`>d~K$Rr==LhhsL?vhAPs|P@wej(O+iOy83jO1})%Yv> zqZQJ#;PU6f?5MhmI#2ajNsG&*q5My6X!*;ZW8iV3Xe2ap>!P=_*+8?JwDT7D2+7Fo2sT~}y_qd}2UF(v4+M*ULA{s7NpnxeYJ`z|tGIDR40?e9UcQy7~YNYzb=<}7=eynZl zey>g%nVl_VsT5{Rca%{(6JBU7F3%3il~ru!>WIw{wIwOiGWn5jlO=})Lf(m*5f5o-En>-j*3yW)$el+bKtlk#4PO?8EN#CC zh=%|rB24&HX}{5eaVPMdnKS;FFWkqP2p%21T)J*@7I{N<=AU9_+f2E9jK|=srx?yU zblLECd;ZQZ*4`t?&Kv!)n7;+#Zr4+kfJuvS^wG0s}D;+mvpS+?wYTT z&oo4M7^3)89c7}yqO5gkj@{qDXfr`KU&p97zrv2dIfgwZk{V$v!N?9}oVbo=#{H9a zl7qGK!K&*GC*5jh(gAlOWtqEt;<8xc7p!ZHL=w>$FrH1QXBD@egs1LI*8i#1c-dCZ zP=8wss0a$Av4&atj(<-!mc!Y%lN9qI4dBFTP%EA%VVPmV2?m$3&TA)+4$1kW{j?#4D4eX7VbBs@T{b2uO^t zz1%cQF=#XY=0rYj+Z^YX7_=VO7`qb&In}e zg_B!h=I=tss_lHCh)W+^by`EY-0v~ef;Ri~#f)RWw=c~hMf(3CXZ2%Jju4olCDl$9 zCdrkkrj+9nT4D?|{kuWCK9Ct)QX$g9G`@8gLI6?{c;Jv+I9c46YpNxA@6#KOiWB{ zGZg;(^4K+zyH>K@W_yt-5ZTD7k&xeuvF}}4z$(DIrfo{97#A#b@8O`NIp5NJJ0ws7 zb)i7KXl&uY&VH&nlihuoT4~28yQT>4Q^(b= zl7e6D0)u|eB0A=1pBeP=zZFK$stXNv3Bdlu_!3e?{Z1NlhS!s!#PY{nWJ=MBLyqv2 z*DrI~WoN{TOxyAv@ogS@^{PJPR%MysVTnAZV;{rzTRtwfQ4#AjdIaC!+i6WijHlI1 z@gKU%Z{=%=@vUP+Qi?W-JhQ`hJpqOWgj^2XK+XoR&R=(yYtN6}^^sJCSVN1MPdnLq z`vkFd%OWxGjvSv+5tjPfWP-kot6%T(5dGrM-aFsnWt)fx;pY{c>lNY)`L}sR_jUB{ zxs|5{e9&o0T2;Y&x14*7Ax$AsSYWZ8$$e_&w$w6+{d;(dc`g?^F2Rh&Fn!N)MMC0d{U4=Yme%?|s*Gj-Y6c|3?CG@AS=dJidA?vgoCholII z8CaIL^&>lwPG1WsjG9UU#wGBv{Jne;yXdZ+bf+*M)_p%}`6#q`PB3vvrhWp^*@BoL zl$o!Tt(eCh<+Q&Tey?7!$A*Ijgv6$SzJdkr?8hiK=MrJ)3hz?)Q~c|%MZV9^J@N=knh524ZVbv2GMHn- zT;M+Lp|uDzuY8v+S-vuOO_wfQ$CTUB*(rh81F|*^}i@a5u7HvSoq6Y5tx%v!w^yXUv>FD;&SxVwLL>i)UZpSACYIFZ!rFi9uiFm$FH zSP@}`xkSF}yXANFrd#-asao`yLDUX)EYsdb`}VbVndX0OS>W>0bqblifUE(j4b0j8 z2@rqC(`jll8f(*i>u|*wT3?@-VtxHs6FED%V2BadVQO&olC=SZvVTlGd@R(Axn?Id z<2K!wWtj#4n>4mdkQ^;H-5G{h>f1{K`40o_ot@i{r(I%OZ%TrNCc?3O2K)c(kWgK- zXOsKsb2{(+_6gIwo1uu_G>y<*$Ry3o)mso~OyDF!-rj1B}TclToS zvwB>ohToSkw(ZUHJF$W7=_VW+f5@Pd6HK-LSi1#d@B)6YUw7=Tr<<_;{4DDdW0ZQj zWB1DBrEUvPY?+2|MJ*}OcgrXD7PEf8xVhMV2vpT!N?IpYWd6UGmu#LGhRDqR4W_1J zXQ%rQ0@d>6vs8%ih5ONfSEghBPoM$%83WSy0&mpy%?f#caBGmV$9DQ>nQG$<&fHiN z8qziZSG+DmOM*L7#Zr<3bj{WacX>yr`AQ-0-Zr)yj?M?@m!RU8EaBpz%6^zwfu`NA z9%*ugSFk8)nJb7eiQG;fo8=sxjhwY^EXjnZT?ogRfc3~L+-&9;e)c0aZo~IKAX~Fx zAK8e?dw~A+WlP#_Tep+-k@e}+lkC`Ccd+1(GwRnNV{&m78Up3-qb|ylRBFl;q){6? zWHdC>?(|DcSv{Am(FRsEqD&fbX5g;plBTWU=N>Y zU%$7BnAs|(X2q(cC~|qGfsBGCG!(YPHUgh;dFN(1?I~+X!|7$Dc2O=AYU*`xEDd;g z-)TmktuVclJ*TE#RsX}Kv%t+%3Bi2cDJrBQStZ~T+Oy*D3Eh@CuRt7FZpf^ z?sqDC(UlHs>&z()BnTEfpR|AmL&0cwZ>_y_!8GA!oVXa&TdTa8*Hl+uLF(A1*K;iR z?xSO`RIrD%%#=FI0{)+FR+t)c+ol!N+2~_dB9_husaAd==M(3+ zR;(AE_0740^gZ~i3rv`B5P?u1FbM$IqjT%l!9irX$NYba4)oMpcQ`kMb4Jl;k_#_T zqgIq5!89^83O+Gg@l#xGx&_^p9k%eh8XjuxQAQ=W#&tLf@w^A z%5#^m9Xl;rDh-}3_{m@b|A?8ky&L8JPhq}-d+p-p828yP7L)~buK_g{6jdMcB+^!M z?TW}~pI(CJB$z|N)CWvdAfc5{s9k+ie^iT7!W=m~#BbYG3rO zAc_}|-5!WS;zBs0vRh$W>*CbTy9W%_^tJLPGLwelZ(r)4#o$VXGP?fma9*y8{kCnI zVGLj5H{JNpwtLaQWr~ET51ompUM-rTsA3Iyb>%-6SKskA!2uECl2u!GViy-oArb`P z{A^2~xo7#POm(bt`_6nvTaaEQL<{E(FpDXXjuqRf*zqCT_;ATR=#(l~cIR{&k^iPL zSFwEd1MVd(REo-jlJUzGz1jPy0DXqYXpR+d;64ccNKC{A1FwNG(Es;tycS}_RJJM- zLqty)^M&lK-n+&&`&(8DXiQXGQodAUy`wLx7e=ORX={65iLr|~S}e>1s!~KpM01`Q z&yB_*I4|6%KTTyDzi9U3^zP{9?htXTaHH8N(5{i{^zAg3kzier2SWrW3P|C!WRmgR zuho;x@@zBY3Gy#qyNVav(4xa9FE}CqrRP?aCI>O_tN|r=m`l|1Q*NsQoaG1h(RaR& z**ww_n|D1s&#c?Rdlc2+THfri=FFc}cdox>8Zm2Sqbc*|oxJiWE-(zwyYr;U0Ri_b zhr&kq-I@~#NYos=6Fbz?E{Da*+9_{)YN;G7xL&?7UYP$Etv-OwpH0Ce62DuzPm;Dn z6c@**>Uw{sFI-20Ik?pCTrX0@5PC`#``J-Igr_OnoFV?T9ks^(`yxQv2fxbk|X!yVTEa9hm*rEf_dtUZTCXO_iko%IZkWQCc#3y}s|k zEg@HEk6haK>uRR}IrP~5ks@|hMt^u_+9SS`x!0+tfIxQtsAI&*^+uzJK0no%_?@PW zns?}dyV43;gAZzxXBGS&V9nEDVdjtXMVamYDc{zLFwTn0cV50Av21oVj%E{yB)V#N zJaGQr($#O^P|HNDZHbY{Qh~RJrZtM9hLadd**}Ho#xZS&lGoEl9eRytLCi|_9ZJfy z$E%)ZnC*gRYFJ5664t{UA`%>wUpMmc_E{|IGv|?y8q!eOp*F)YpS})a6yx9sn|R8X zeg^mS4RcRaO_^4T$@vI2Gxqq%Xu^Ve_h?9e+14#x76k4 zD3k!VnMIE8fGJx~6I1cbo5O1uwekLb-q&MfYirBs?aD#>u*nw!(7GR|vc4dcjZYCG z5np0z6=BxiVt_JlcU(P)a9IovrR$xP*#kk(uAR$??tkC}lA}%J)7I2~bO-=~OZD@U zP1C*0|Ax361juRY@ARHe89ROQiKAjWY33_p==RKo2lcH1WW-wPCErpqdRA81T)52~gurq9bQaS$F&nyS0KcbOq4)~&GqFmcJ(;@*LJUvf#8dGqkq zTTWfj1>wK6XV%-ivTTgUsOgSD5>NDHM4Z_BDe0=2YKZdx6c6N2`EdTh36h*?x7gUc;YVsDN?o%Zfi{XX@ zW(oceu;&Jg)2m+_2ZLwbX8U)k;0EZKUi019j&$|{^O3LNZ zXX@P*%;Dv(nJ6ZPc9lLuJ&CTCl(HpdC60{c2mY1ZPc1Ry*2|}q^TgtLmbczZb{7X> z3r(C_o7S>cBnS__TPWdjh`(=jK~(?0+aYh#;{)BmU*9_=7@i-*7rB1^MdI4J|K@(( zSV0s=9j)Z=^G(Nr6A|x@k5H8K<8eT5*_Fsg`58eWfkHSG$_DRp47VmzOo@e2PWo>= zygfqvJ&jCT&Y>MS%71>~T!Q^fTvfTr+V#@XSjW5=m^Q)ig^`iskzKBDjq?#AYpgo&9NTv5T64(pRDWYdfU(3>=4LzBST_$n&!)0f|%NY#K5P zKnA3)VSHIHuXeP}03<{ZWY$`nkPggWnchU!!8wMSy--R%v_tw#@1jSuf}ZSU_d$JL zc?9azH0_#GriNQLlYSruTRdeG*-k=$F!ugp^y58f{NWK2TCLZ)SKaPTQW+dz|N7;2 zJ8$D`45OXfB9_WYrr^M_=&r|Kc)9%9kr|1p8QKIDdVU} z1Y2O788s%KrS>hx8LuAM3~YZNpSQeFF)^1cjWDt)p2~04i?ft>9X;>ozG^6x<4zuY zKW~?8>4D=WFuC^yCtZ-2l_nD(bPV>thS*QIL#`5-6Ve5QQ^q~VD@-5b8+>vMsz(8J z8&qh4M?Ao2WU+jfA!WC2U%5DLUUT;M2V=*pQ*O#qJiWNX^D^w-CuVmagF_up*l7#f&_y$NZ@gnai`Qtch1_>w0 z_(6c9EGVewn+wO-P~3rp_jwQ5$lrhQv$xkOX5^zT_;dY`>ce`-#a&zWRP*A18W%0%3nPf4O;rd-2vJ_eCxMl{6)W=yb~OE|xw_0h3qzJ8MW zN}7t+;XQUrkv;*p?qAaotlW)h)SK(%rV1Cm%yWXgPo3RURX?PI=mXK0pv#CYxh<6^ za$~GCafmAF7z@oPV+O$p*QSSkCzQQA{mrB$BVJkpdh#$uLlY(l@8IiOs~|7$VA9XP zHoBNwy;2TcB%VbrYVpXZBptRC^56)12pg)(J+i1lDI2R{UXnPxzDZ7*BSRkh#F7S5 zhxS5~So=yb=qqI?*h#PO!xuGTsM&Ehl3bEicJ;L%dhiEP0V~#5y02hu2s|ciVg*<`ZejWJWfj@ zh90@nU&>C|LNeancg$Ju=iXPL=S^tI0?dM`h;^e+VBP_JHiy@a`W}iJB=5-+Akqmn zI+YE!m@qWaC*0Thu*WYT;8d(9cy%P^TXt2e_yBqNDxX%JWDE`ga4H4<_-J^sbIdjg1Q za)?p9$mYUl)EOK5^J%I=i4WxY76^EtHoMcH`eqU|9RUSt%DRyUIBPhFlyTmG`3>yZ zq5rPC3rv*XZ;3q_o`)%jHuTmBfOe=R{iFm_D{Yd7m*XN3KJ$(O>ja|*ooSVpip;ockl;)S@?nFMu%h*>O#Veo&Udf<+h4B1ua=lxJsOjN z>!&9tQoV68hpcFP4J*F*f9oW->rwe4vxFdDJxK(xl!9Tb;@MG~{|h62a{mQlILpUE zGT}SNNK5x!N+ZA51@`rp&m{bEp}}u1+$|~QMuPm>^eluroC+bt-yaXb+C%u%}7s~*tXEbTlaRNm)KJAna2t(l$qSjxRl*U&p^6d>*1{$IqzkKy_mvrh!ox8y>?0XB5hGc8 zbr`KyCakvKbgfNykPQIKm8=BjXB=r55tMRLBTurFNjzvbMjjevEVVC`m7>A1D`=h; zQKX-7>VDn$>QqIwb&mx>BCc0}K*rNE(%M zQu7jS%S0@8_gPLOpwDQ$>=f?Ry;_$W`$T z6jthokrFfNPAE3sTy`jMP2u8Ml)Pp}SYES3&d$!SLJ1JjuZg^GUj&`fmA2m0DGkxj z1r%1Y&yQf$sBYBQE1k2;e8I(1#?h)vqLg^E(C=y+ZqP2)JrBk%7NYOqdSos@Ha~Y? zEXRQk?O*n!IFn?DV>LPD_I|7R=x{CNsrtn8=*>4zD9Z~7-7};H@H_#F6fhV;*U7~x zQvj-`7E}Ue|MpWA?5g8#dO*D&`aClA!Uud!;X;SaqR=S^(m}JnP_|G4$^yc zf+(kp_lmj!TvHh6sXs=u2p($frIqzcIHxem10j}n}U)rdEJ51J?8S*P^G&O5vGI}JMx;G|4!J>V5!(`um3~;_+V}|F00zJ z@K}t~nq-?8vV5HW$g?qA59o^p!S*q@c5>ov4?gr5XOum5c=eD4$=>KJr3Tp8ZrQ=nPCnLlqvaKP<)hXG1^dIF1|GSv)Ixq(`iTQ1vI zdGNqyyxndYPUIJG+Ky6Fjj&zF1Q4;i8kzqgybnC|*I~WCEZG8$-rqLizGycDb3Kd1 z@+1^m$tl}9>4#5Qs_7cP{CqM@-YIsCP?T$(Zb|v-}fl=QqafLOUk!1u1$u zZDR%!&tM&fXBE35JX3CAo*GZn_svHTuy4{SSk*7M&}*;5TXIJGgo`zevq6AK=SJdL zgkwthP8!3i$pMi9Hw9|24l#(U603$E2Vu)(2m*LnWAcQt)!V(paI;7aG&<7cwR&Il z*QVa%;M38)+JC*z*&$f>)m9%dJ>f@jk?Ajjo{r#T8IER&&c|dg%5CbXMSPxd%jRda zy+Z@u4`gqGuG;*$rE3*fiz1&uzHd;^WFS20`<${ds~dU9Z`vN3Rru9Ov>Nx{Jrl`b zk3q%33%tlDdR*O6(X1?^95Nftv12^k!BSD{TSdxG?@g7BkOHyrrt9hX>@HZ|=~teI z<0*7YmaG+MF-foK7d!}}{?#HAg%SzitHsoYudb@GaLH6CT=COq@5`R{Uq&o;F(t?! zSNM0Kru!qg4v)btWyXU$&b-thJb(MRH5HlCz4jxMF6@^KCef25w?q%QejOR<@>ydR zf`4ty<7_j-M4w?>1j3_KJ7b8D%ckMN+=*xRm9`BqRK653+|d5kul&;anOOtp*5%^1 znUBB4PPIX|l}R$L-R+%0`D+=VQ-yKJRPldkI?I44yKrkGjew+dmmo+> zhjgRT-QC>{0@AHC5`uJhgLLzfLw7fht^M>7(-r3UB|8 zCiMH0-WX=z1o8FRp)NyEZB%m)i1~MX@hLHd5R5<@zNGZ1&Y>%+R>B%aV5Qu*xusY? zv+V!(6aznZ>oXn*T*Mb`>rZjVnSz|Qk#pX0vmN~|f~cdbbwBG^(8sjgF;`*6{CQ1t zMq1k$>{X&a&rj8D>VLV}wYU}O8#JANx+G^MuArhih`nh0cp*^C*MkGtqAZqdiE+*$ zd@G{A5dwUiL?ZY5qt7EXc=5eMka0%&CKy2^WcCoh$W1mhDn68|+g-o1va-3Q#kg*% zT8|ZUS-I1+0f}_}L(usHhJ2Zx>$~p`U*w2wdF52@Ln(3=25J#i2=Kk5QjoI$5Uro5 zNcb^sr-bAWX|t|#Wp~n{lCiS7q2?W#e^%8{e+0|t&-gWZtbn@DSague#{9Mu2GDAS z|5kCieG^R`8trxYUt>eG5ITf-b!+i&>DxOUJ2$-rcYS7 zMc}dK`u|?qwH!M?_j}`fcAAbJ;t&NzO7EYv z1TCKS!nJRIXjk3)$5Ui$vG%TGr6BdZpx5+NCf#)>*0b*3I)Mn!iS>0N(y zyiR4!6`9~9+Oj*otg*JOj#a<~QoQ1bP4JzE8u!JaGO zM@|D>h9YIXycB{6m7}qmFCXv;YVkg?GsM!I+ybD)WnsQO{}8wF!zpxVl&k;l7jimF zwv-mRl2M10T|;WN3t8<*Ek@oafy-V$w7M@I>Et)u?ApJvnCR>pm&rZqq+W72>$PZq zy$aMg^sxBm%0TZy4f>>ZyeFQX{98~?+TJr2RWPr$d-qXxJ<(>e7ar7q?i0z%?JbGF zc)It#XTY>7%V#gImd_zLX!i9`(53hz5c!D8tPJMJ`Bi*=-GnM${L%L_P{xUmiEm6# zb@XJz3XUW?t50#=TpI)((rl+Vm6)~=iQnKmAD(5=MY8`l>5Y>902xa3RLd7ESya~{{|O*B0a*je|VSm~H(sf;&>GsHW4@BKUYfiNlbTt!kwO@oSZ}73F#GAuXab|+=D%-CXiwhHio5fV<1k89SOhE^7}>R9fhXR3w_wfZmqEu9zLS++h55luCm9^*K&!VlzWQ9JY;LfA>Tw8tVEOhh zmzZY0{a|m`2G50LO~RSmWnPz_WX=>&7R}<4WH##eOt5fi-GpK!*qjr(ohCjs-C>NnH@Er69xsEe&pa#E_E?#`Bec;*{0Dk zpNXXVeXG(c7IfasR~hXDA+gEidsA7#r3C6&Vc{8BIPd_=9V zDb5w#U21KrLP>o7%F}AS3a>lR3DEC+s-ex~Y)o_%M!)Vq2t5a#dqUZtA5%4@ef>; za4(v)mO&tj_&nlrgLgHmaggmNq+q)%$<=U{p#mhiW~yk@_6gJl`*ZEa46H_$Osazo zJ_@R@1+P`k%0H3G;2`ps1mzDcI(Qlts~}0?&`LHtG6spi42IZjdr??78`WhMq;$K7 zUTG)LL9U8Az8p8y*q>J$Mzh=y8~-6;Y9gcjx2PZl4_}asyB3ocp==q`@Zc1$p zOOIctamU(!F4eWz<+*oh4 zqdRcuzw4=>%qQy%{ft{IZKwAYSsBq2W{A|1<2$Lf<^;gmz)-W-T=qp}y4t2I-}Cl~ z1F@Acs)ObIoL5F~eyO820f>r0GD+2PxX_k`$T2RnvM1e>gM*jJZ59lW&V&)qJhsg} zPvL0acu$;KD3!llJ`M2q5(>M?Y*)SgHIiU5b5!%??mKoxK$#xWM`h(jhpzqSXWd>W zDR@Rl|qTzoP2G0xgwUB2;AUw+qbd2-7<->kS z|MfacyPp0=f8gZrdGSB1Tl4>5q7rwKHkbD6!}swu&_|Dr_yzKwfa$$p8g z&+n6uQqYY2SWI*e$3+o3b}Zono6!}kao^0BJz#O*o0*y-a45NZWQ9h4KGt|C6kk^d zmdT(&kRx+EL1q4o)}lT2?X$vX{C~6uu+8qg+asNqQ|v_BJdo9eYd|>Kd95AJC;TIU z*PLe~Kc^|46()sdm7=YH^dZ9<+H)6TP&{f)oLe?~=!bttDTMo;1@wuRQ%SOV@J7fn|pV-E!bpA_5ld@4KF8*TWR!jO;LFqpFKB=K=;W7M?u zI(!H1ME1|l;;I5K(ScUeXb)Z%Ev>Cv>(8g_&FPbi0t8!2s{O-=)8~hEmJMsy;)BGB zDlaF0e4@8vC{Icgr1+KgOQc&qn|<3M%I7-nP3#Qgx*0PY!eOCxO9}S$Ehrn(PVZUM5RWPRniP}f(op`!akW}bB@UR<`i7DwFoJ+^2tqi%n zczRWNEOF>eYaVRgQvX=_{1jw2ah<}bQ>&%t?DpR-s2|yQe9SVaYAP6~eH6_c|N95> zjpZAuU!ZtbVDR=b3!&rp$@9Otusce<1yE)eAOH&h3)-pYHi zXGPO7{>O;0yH>7X&o3RXU8h28f-vSO$ard?A=_v6{h^x`*J{IEo@OLTKUdRDUr|C5 z$l|P4Cg#M+S!A?jU_i2FCEToL_G`Y_%oH=Nw5_uK`<_@gzylnyQqm6HVaRX4C>5$A znn|uCIx{}M5i75+>oaGr*1r9A&l#s41FNT$x89t8WtNKvn;TG&H7FRbd>`6Qpf38>)Fxa)p(O`yuHPH;hli)rBVmg z=FG|W`?L6KdmVcgwj&+6Q7~pFA99CbP1{p=%WoQ%kWYizcx|oVuyt`!fmXQ?b3-at zn%*R%RUUJay}ElIx2<$=kX>sp(5kGT8}~xZDeH-4|F1jUe8K*E`^~qJz#ySXxjKA$ zQriN?yrG)lODi=5IEIff{wqUyZOTqV@KNCp7K%liEf!lf9kEoV-NNdi7WytL8m)g2 z`my|;^= zlILLNq^Yi{sd>@982Tc){;gtpbv_)mB4+}N%tV^mq@jJ?AO#6Ctv7+YZDq{>)+J{Dyx?B z4KU%)FL7{_6pA}Fec$Z#1EDEy5=?M%c>e>8&n1~nNo0|cG#yc~&-+x5R*#-e^-qtw z{K5bv`gnK83(oETz|xLo3+$YW@nqpx|y2thVh#fA}CMr}pC4h{XL< z?m6r~EA_nSFq)hs8PhAP82L2W>?vEm`Z#50yJ0^b30v%$o?3)3|MN3Pjhy`FD|sBM z8(}7Qm8RGg{mMAik?YsN^?KMDLhIPlswed?!_YpM=rRoJe%_HxL_c_!Fd&>N$e*;> zsQPPS%(-#bWNE@*h2Gd|c_*a*Imvtv=O@SN?=E8*&F@w?6e`PB_P9T+D=wZ0((Hwt zDU9xy$;#gm@?xBKQjdz~51D|P<2g-3XTU!K;g-;9`0dNTVju1=y%dSU8PyZ$n0YoM zl^?*}HEEx^smb#nf6d1y>ii*4{SM~41`E)E1`85G;t5ehI28sQH5!fXQcRZ>mX9TJBlQq8OP#UGa34Zu$E{c5wTi8}tgX(Fm3 zr5`V6Sj1iZr9kdJ7{ram~hgG*zlBd8sf1H z=XGSN{r*2>mJ7HO7VFYkgS65|P4g0w@T1B3bwlClQsy-uNU8hWaTy!KA0?GQr8}rl ze2-DLfYMh@+Z#8Ft#NaHlbYV?4C%TWbTgJBzXa5ueva7&U_j<3X|7Cs4R}UjW&)Wt zI+b5%@v|+FwT95Yvt87K)97sLNd4j1^geLCUpsa9s)bt#tXOtQqATSQ6w^K-#!~$? zs?GG#75xb~#Qn}=U|UpW*tNHJmR2}4ocZp`BFKXbfhaXyzUfSq(cbEM9J&APOEchW z$M`Is_ii*uSA$-mYJNbxR;|^%Txmo&VxY!e;Pg-EN&4-V(Y0D6L{A89MWS|G!>i9W znTM+1u0!BDV&@o?SOjtY7G_3nS`C4O(!%jSLLW!Eatp;;4aLXlPDd72;q8!$OiVt0 zajVz{w3->R)Yn5wR^{{e`Zt#^5PK#Xa4U>kq~k34T!AUU}g zc`T@gugcdryw@5#XGx?pJ^TAl3#0VpH~d-R-)8bZ@vYmw2#88kzB=2!Nv$nus8PhE z?RSgQvQMy%YP7!)cH1audhBoP_Q3eAIc}#D0Lox}2F1AH>(2`c5V!Ds@iqls1#h41 z6pyWRetd42ALwOOQhNLV;qh434v#e1Ze6|jvC4ge)aktG@E3LPeVS(*sS9%zyF;zM3V8&Vn=h3J@UEM(M$r>(SOx zCpmHLR~Bu8hZuMqB9cD-y+X4*xqm2jAG~w6-%=nVXHB^DW(t0P*WA*!dvTHQ@9+Z$ z-a_`Rcj@vU&@BZHWs{l>0A%sI9&hr4p739*i!-z`pqE2w;@B<)6uYME81NmDLwP(RFQ0cpPPT0>=NN7BCkmzI` z-EKd;!z54iYT=KgwXwIoUDen6{hg&GA?DqptaLh+RwDNQXcP#&0zSPsk(Z}SJ2iov z^##luX`k_|C?P50Q@ulhTn#4?)Lh8klF-`~?r!iAG}^yniKe0c`i)T^+l!pV`kXir z$+_L6rPZ{dwXfDLs<*i=0Q@rG46vwMQvO(IJz~;Q$ap69b=Yjg2QR-~IuhP2j!>&! z0HwcXe0)v;pb$XZX?JVO#PXNv5v(5eRR0Vsgq7K^4b}y6-!+vDnco$t9El+uiRfsDi}0fD%!JEvNd_Sv?Rjms%nM6p70GenG95;@wqe-a3~0YgH7q z57x3!2>bNk-SHc-xPg_C<9g>Vv!++v4a1SWCLPXE3NeZe3Yhj{ryL{|95xD&Tu?i&#&=n?Z|KxfbNF4O|@ACo6|MG$a zwV>K}DJgA>)@^VP@}#y*5Y8omFE92_*u_~E%s_sy&DJd=AGSbvAZ-*>W8bEvf?(f0 z$%j-lbe+YH0gMFy8Y#G!gcR6aavwFl(R}MAGN{vRvmiLjp2Nt(^{iOljihy_k3WR5 zNH94qe>-vSJ>JBCu3CV!8J?RfImIW>A@KbLF zo|QaH7R6%My*`e*P1K_IQf<~jy~VldC#8@uCKAQHS@v+xg^RtH*@YzrDDHghev5Ix zR2;(Csd8Cg_A^Mfx6yZzCb6Uy=15#F(cUBvPT5e|Jy4WDMoKkarrGx85;{8dqRM1S zyrxGSX=D<3hp>Vq(h3PS7=$x|G&@HMvj?+lL@qmH$HnfpYGw2EdQfQjoFoS}q_!|d z4b@`2Lxhz0TP=uXk%y*OEvybyCjabG*l-`k(=*M^uX4cnkV(jZe(n|H&zrw~cCk}8 z2}+3AJZc|R4+FVaF`PcTe58u;?bz)2-Op74u^X_2S-$~S zhl7Iy(W{6sXT_hdN8A-*SrqC0oY@5V(~DOY3%3VCZ$5JM(t#>RC=Z3`z?4o;s)=2+^QNm>n}mjlWCN+2$t*KF%Yd7?WG6ct z0}Of`h6da2YzcAki#jZtK3mjs>dS5|FPa^bv9U-bTChr>v3Dlh-0{|Q%tIQ5ml@n& zhics(^t?4{$Fua|^V(u%8rJDM*9Wi!Ugu=`l8VJk7j!+e?YLsQ4VAM>spOdkNA7D) zqh=yPj!Yf#6!5*}lgg*%jRi$ima+K4Sd;(LuhUsg+~+v`gVT6gV?Y=qT?Lp%n4RaE zubAI^|CsvjRYpJgg?$_Fp_e;eg>Lf0}Sq&Mur`Uxfn zgX!(8ugN%N58cz4aljLe^wXJh)Q%jjpxZh0Je#-Ms$ZU=9X% zXIQncf(ahDr~}~vVn5}OkL`Lj=_{WLIXdc8!2w+lUcxl6HUf(Zk}|Dw0K z4`*dZc}YL9F3U^X%aYFwRiDWR0krA*W*ARs-Lg?Hf%ywP{dfVM@<(M4f;{)-z{qD$ zvIvj1aX>;53uHF}y?+^sve#tRasrm|!11u!;-aSDKQnrr1zIuecp&r*T2%{$*79wu zdjQEN6!7>REDvMKTyU!19aE&NysZ@IaG!-p2lG*`I48ld}glD=zG$OervMDkVv0i&p){+h2oy;Lq2G`ryZ|BkBiv@Y;zLi6%Ysfxa&7DirT z2(mf(=u4V1`+mk4eg8HJ6K>wVU@{J;cyNHk$#N4_0K>R3=vYvTW%`5jRPljFOhcaf zv^%^JI=eK74`%_<$DyCDoD0;j6P(|h-OXJ*q*&$j;L3OEg4cVB>MPJ^VDBVExW7ZR zbV~HWvy**3{G}U_swCQPKPdpwK3l}k3H8u3?U}O?rw!uNEyHH`)n{c_PWqxZQj$UO zDn#^g6YHOS|N8oR)uOtv!VT*YRAUoYYVNJ7WOy6MU-RaDVZX|MpZ^I}U2Q-r_M>*V zLHWksE6F*kt8&2$ z!a-ok}lQm=}($oJ$40NVPM!rtE{cB72Wx&K@p3Xpz$l)=B8E% z?r`6&W`&xz%K68deTItZw-US5QnhsGGWeUQ*%eL|S>eSsg%Jw}+kf>_@cf~n>+kupv3^UeIzB`F`G!PO<4R{vp*#UoziVU7DaDN-B01+X4wR-7ee|Q=^D2;?lAQx2OGNU z-gjc=ytCr*Ypn<}XcL2Y4&`G;41OfSTIV2%1%{rUS{9!U11T1f)4hi7qo6V^Ofs3gKHqttN=W0vQU1@w)l(>CNdQe3@4KdN;lmu2iZzZ>AZ8*EP7 zxVi##%8NW<;ArRctvJqr8;~cB=B-F^PKJ#Bpsecmo)D1x6x5{TY^Wq=xNE8n3@Zyd zjupq@g(JO~ucpRTw|W`06_;Yxs6PX9H2I=-=flHDpgK>fo93XGKWFJj3-?_uN7s&3 z%H$3KOm~B)_q&FuVt};_IC)g4z?Qz_9cQi$;abeilzN_sWq<`u^JkZCQ9K zK4g_)v4rL6gY6vQ2YOKj^p0t(eo)iNlj#Vl9D9~C(nARiGN>AK;@dfG^R%l?Awy7M z^gYhewqST?J!4`^Y{}_0X+bpetoGXHy(v`}S`IA&Qspn4;=u9fV4 z)=@-FC4+}R_R_dK{=UOrTHSa>ZX4B^w-?Qn%#xICED1j?`l^v*ru=lko3Lww=W=_C z$hTqOkAJxXO5qm+N9<%`jjRu!Kgn8i_BgDXe_0t(cGwc)%0(j^cFQzj0FJAW5#6FRYXZSd_`7_yIl*3caJ(6-t7As5M$N46fzVh;P_p ze(y}b0M%F1TxfzfX5mCiH3SN>xNbQG4GarWWQ=yv`H1f`F{8S<(!H84;iOWGCJFd@ z#s6d=KO$-9TwfiL_trX*MS!lc!jv6vWwJp%p!q%SqE}j~g2f050-ob1rj$!TiQ{(( zx{RjkZ(sHi3d+3v%J>p*(2*P-o;;&7)sq%^oF`W_U<_1g0$=fY1zOKbrXc7Dd_QT}X_~FIkxNBtiCP?6?^n1I zE>Pkp?;p?D)9Q<^B*NYmcwVdTYm471JMA4ZLKEdCmB>1E2%k8PCMoGSl{d|9+e9Zf zl{Tzg$!%66mvgx{PO4ME0JtJqIXNx?0RyW}l0^V5}q!fvt^DSf}oMR zp-rdkU8is#s0w3GZ>v{$bj%NE#0b+{I%Jt<=y8~GUQZo2f=Q1`4p+JW2OKMQJfyYd zDa^4dzq}iFGUw^O<}u;|Lf9njmC#a>agc_BgsP+YkD=-ciX2G)vc+=)%QuH}49FiV zZXYvm@vL&$r1x^|G*JX$n_+WDaiE~N%w4wFHRKo>5F7{5BCk^Zb4aca{JKiCAxIE+ zzJd5cYy*!kBfP+RF{)dGTUcx~nOi?tN{nLPO~8`HLSfz(kGE;sYUPMDB)s9yO ztM8E;1%k@RyFMly8L4G|EOJs4EYSHloar-&PQ4~kIw~-7Y)r(Nt_Z9TS^Oe~6lAj= z{&q~`^~@sWpGu{^k#dg&inL#p81ID};J2u-Bu8rF&WZ@-0RiuzJR@-4n?CHTyT+Pk z#`k#?*V|{GTy^t(iO?dSk(wpDe=BJ|vV8aGo(-}Ev`?i}Uo~02dCFQ(A7;&*3WpHe z5qL_7YXFG7!*oP3s|g^i1`{{NL`Vg zw(hlrcFIX7>_$#fNE9PkO9!})x(S*4+{Rf>=FU0^->>^?tW=nWQvI+~hV8?R5`k$Pbb`=yDTE$WDhkPZ{2=Az3Xu+Fy)q!x(8BCl8|6YU(p%q@M=xHYGOUuDHp?+xF}5Go zYO~v(KV32I8xqPi*ZSuq=a9oXla4&r6?!N8E?O_jo{Ym0r7p5uNs)>$E&Ex`vJ zUtY`@!bpuRPyL%mu$;$7ZHM2dL#)eN23JaQ9PX*Blii=-FXY2bYCgAsJT|ZA(1PY- zA4li@rjS72^9j7apIP}^1>S5A^j7jK%c_KHBp%|%eH!j?2YWrsXeG%`twaL;Un*ve zawf*MN`2QCl-Z`)xg>B6pLUGIsuGH7+Dx85h=*YGE-mtqOvXCr`Dg*ez8^g^Em-Im=i;Uu|R_q!7I5&wc@Ygfj@n2sZm~DlpLvHMxr^f6Jf z9y=Dy`O`cG*-z}GcE5#HQ!3Mn49cF{@FZvVvDk#Pj6~Zto_sS88zL=tGN}*m)BIdz z633ia@O*%d7!r729M}u>2Y+}VvRjDc;(cMp=1I!RXZ(AAEII=g4x*yPb2iS-&cLv< z(FNOQP8ug_^0r!TYasehD205sQ9kgDxl(>00nF~T}j z+CgqcJejGQ1qE`M0HM>)S=f4fY_h5tx(*xn8S{IN195uxtRHH~DaNvXLQP-hqgbLr zy`nWqB6_?KAHA)JSko&feY8qsna~QHMro~=X0HUKUL$FzCI1-alxm-DK6?@1)a@g@ zyHrQ$CXfxq{q(p3?aG~p0dT{l-18|Gnqd)V77GfOu|#4r=qjC zyp8o@uGTSV;Y*c>QQ7G)kLQRnhqBY9g+DXD3v?z$*3u?5t;;;jI@BPq1`1(EtAgd? z&NH^IOQ+jf^RL{vs>){`u@l#oX4>Q&DQop}7|xg(4Acy)_CEL1L=8`ofj_x&=pX9! z^SNqEqi^e?15g{$xjWrd$Wix{4i`zR*X0(yb?JfIL%rajtaZ&=j5dn{V-)_RVBWM) z|Fw>n1NvYFPSrVMq0An4wWenlB@ZxR8496FKKbu-k;QzOS1d?y$0cPJtbks$>J9vN zzteMm4jqLu(F=<RPCFDQRw|IU?L6>Z2&{3w+b-BAq3Jnc~D)w~6KQ7#g zrKXh{yr58=?+%r#DJA_gY?+OvZt&lmC>zp|hi6y{On|aQ<0kM|-KZq(^_?G~ zu4{u1PB``P?Eqc$CjuQoZr%NxY~;#?-fJB`Wuw|oCaDcittv+#Z*T98enX`u!az

K>8ZRzkd+KXys0f8LgfdO#>$p6H=O{O$+ACOS;MkTRusfFt&hSd5w6`jh- z-Z<6R+gdU;xc;tye$}u@US}uJHg6~C)}p@?p}D}(j+)PS%=@_J@Oe?!R@j~;P3`l^ ziivrbWo=638+MY={qHe9JJE{=4;aJe!o3RhL~O^aCm38Y9g|T+kLS;u}VEqX?g-!f;D46@}OD6w^+=#k#Pp9M_10HA4t}klS7jtdC90el?{%1rTT5^;&h}f%p zhO_LHJh6TbGp0;-fY!y8!jbySP7#0C7YO5BxF-HBhQ&%r%q$C$ZhiH3^0Qn>q^YC< zRTMnVn@FMcfS0twB(%ETaZdV-FAHbth2q)3&il>BoGDPg;D8bE_9@WIYv>!m_PTVK zaAqXgiAy$xIy8Bl{RSk{d4gt;ub=mKLG_;eZ~p8={vaP9q`u>3u;xVRANBAu= zPO+ADcq(BQCB;?r=pc}hyuLjiR&_kz*&f2Kn!4t016!QC03riCZ+_5Ku1beDJGIeP zS+wm4VQ!7X^zyc?^2m!bm>wt_!w=`s233m16~l4_S3w6mYvvet?b<@wJ>-&T!UV?z z0eYt&t}~l?fjxJ3#1RoFZP=*d-}!n#>L0LRf%4GQB(Zl*eBAJL)(-?uH#e!{DMfjx zxpG7{SLX!NGG9+WzQ-ILyjrHRG5(AQ<#!JgYbj-(wki8lVf}}Dj?6`k?Id7fXWF_` zBH{nM04aV?uO@M_$SAM>UYY`%GEkI3I60B-&|~6Tvq5st#&?TrBPdVBYip9E{a@+l z^_9&vm5fn#Zvwq3l7H5C=dupfdD$is;tewQI!WWQ$<4k8|6q>eO<}AJKiX=zAF-JN zfmD4TU!w|>{FTC|owtHeUtPT|n6*RlD-A!5p@v(>h7+BK1_+UbwsicBh`Qo!-jZd` zF&cYtTuKwb=2mC26hI z0SCgn=exs}cXs{~TBkz-Cb~r}_Z=_gQ|iwUl1klAj5zFwD7u@mf?36_OL}o)&t=RkTlLFQOJZBM+gT@#h zUYCQD(}%LT<%Wuh$<`?iZv$b>lD7qKlk_!HC{;?$yEGqYqVnzY4s==Cz#u*d9cR)8 z6}}Z`*uA~CI?WEGqgPHH44tG2l6Y4_D7@Ws95NC6;JPFt`~B0qhaE~qI6!K>2n}-2 z!8KnJHY$b&dx#n^)h{D=cd&sYmbnO2v@2S=@_ZF1&kdfHF(;|XNdDrQv6GdXeX`}E zb~~Ay1iKe+uM8{=h8{;Xm)?|-4&2kJ&8a`|q|MD%`}-U2&aFp1F1*R(Y(4>Mz^-o{ zi|@uBNjSA!k{vIWt3@6EvAb+iArTvAGSUQ=fR_W_q%FyZ701n1%&_VNmAoi;YWrFi zlZJr7>wPvWZjyS4{gu$Vwv$aWN-o?LeB!QGPMd;nHGL1DSQ@txmZDIlLpo!SEd1rH{cg~jACY^&N1nOfo>q7gPDq}3VW3wF zf;K7T2^j)uVGirQ;tTy0b9*f1M$WW-WU?9-v*K6>9-xQ%2)#F29sW@hbL}K}tYaxJr8gC~Lobmn?Z5zq1XHUr24a%`7cq<)fqZ5 z1N|O9>w5;JY3<+!t*t5vpMdUyS=EWjNhKaLh()JP?V==TH22K1_v4`*6t^+mO(XVJ z8;A4v3PKHe(DEG7%Kmzb%#lqigLiU=yWs4E>|eeu(VsY+RHhK*8F6imP<=;M+m}^)iH(9@RP2G?nmO(oG+}7K+i&n>5$&iTp0?{EmqZ6x z>S;}V)S2NCBK(~7cMK8*yL?tS5=j6nZynAk#$R!csZ`WnthjLn} zffKG)VM6UFiL&TnS9|;PTJT-!dxg?I^0BgK^RYQ8kE8rx3M1jTm>Co zzXw}`1$RnG+d*46%bw<*k9dNpre`$%(Eqf)8z}B))}hg6 zaFr*kl(rzmnQl<`{;l?hPVv%&G(~GSvgL|bfVS7uO&22|C;t$S+d z*-qx_lw~}#!WOSZ>{kNSIV0Q#^42$ZcE0x*efW$I%`E<6@n!*UGcID+`|9kM^!4t zpPkE4ug+f>J@A;kY$rJVgH|>ddFVELyin!2#%L~mn!EiBoxO)8Kg0O9L_MCu-_q!( z`H}LPQ%32Y!cq4l%yzv^K2l`Mt?-c7XDmb1OxzT3En6sEC=)k){pc_L$y~3a4mzz- z)a7udbsAavVFAVZw(}~-hV+j=+c}f|7CK}1voK4b z52wb56iYp}eU@3og==tkIGpGIHN7ZAo1#i8?orzMvJQy||bDkqy3^@fT*6c+hnsoE{>I`e51Oh zi~lv$gTj=aw=+An2y1A)Hu=oj8zYw}xMV0M1k(HJ#s`2@Jtz^D;f2m zU*wg8$_uDsL{i|}1l;W4L-+@iIy;JD2kHVA`QX8Bh8?Gj7LTIEL8jo#QE@CECqE+- zzjWmY#^5D*jvN!vXv;^9MLW|@)zs*3tc{%IlC>&>`l1ZerC~ssvpkuAa};Mm;zVia z5R{|t5*lJ71{14lOV{Z9*mvDwR_!{@xI1csJp{UXdpll|hEoGy`Od1K3KOk*f`y4T#0(2sTN2${f4usBzRc50eCyVCXp(|D4lDLHYh}RrKXrnIawHaX0dgyz zX%zpcCf*WH-UG&76^8Z~*#tMOQ#LdoStOFZC3ayXDbhOwn2XDC&`Yne+i}cEgD#r$ z#%aqpktMd{0Gro%?;{pf6yl&l#?4NRt8xMOAtEg*w)G1p#7YXZt zGTi2s;x2rvdK@_D9Mk4i&;#gS{}4@{o}Mf+s=dJG)hC1LQ_}asWlDw{zVMg`L9O&y z+TN_0(WrsL)J*`Q^V^}ip5ej|l+6ytPws(%BrLg&xWp$TPe`qZQMc;*MKTIErp#f7q7u)mI<4}eL+vQPyWRAHBg_xM;0u+<4hu)L1GD@Z+hhuC)5Exvw#JY(jqsN#Z$aA`3$Gm0l@N8D z=8m@FXF7bT##q~Lc@6M44&*ueq!zREb%*F-a7;*z_M4zVcb$4P|CH->+JA2HOIStf zUD!BV02i$p-1-UXozW&;b}*r%6Kw=Y&c~o(%Sl6*mev%~=RF z+kK&NhL62oHz_Dd?mhvp9@ak|!vL));s6$if7f&zTM0DSVRtuIL(7z2-PiX==MQ0Z z%8P>}pA4!xizVBj9LDQ(YL-^1(+`LxCs{tlfmTKucbYSw9b86R<$cORi$$i6PMH!H zL8sC69_H*Y;z!w>KUjQr^`#%v)H)XaJa}jZaBUARi24vsB>jL#AF z9q91aZ6h$t$cjNx%kT=?DpL@krKhIe4eR3bfsOu~zn>#y=h0^gXSVvB2vM6+r z53)^v@RWXBKURwUqC#@=O8kCDpomc;(hD=0UL%X9;Cudploo>p(M!{83tfirC5EtR zd;xN91cYVxUEDB)&>ZLV(?+IBhoJ%26GmxST;n=W@#{4|*hNdjEe^$tg;TITo^yrpb z@n(|!c?feJ^J(F(ITj+^)I!xI;nf=KaUr8^`}!4SUm8t}_JajKC!3WPPkgRO5#$ie zghP5JWi_5DeIJzErxC+*1{{2O^-NhlYi^!AH9aHm4Wz$z8^XnpNqUG7PN z@ya+z5QlpzUirsd;rEG8Wtb)n()}D)d#?^3B0Xl|tYX9EqCPPuYf+B^Cci(dh@Yidb}B3kl`Kf^W8X+vgruYYWHu5Bic_5e~=7QjNOHZHdZ0niInNUr-myqh#^4`LLH`FSvh z>@O$|{eLu_WmHw+)`dY3P*Mq{yBq10?(XjH?vR%54(aYVbR!MYaR_OU?&f@(d%yd` zF&z8=h0VLyyXKtF^xlEz+gae#wu-8_vw}Hds}vSVFff1LmDI?i>t!DM_4?`Bn-72y zqY&A!XQHxPoo2?qV%nR9`+y1c`6AYTr`>!iy^4+7BkCFs0Tfw_7hEgzTiuZV z?zEaMRfGCW*K7k3Q(2$K=Ef|(V1~_;l{ohI&IMj}m0@yLSaC*Z!rp-q!a42@i37#oTEQStnLe6ckl0=cL)vXXfYnw`%ZhU zN>El*A5W)XPZD@3N1X%3j2GqSFK&P+QAY89W9wt9ly*7^qwFloEt~IJ+w#^z8X6jO z|6KU)3Sa6cNB=8R^hH`2QdjjW-`g`?1|gK{Z*Y_y&-%OSo`c9B4upT3xbxIJTjU|M zMG^_YK&uH*zlW>WFZdvnZ^XYL-HiG{(8dgXwYriS!|W#qo74Y z0d$G?{BC&0MbzmmBS>zpv>`N31MCeI2tL<_8zxM;Rnzu0(YTfsjTV{2A zxX@bE5gkOa$~z0LD(+f5W7RD2FjB;0Ht9v5%gYFDHUG8^R3IlF1}{5F{#z>SGXD-l zdqnM4)fRCFC|FNBGvoT|HXRJ;dPk2dHKC8t?8I4}27fIA)q-eZpCmKBS~E_;RLHPw z66t=~ z-LHl-bXOOPf))mI;3|uyZkf*M(PmO7W&^FAN2X-~`?;aLDxf|l`oKn4-xrlxKO-2$ zF)+f&RWYo`rlc16 zBxA<3I+|;m*KT|LK%KuKm~>f^^s}sGwZ|iZko+1~*6-rsZErPW)x_U2QkI%41pzk$ zy$wPLy-uyH#=Uj2KHSn7#I@^b@w|28k`03 zkl=VYe*0ESKJESJ7JY%-HNP^VqS)Kn0T=w5hsR8Fq>@i%$E1PigQ+a0`h0BeY?4cIdfI|%M+-JEpyr~Wpm1_?Z{6Rg*@4=5M5=Dj zP~-iXeqxQ1p##Ewlo;t7AO%>a0_HIQ zU8F+!QkRxub}iD96^cMGhJ>Xd7$xNd>Yer%jb`Nrv4vkwjcN$2IbQ%;2Ou5tC{#~d z5Czv+(FsFf1#8>&w1m|>mE|*3QvuJpC$Iu#e?3c>zr-5);IIZK_@`(Z4~m9+8%UuWf4gV4(V89$T-b5vfI;O}vJsadao) zklau;sl7u@G^65rAzja}reJBlS9gj*xu~IwtE!-Z5a)URhbq14eo{B0BVkmnkG`h9 z=UG>;a+R`_B;F9PmXez&m=*x~`(s_x%otB0;j{gls@ z%3A8)XPx}sge_omNA+%VfxnbRtFpKAjyC}I3^3IJzEOQTjYAmrS8~nGZ4=xbvnYu# zc-M0G#|=|%&rigc`hLKo;zmuEagOrr-;2K$2_t3rrMD`_0_CA^W=)$@&1I+7zC1l- zm#5stPyYoKZHSpsuj4OJ0*vaRmuq*%ympE`vDa%iJ{)Ujwp5V#uP8|~+LjAeFcx4q zw06Fbft1)jQHBG^*KmJS^_M*74;n4xhv+pjOc8EBK-J z!6t6RNQZ>0N4qPMdn~PMfr|dW?SRR39RvZ~`fg--1y;8=_X7 zWslj$gt$*{x4%aIp2uNM-?S0Rs`A6qoHTG42GU``%OdeG$rMlV+S|bqE_M>>KE3#0 z8n$V@R-+2oz`ZTW|3CxX#AkPJ2xxWMmjr- zb7!R0*=n{_Q2^$tNjZZ*qC9t4@j?~42)9bV(SFwprxInG90fi(93xQoUZD+z9rQyN zQd`-sG7s9sXjG1OYsNIv&BkhNXip>lIC>(J6l&DV^Tr1}z+2CA8VkGW&>~-GuWe9f zPbg(4hF$PPDt>YvXKDnS_9bxpxgQiUkEP>?A~4G z5DG&mCHp*h_x=;fnEg<`{9Qi>7@0c0%N1Kp36m-mxo(++N+|gN8E-r1%Y&q=hPUnj zAcX6YbC;7U=sWRvR|tWuFF*{xIsuB%TMPB&?HcA0llc2o3CP#O+o*~zI_S1AHT0ra z45xOv0T1D%i<8^bleGEw+^8dJXAPEG3&fV5FMg^EZH&|8}jjHg>gFxZT$$ zffRx7W=rG&H}W&M`vq5BU7gqSGB`345pZ<}n`(CW-9(JoNU_dK@brA33qA)CbUq47 zAy*N;>P}{(n*3tP?dpC(yITY~ZMHF#h{t+(t^d6&j6P}uvPwV*@@g<53QO+k-66ZX zBb;g*gnRn``>=`KH-ccPIlY=WAz^A ze}8OxpMPGgnzp#Uc;SxzjiT6S!09ouyG#D`^aSKaZOMW z^6wr|9TtwE-6^rJ0j3p16oCJu>AW*g&PXBFPK zwxco~(SOZ6_uTh_nN_7G+%V2!hKvDwkwkv@nptW|CtrDt_P<5^(v!(=mf9wmsim_d zRjTpT(Y5qR4Y&Ob#nRYlqm)2TWbKX@bBR(-&D_JpLDb!ajA9p;;b`J~p}MC{^F?*~ z;!ZS+zrXWmj0_H`vMu>S8DR2w`)}M3U+CU%xa#6f?NT76i4m94;T=}2I{XC}I#t{D ztPM#&=G_a7vGg$kO%K5}dR-)P0a~$hV9EprBd*^Wxm!P@?Akk7C`0Y1AZEV1gEbOh ztSnn!>MpPwZG$ayi#!UJPYeCo1`Xs(wfwsw^yrZe#U;LS?ET4S5)|$&L+&uILypBmue;>Gg<3>w-V>{q5-s$ zU`9eP@ur8+SE<5T(ff7-j^4{?%_e-dRgdzykHm_e+eztO!lkjeO3hgs!@+D&2!KX1fr9)F&yuSL0I z{k3n=8v8C@vQnn{dUZ&-leqEeS82a2VC7MQlCS82WdY ztz0v#Kp2_jr%wmV2N3DNGPzs|bGD2J?vRM$u#6em8hibGKzZyg_mbWS#;sYnub=FE zy#qbsXIr5+W!Qn!Bz{0-0_XA`?NQf)t&t*)+yyGq3e!rJMH(h!S zYO-3;bC_aM&S3rm_UU!zJf}7Q*^|N_g%lBljO0zN;EzL@B4}#1{v)o;G}CWaC>Dl!xm? z`TOfb<$pJiQZbc}kLt(%eije<_bom^`#7V1=av~au?wLUV0s$o}pNgk1K-8arZd73TTmw`J3P5%l zv$FMTWq4Iw2^E(`Tac@uZLP-ZUOO&ymcpMuOJ(-0e@l@fX$W`WBGc82XQ+w42+n{% z>BMU1iFIOf&sD2vnwg=wFFY7SodCf3z)J}j(>}aqje))>$m<#8jht}eW(fj6zidGG z{2y`|?;X5;DE;MdbF}u&lKQf#@~JstcOFv}3h$RM@A%Y5jmu+bK(!5MgfnsEpE+nl~ z3(u;)m#KWGAx8lZIm{DcL~@$7=rBbHYqiSP8$naw<=uBi{{(#?R8C7Cqg|<&4M^Hx zK1x#h4ErPITC2l)D}GQMMnmEE4=E|hA|*{r#57+jet+%PJKtQd0>QK*txORqUysM$ z8Mn>0^~TEmiM!qZrab|s^f>_Ro19_h1}to(f+)K@uR5kE0;h4Km;$eE;Q3 zYKPxT#vyB=;zq$5f1%nDkO|hck8~HEjKxV|B)C(o0*A^Y(Cg-2hJc8pyn)m831G{W7 zXc}uMQst_?YAM8pA`0lPMU%p(e4CPus$V4aXM;K~;_JAPDLq`=b_r|85tMiuvnB)4n$ zNsmbrBbg9PBs;?UW!|o5J?7PtofSXgf#lm|?I10o@Gh6mxqqkLJ`e*ZlT4E>F){4% z;U>kz=}O9p+~xdZCDa+3OqQV%gWU9S)Y19M*x6_&SKV5HAA&TGp*jwq2Zcx{>t5va zN3J%5r?0u^w)ZYCKFC%vDuM)mgguH?A+>m=gDq;><|HAx1`OrS{z&GCWW?0+A$bLpI7h(>b-!j@KM-rlm%Rh6TD`W6DBOhN?N*& zMCDvx%`zjK({3=%($Gr}gqM+AaIaQ5m?ND=6G5w|Lxi9yYZ=AS|;`S_72#ae?}omvU>oa56Il9$ z=e?cmY8BImF15DenFG}x5A6YNyB+!0-r70OWjeFxPnW=Rvbwr@J_VpdvvTzlBr~_e zaxV(iNh{VbMN7Ya>sMob>FQdhZ#?RvhopKIwEV24J3(rRqud>w>FA`oo31SRn|t}p zYH4s;DVgi!>0be`FwG)DZZdZSdVs9YL}pEEM@QeC`||QbuvJr#Z9A=lH*QI~e~pD3 zW$enZhQTMH$_e2RG*%oQDsoLaxL=LNmL|m$lH0JZZh|g;l1zGWD^CiCB&%>#&{Fj* zKh}QPUiAF2V$sTpY~z8-QNm_H*GLJ|_5XN*%)%?4rDNqRwm7|4GfzXpA)BC-ABfPT zAyoCQ3Qnyg+S^r_T_26ZYQ<%)QbnqsOp}m`R`s}_Po(o>d`#uP50Ni=xu$4LT`d&Y zF{}o&R)MKOdDSQ)#37<=e^qflJyth`Ak91TC* zOK*r5e|oDR9=6iG+>SnH5p~U{Qc=b>;p87gBB{s$Q@M#i8C9Estdfy1$Xs?7-|>|aOO8mWuv`{zxYqdk#s`m5=w z*cqqll!oP){S`zP32;o&0yiBbE?@C49FY1*J_%Vbb4kGj#)OqtzXVpRp(Q_+XvZs5 zjrXxeYr-dESQFW^4Tiv$DWr%X;NJ^rxEnaBIc?OlQt4C~P!tuSe2uqOOekIft+D*+ z(Y18@NZk0ry%R2`%J=IYKbC4rejfr`%OH1qUmNz8CRVKf74GYKn1GE%UgqUx%^KwS z&t*51+v|0S0CSq0h8N261p@wMXYpVal7vPPW29G^QNJ`_ap~nNie);Q@TGtGM)2ur3f@Z6m?k5WaTn+e- z$%BQx;U1SUCVqlgD4$pg7j3T&rkVXAcmCa*`z=cXN!eh?(z8AkHvkFSymbTa6PW%F zV?1J{nQq>xGHo8~pVsVp4i9q?0Q&BjHq8}cht(HQbCC8TRJy|vhMh^Xr}l%`uhY{l zd74cx8pqYIAtBpKQD)Sspo9S{(yWPRBDCgM+ovKp43^)e!%HNWK z^!qZCvq^Vm7xUsct05AXfnl;tm6q4%K5i(M5Xh-DUQT@Qv45>mp}BtYeSGOc`PcZh zAq~|5pK!ze&mkVVsI*wYx30&3v^L;kwF=wg5&xL|4gEVv_b3Etw6*0mo%wCEFP{uK z^YCV5NrmsoI<08r?Jv_uYESG1q}*NGM6efruqEjW$Z6e)?{3X$l_Pbcdo0o}T>!Fh??3oXEOTsX zqWD|}HyEgHB#iaEoBo!I}yd5SdKN}5qCHhv$q>0f=CMA%KVi?$wqj{mOl z$TWY%M}lC7VD3y)z`Vdhqzx-#t}cQ&yvi30=oeCs&eb1pHhClsg6{vvdUXzT1JX6c>N|wP<6JYnlG8EE_^v#6H5y-zTTk5h*=0f)voGDZczm z<6K)O3>QK}r%TP?~Z#rrn74V`zpE*7z1YbWVs7NVI5%a8w-|#3@ zkQ6)DU#QrBB;*aS^RB8(m8`mObq!+EH~0W;86l&rL@eRvJuIgkn!vT&LwrXrnIxn}OZC35ZZS&bS)s@IJx$4i+++xp;_x%x zXVpjS!Q|=DAHM=*EM;3rGLAp4qISSn%W=q}tpm(kYav2ZVz|XIPk;xF%hG+rt2YrSL34iG)|DtQrV*{o) zp9;{3k*cGoi#|#-*A_mClA_&h4A&k3Mcb$|UtGhkhVrkfhda?tiexsx!%d8(n+y?7 z!%4E_wEpV+6DrDE7|g)mA85~PSW!>sHJCXX+Vd~M0PIJog#72J-OnKx9)g{9v9)b< zFk!5SiXW3Ir%(8Q*ZUMFe%rgEHM@Z2h$4IDK#H9s7DPNAMR#2TuT zl7gvzj46(qd?KO~OrQ$nq&-bI^;dTc>yG+u(=5H?^5qUxH=avX)p|U4Te}LUxgAG` z^NCVUP(`LJTmrXM&O6|erGmta!^kv& z9tzo#**x$Gu+nsJ=J+ZAx~fUvUwnboTyBgT-(KuTKrlwAyE~#e!3w*!BHxtLH3h`Z zpGKLE=qf&AZDbC&KKOcmwj-7DJa7I4>4FA}(W1LD$fr5^M>HazFNcoO7X2s&LaO-> zf!S8s1!iF>`fF0{u|+acDUy9GjX#A6yY&W@upIH6{TzFb|3!!;U259HuU@7>Q7NS} z$CAoXkiH|!_USEEtElix4j&l zS>{JQUad9)W5@wqwbgO;EKK+6_M^U^=IO{C`L_#pDoJ2!Zqax)|^JZ_(?R-jc=_Z1v z$inKOW#XI>fk+;lpcr~3(_EwMXBJ|Ka(>Ga(iR#lnT|Dl6Wx3HyXv^#*G2kvzGSG|C6LnD77!(mb7N*&C< z8G*O{jdWOxLL#l(e$smoKaq_*__k_)>1a@H7s`kju~39u5@oKaluC>)RU_!rq=k?w zja$1e0l&{MP%w!Ll##1JsyECb#;-4LXVeFvc9FBY)$Gu_uoLC@mTd}AT6`Xv)V7-M zt71C+QWXcM-+6$%z)KRKWL`p>G#5z-z(3f}9NW7>P=Tir@G9*A#9W`7OY8M)op_or zyY5Y9+2GNa+NvMiwb$fvXc#}pDp&QhTM9Hw78Lcju`NBMS$KMtzpXSy*_Di~uQP;& zg#mluI>0uN=csxO@y~?JvYPVeUI9=bWFtM4x@@e@b#xt&Y{rU-X2z6js#R0uwu&Pj zAu-C0?^wpj1|w-?wgyj_a~a!NWVX{r7JGKtv4o7<1w>;_uE=J5s7@F6DS6lk9Q0 z4?Q}<_3A_fR*9qd(^DtU+IFdupts>l=K&(!>mSjL-=Iw4*!&4;q1c(?)7Uh<3>+25 zZ@eg@D;2z@$lvKvl))N=WS4i5eN|`TyTz?jd0U-<95P-RBRfBAagXMg;Y3r&aRSiTtF>owdER?MF|Sb+DOgo$WtlE7 z958I8Kqfqk#!?^l%BYU~h}&OZGr#jR?~j1Hbr=B113gER7e!T;L^=xCs>eb|m2g;_3Onf(JK>0- z>dBgOJ5`$I(GVQp*7YIW&EwXae&6FJ^MnCuAPqgwb}Y;M>eE z!KH(NF4#mr8o{D`yh3=#mbtbp!V|(f^K2|1M>3E_w8cYpr(L^(kBApo=7_S;OdN%j zY7&|=OT~~CtBjrq+(e&h&=C+)v}n(+g+S^E39RI9_;bAsc!ZX=Lgus6%;~|)csH*Y zj!rT7SbR!xo=>^C619_ImCRbqHUCTAOotE)!zDP)}}Wwv=b zP}_0L-WHOD=Q!k-uso+#J;a18qh?ypyjGPZjdZg z3_Wt3WbvG0;uk7AKG`n}bl}pzg_{A9Lt7Iujm1Q}TQ=i4?KyW3>zn`URqn%>K7WZ8 z*w}v``{^n7@HJ%xXr#pKjsaaInHi@>MowX)Y_Mdm0qn&lGO=P}OQwN~%%x-$yBDaE znW5WEqDKE27O46QcVc%WgR?I0T^7#T=pli}wd|%1UY#RVo$w~wC>~q-Y54CuD{gK@ zv59n&d#S-!-}L-nVu1O^&HWKz9r^zS7L$Nq@8Z>c*MH;gf|oJ1nyTkf%zV4SSVl% zMNaXUzPJ});!=a(aARjber#$d(tbVpr%Zv_zZ+O#8mjc6vmeH0h&aZ0?~049=s?YS ziCjegP7`E~6RI<1J|N{3$0JE^H!n*8ra&6yc)#0~!K+*x$rZE5nRd;1Wz1EBMnW0w z8A#K$*d;9^ubpC=Xv*x!3d5qaxQtMF;d`%d|J4cY`)(M;H4ORbt z9ld#_zv|XJ1w4g-CcoD1uA{3-KhLs-424nH^N2dFSnP*pfuF)QfKtgrqMOs>5raTd$vS@~ zSww12QN|vLDU@kNv2A|X&ifouFy8X|;pinCl7HpLwBDc^%*77$co7Fx97 z!XMs=Dc73@SaIZS1o?fLwmP_ktwm7a01ZC~!Ptw#uXy?kKG6kTz&iQ{4J#!nkx9j` zU|F_{HiIHnYXESJR{NwYYbi%&eG?9xr&LB*xd8;gYeEyzKn^zg(jTS4G0wN)skFEf7q-tzm85V5L(VpYXpm_(o!u7 zV!}g&W*N-6RhbMXwaX0}g^a7Aq>ynP>x^dDa?4$Rv%OYgPuzDkrmv^jw2lv>)?(zU zzH-e9QmYW?E~GO$m?3sB3Uv^*qJmr$Spj~b>+xl!Qei8i@ zR8W}lMU}#^F8BiD={X@LFi1T1e$C#0NbvNsKPg+l95|yoAb@n8JN3T~b&tE(U{Mp| zwJsEvow+(2!T~GO8PVi;8U-U2hHagLjOowp$QwggroH)2sZxLu;;#?8AScR+9MF*yW(%gR zYT%4fcX85nFCx$r%N;A@jURRCls8E4XpUAtOW5M4qU(0W>?!9*q(+}%6+<}pjn%4Z zZp*$WzSpO&>ZOcySIgkrK+bt8CQBxnWXY!!)xZMu<^I@Jjtl>

NO+05SwvW+#@H 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%0DUcIM=$GJXhmS^LF)(rQs9ZB-sA)J5^o-ku+r; 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

wFRc!bKo*>$e|HL4-u>aE= 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

v|d^V%1&x!Ve`saQ(N04 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%0De|}{egsF!mUIGk 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

p4>pW3;XmjrfbzewxBwpmpN@RLc?PQwp}}bw zwzMPy+IB#W$ArAZCc9t2kzy$XaxvakxoyL9;qh^9VWDushE@00^zKmL893RCQNpbg zxbYz-U-Nd#Qg7|$O5HR}Z5k^l4(clk($k_P5r0BI2mH$qFFAhPb~(MAMFMP%^m8@b zHB!Qq6f%p4Yph)=65LV;^54_{F~eSl$cI3`H~y*~%6*3f{%adZ_o=WHTG49UH&3lD;%d13A0FpjVyzsuA3vj? zplNF8*9VN-A77i~I#sYYH8=k0J+ZNWe%OEM2mC@^v&P8i%!#Pszor7%3D-=otW#}% z6Q%vzUl+~p9&Z=to*;VPk2+O^Z&A3>sE&9${!q`8OV?oPrwz(3VC8z{gcT8()Imtl zfvQUyhelU0_&&TZO|Sc4m9oEIR@l>7u6R=SB|GDd{A3ci?$|=%poVHy<3^x{FidiZ{5!P0ik;HfK4#z9F{LoFk;R zDbx~Fz{8-6oy1I6$Qb*ko#t3K=`dNAVcL-N4^-B8BK1N1x39Z+Y{EEh^#ORSM-@bVH4AqmLy1n z`6cbb%u|yCg*Vr9uX|ZyW$XR5G0Xod_}3Fl&Ob5Ck+aOOB;|`PeOn}LoOu)1U;V|& z((>h`#WLulaFNh^yCYR9btq%4v zAk^hzdkEUpyTZAP+|kErPnO*@HTmWpcS}Y zdwpXDxDymPPiZAgO?CM8FCN>SKTMgXhP?xqMMoNEdQQU6t`kp{Tp4rpep|L^cWGz+ z!9=OSHf{|_hzHsGos?NYB*Zi*!DmHUjj=ae$J?FpiTI24&otYlgrZi4w^gR)C*KoB znSak6-Iue`(_Pp^l6$ZM=e%QRt>IJT(;i>O+JHmRD0V2Y}!+7e% zeINS(4jwRPTwGnd;n#v&wKQxkGX1vTY5p#r>V0%7uAkf=cu^Kkgb#X3q535Tu>>T{23UF)cL#AzUSR^~(Cp+esDQ(jDRfvJx)t z(gI!zKZxNUpOh0`WG zUUJ=a;gN!0QeDZo>aDu2ugd^`V{xBB7sQHr~(*e!t-#iN$?F^t5TEhBgsS=cKhEPYr9mYS}9=SXLx- z7+hyGFKA?EsZ@IVF2#MKy*)~tfhCRY-U+7i1qp8ULfKeV{Ljd%9xBiK^I3$LlQAtW zge^0}HotUN)?j7|ic28VvS{-%B&Z1Lw!?NmHYQ3_-cqvZZC?ga`m*lH#%QPcT%t_) zA(#d+UM%M-9$Cc|F~ls0Yx4er&_oapx6#zjqXPXjW5m$ILo|P4v5V7QLpqs!>@5ew zb=cV`lMnXa<}Vc_7POLTYtxBMimrz@Hn7n;HwVmRd&WF^p6#T)D zSDxRd1Ou&lSpwI(zrJK?1!l*$U1y01UAwLOicdQP2HxB-Jq2ZPIy#V$F-8%rT~FJf|B( z{x8;~MU_Vky*QJr&&_uMPZwY^ulzqjNr3@|IyT@tBXfiv`7AIUlrKMr3vi)UT4ea| zoyS6jMjQAcAo(;C?p1 z#hvHni)U85G@+A{Joaua%Fc;g>1~?}PPyi~Gj@)%yY3L~Rsh<=!XN3ZBGuV9-@B01 zD2yo}!KbpA@nU>lTz0R$h)P4U6Y}P(OOB42zw%C-tWxL?Jta}UizIN_lFz!c@IU&@ zekL6IkFyED(>034D*8Zs`ucVMbitJw)z{S?=mz ziqzDVsL1YOnD9JvUFpF5Cw`$TXXXOx)F~Qy(|lTrCQKb-;|#h9C}Wh7Ze_Nd|_b?zPeC7uyYn zYAO;|i>xiLlarmi_AIjo_EY;cKQGk?gQfr1#PXTX5-V%Si{-J0z=VAKr|U6jYph{4 z@;&E8`k$mQ%3m4x$8P^VK(EQtN{08LtJY%CDZ2!R57f&knvV<=L%mYEm2^@fEp-7b z`0Ur0!Jlcnr4O8PoD$XrsIiDb0{hLl=#?H{T=+}ZHc6H*1KBJIhqx*wDb;^5<#i?< zD*n)k>No^%!7-lcp%F1I1K0Pe@f7jD+SM>oo1W6S*6=5f&28_?G&w2)Ohg}AU<6qf z8FD->p7=InV>XYr>MJ8GA`T<`aqB0FM11%skzU@G=Iw~#gUPj~r3IDhwnS}c?L(UUUtIp7d{!!#wWO!#60&9DxPksx$=Q<&X9!_s~>ba$6_(?JX(_!#+M5vC^a z>WPR{ikUuOwvG1VkEVWMRr92k|t&;s##RT`1$O zrdcUjUv|;?-|dcpROdIN%9XCvDCDu{aH)3Xzx9~B**KMOce(q7TciMpDS8iDxISY9 zLU!Tw?^k1d2(F5hBBx$n8t#GtYltX#11r^TpX?eVGggrImjW?8{}X!tXNUc>wniG* z+tpQR)9?&*L1q*s(sM;#$JN$WrYQp{pE0&__H~ib?kc)^x3h9l$zMmRk+OhK^WSjL zs3@khutl{lLc}zJRtVNdM!2Xq3W#K(E zJA~K%)|o1k-cl8lW@fYiHv7~G&ui}lCGM4jZoVcHO}de8;DB4|wI1rCYl~%;hSCGW zS^g81B6&(}wPK8)OqZ`%_J9m7dc_e%ghMI(0C1uEwulhd2o!z(t7((eV5`@$T-qa5 z(K0mBp9qWRCIy)|VBkPjuMh5va(Gdbxq3> zk1r&TSM2IMua0Pz0k3)*`@@Rt!?R}TNjtOOgaE!%Q}Me#+5u2T+{ya^a9)_`$%l*<< zB(GAB3%Oo7L%B@03+KzoO=|8&yu)otnb-1FnL#=Zz8jL~$-??&6ZC2Apf`+*5`1*e z>qc)K<|DzfO*9t|?IH7%3e$Ycs(}-_G5;6Ozj8U02Ab=5&A?e-Dw?gaew()g>&clj zLB!P!FxagL0L~?X4XwiXxk3N$`n%dmWE_=}6NGds6C2DA zQ3zD|luhrqx^}R`@0{35)*TZYE-n4@_Cw$q!QaDGG)b+dZ!^l?{Q34+=7}@5BSg;MYCp6U+0dx-_d%Vfp1 zkK1NFeIm9>OAr(G`g+ex+t_U-^RZ!Y`QQ`Kox#VYmdlle5v=h^Pu%6<$|3tjH^Uc$r?#riR3v*WLQk*_O0 zQfksrLK9+ z@7H0ek}Pr?T8jEcb#Xh1qQsnhjeGT}%)o-vq2?VdlS{A#yUd#U`&!)|jVin4o1w(g zw@gWv>h}ezIdkwY`bFv~9~0Ww?o;kl?`qtn5ap{p}Dzkb-0b@x-1Ub5j zZl7ev=jS;cCip1Adv0F8wm;0-O@7>ku)a^16E~zXZW=p@H2Cx;$9(t426EXj&$r~K zE}-L(ux*b2F65ajJV*m!OpH*eQ?iRoA7S6CI8a%2QkJ;22};f!7RbrTO>_wlm)q9Y z)*jKI00Fkk1f*a3+zo+afMheme}lspey#f%Id9(w;OGI@r^W&zBBp%VtBuc=eZ^T7 zJubxZCsw4Vd1@@8UKp5Ke8>^LVFQdGme}#b0&qobn2cNA+(bcgXlhWTd094TR8J2$ChSmXMfvK`RqT2i zfC22zR$gB$q%uY*6gJ70)`dYgLM!I?f(AFRV9?2J;XJKFQ(_NI6xgA`FG#m>l)&p- zmM5ZNVJ!$)2O_4Yr$;m4%jBeb`~3|WYiYm9mb!;WPCm5hA-D3Q)_DT$)Ul=}ui&C> zx0e3BeI)5*S-!28)xtF*l<}Ebv=DfKPw&5^It-3I)IBKt%jbKFt1CeoRh1Ot-3FMd zr2=0Uz&hy;sbGY3`k%S=<8i>NZ7HupH3m6CUxHOv!*nLinFZH)bZuOY;7Z(|VKzzW zbg{)d=_eMfu}*m9a7_JiD73+PVbyWROjjopEQ=tzN773Lxy*6N;w(r*!dAsv#YEs@ zrG)vG?G(rPT+h3bacB3UFvm6_dJBigpckb#P*U||@_KLvSB*6_?H4vdo3ubgm13e3 z@&;&a_tvE>Y1#bs&pWZ-=$)NUj5@6L%|!}DpMhYu~jy?;_~Zl2DNV(CJ9 zlhx`KSh~A6MJjCL?m4&3RWfU<_sm<~|2!L z34iAJ_O&82zHu31eJM(1)Rib)HsK^*9CSUu?CvPoaN&%Y`v82&G8lnP8@YQT+D7Ax zL`c--e-c9gn0K%^D%J4B)$7v7d*L2gxF%Zr?U)+iX_ljvFq}61W48mM zL4fuh$OZyE3KHRhMJ9D`$){+>zJ&+a9f}wbX-Pv0st#UNx?|0Q!~Pl2jJbX*>Ox*< zhZeex8^TjyLo+fce9Dc151)D3(8_oxxQ$dU?pY0%%n7)~F6`X0=Yy*i-%|9@;HTkz ztk|C-LwH-q5*5B5El9&h9dRCadn&CNNz}D7LCfO_AOVcDSn8}k=>1Dwkll?zY*(YS zB83hl%B(FHd7ITiY`T$HaSEEw2s-frdxRs$3QkbgOH^ZV0Lj7(w=SkXrshLf@-2u?)w1So2ZEDH7 zo)M;VNAb?sRQ#)3Cs~ThO|8Dl_{!j-<3iq4c34|mqr+-u&f*JfAf&Gwl_@#!ABuBY z3JI?7?XeWt#O&6SV2S2Wi*|DFme`3>CD1cqSbcp2X{m;UL#bDh?HVg27Mi>yTA5R- z*O{`%d9<$0DctoGcglOy|NADaL^fQltOZ0O-4VN*QbbV|zzC^2bQvK7|KltDni~&3 zS~?Wg$-(pHz?jmWKpl>$H?Bqb!RtjbiQyE}W2mQ0eKV}HiNVLaOz9-`k~ZY##39okrNcASeMCjZm}mqa8%oLqoxkm1^E3?XXTCdW)C4! z3n!ng-iCuud7t2A<>J3HkJ9tu*M~Q z_G?xx97YUQSi!#&Dnc=-Q{jk(WfLBz_Gtm0H%S?^zRl)6#zb3XU4#s9vb? zLa!xlQ5_fn3s8W9N_qYg(-iPnNu2s6b8sr<@IUJnDmP4aa}&ti69@PPnv(#bAY)`R zyD$&l?vHV=$vak}XU|%C#4+a6RDQb#2DyJhXX`CDNLaR3SP`82LS$K`qDdaFH8Qm+ ze!ODcShSxO0F%PH@;Zi?ul&ve3MT*=h-hId{9P_i5$tAR#HLSE`!%f{F&_i zy{DRnU%GEW3>8C@X?YUHX4p;ujq4#Dci=ZN;DJz-ijz_-K=pr-|NV(eN}ScZm4-<> zhv(Po+eko-9}!*?c$g1-(YB-@FTA!;mU(Sy zIY;;^T7oU>RPnPJpWsTE5HmobrVAs&Ezp8Im9eAES(HTeUjp4Rl2JG8&{g(mg@&^T z2u*YmeI!}JHD*2GukBeuA@5EgmHhLnMP}=KMw;EPEG`~_j?ebH3w>dZuM=~H^S}FR z$iCWk+k5m{xXR!v+VXw0t;2E7nxT+9FjP*Nl9ZO8L|LKYq0D`8rA;n6w?1F10+_`U zzq#(GiSbdD_|-%U%NHSf(7ZE2Za(WFzzRf>EGvQloEC0d&*ym zGlxV(sTU7#yFYq5e%F=`m7}Yf>#N=_IV z11K0zWgU%Eq>nYf+O4bB55QX4R6+`tT$#+jMtv(71t%^5!Jj!Y&2SnEa`L{n)7tb- z#&I;(vB}%aSkK6!WMRlzx5Sla&))KVKKDQg5`f9o&^`;UDWlao52jyTvKT<#ZoUi< z65HCmL4`ui_1!hf!-Id+EYXPF8AjB2$?f7tE}As#Bnq_(4IWFgu~?z~*Rj-TSWY(}0vCIRWjKIfH8ygRV>x zTt-MNB0W?zk-AgGY&pu&lb@nck1*RK)3I1S!}8}TP2?cKh)lL}v1FT3rLR}F82Wu= zM-L}`q4rnQcvi$Z5 z^cJfsxU^mM?}5ILYnJSHxmAR8SSXsXF?szgQhMMU|H~BY;^YAYr(PlmWxgPEk@{!A zSk0SQTXO5(9gK7KP9TfGCdw~iRH$rXjSg@9K*&F)8#PuHMRh1m z?TfZB2T#>vkpUl2`6?H!(zm%qEZ_U4A4|_eXrO=ND+l*e4+rri37sbb9(JB=By6|h zR1W>=;8?NvZPEN>UaL;G_m;UG=9`?HwwMzYf70gKb|S_6S1!RKGT>hD$O*`MK4rEU zUKexI$8-I^j^}QZZb^wx$^$E)UJDXsBKlFoQ@lAgehlqn5G*g=c2jQAu9_W~Qnt%$ z8C$=~q~F(!-!5rhH^eQ)s~SzX~3%LJtfJCEE3%14qM9<>H$$5jotPl zC@1UAEPAJ}bRO@^@`C`gl;d|Ow)A(-wi2|AB?bdU(2o>i+Nd`^D2!;o>CnN)jE^rO zamo18E1C#!icp9mx&ptNT9aii554hNJw=;0J4RK&BNatWDv5r$ z0QVPufNxL%9Pz7+A;OBLCdB3@<@yM_YmancN9_Z8V;yC)V?OlB6PQlmTYpvtB|o>N zpE^5!3y$Oal;(QuJ*)awwNDeSp6<;M7yE@AoV`(#>mlhn(wBmKwZhC1xg!8uf3U#? zPe-j?e3DnFE0d7kQ(>@_@j~8<0OpB-fe{zEPhNv<{WEZHP4ET_TpU}?M#&yN{QHAy z+~$lcc!>lbg3WEvA3*&_t{8%!$!PW+>|? zA9O+tr!4JdnnD7@_*-a4xZMh4Hr-4|{_1>-+;~U1-)~&Qk~6UT^RTmo^;o`#>j`GX zZW)$G)qf!#kna=U`gd(P9S1}Pw3(PS6*7ksQs8If8{3o$u|92!SmmyY^eF9QHC{j| zdBn-hQ`+}V+S*i?twK|2fSFPgvw_*%K-a`_ToY5TsQga@7W5>5+wWxK`y*>F){|3i z%AvPac8c8DmhYX94Rk%6`4x}q6hEGpI7JuHlX0zQRy^cUnUUNmIWh_Ou z;Zbod9_!MdTIhPUL>UM4H2#5^`yPmW?HhSbR1g|3Yde&$5S0+8^d%ZmiG4X%;->k{QI}<`rQib%ifO`H|MN%z zTE!QHYWJ`C|9q2@f6MH8*uwf)dZLOqu{q!TFKNBwyN`BzkdJ@u2(8HDuJO!P=;Ueb zfy7bj7ls@yn+=gqpZ)2ubDFSD`}LY`uceA6QPBS3-G z6W_k^KCP&&+w9(jo<`-!G|v_-WodYQJ-^_)P-HLf#9kIFW)-RW8)`Eg-uC=i7eVi; zv30O5I`;GVy+&;y^fluO|H658P1hC6)pDQPlw{Wb zc>#nzv0e;zV>UB`o&(?tcs-8?oU;GDzy5o9vE4sK?Di_nTUK4QJdxwZ8^W{18@CAE zG^U#5&DWexePyG|sTmaF&QhG!qy*x$WtK%65A}1dBsPv6EgIyT*qTR(S~HAwa!I2tA& zQs%M|UacK`YY8ZenWKa(q-AtLu&%~x)kiCGIoddXXi^^zIrNBNyIy`bnhp*c0ud{| zHWO~jQ?U8_7drV@iNmpfc?(w4IU+uQPTA^nnxZ{s?0j;=rae3RQ#XO?izYsnQsH_d z01T?n4odkWv@kFd!fkOmp9cFnvg?A4M}BNiXCPvG zQ~=7y)X8O2$`}=~0#mg`0v1oA9>tz+$L(H+Fe(YyVawIvbDZ!$Q%P!% zxu3hC(&;TAf7V|Djdm0eRQZLW$y-&17EuuY^*K_^=Wu#spnAjSp4OcX+m+B z>`1m?{cD`}^*ERMhdmkP<>mW(6fHa-ev91%tzBt;ZQ z(%rL8l|z|Bxhme+d0GS^WdrG$)2KEcNC5f?*!BObZ8_Z`C@iHh|Jd7UYhvqtp0_7Q z68GfcxscZ6<`mzyG!5W;W-GfG63x1UelhyvAm?WK7f*BHO-Ye8}Ng`eLi8ke_rZ9E?m< zr;)~pM?IYNX96VV*Rr_M>@MVBjd6Y2l=k@JHuDuZih^)JpqYniG+Jh!Alyxs(2vo7 z$h+(2_ie-q-R-Zrm)Kz8B2zn`H(_HxxZ8H$F^jysK~f@p5QoPc>&7hp1D}|9z6|$;gaq-N~9Po zBC{x6Ha42JOzCWHHpImsf|6x@&7Ws>DfLLR^o&-;-4KfV!yyy7zuM1;5!B$6w%qzg zjaPB9i_>n=?-sebExG5N;Yf}Dd5yJz6-JcYdoiuY(Ad;y;pzU_a>30<1Z-^tUcUx` zNAMG}g^&sh2zOx;#F%By`;Ic7$^Qyr{PHCsjT2M%`ndvaN`Bb)?J2iNtiNeWF*}d3 zG<#+g?R&bXAXu8R+PrQcPc?nsNfGw@Vh=%a@0TIOw4K7$j4!!-`eFxoXWc#CyeMn{uMI^{E~l^xwkU*&ys~9J_La znCAhK?7uE2n>s!H2-wGD5b6UJjKIWFvWERVK+>*W&CU9~Lxy(y^;VBMnwQ4UU+!Jc zaJ08e3kovW#_dA9z2CK%%+I89d6PRq=yNdhOgLWfUuC z;a$P#HW~Hj_4kKr_odLGuC9k8T9FDyA4GFq7HuZ#va`?kO0uJ(1QfytZ6KKfyF`4! zT_&~E%)&E4)FySVBt|RFJVqwOes*;aVyXa-nnu=!kwLYvYqIH1@MG<`{qVJttaN169b49 zmGs10bM=8lL-XWQeAhx<{A9U8RcgSs@%7oH$~eS9K|A5txb+8k zPAeAE*pjB6mD>$(Y;AY}WKh;mVlATS5-0r^PJ>B8wLNJc^|=-#oD?2t`Bp-u>?$o9 zVKqsR3pMUo|4N10`NgB+KQJTY$}ZC9E+7^OJ@f%~@8ilrt?83bi|CKi|8Sd^rZLTG z;~KZKQ=tL3b5ZG@GIQ`7kMdTWVR#qIq_JY2p#h<9j8T_a#5XzT3@WqK-p$#Q~-8j(a|et z(7d4^iGzo%(~AcCj}Tl>@y?Ak*IJPaTd@_&QfB>EWlQHk<(X>>C8lB!;H9T z&>^+LK{0ajYAi|r0Ix1Pk5RelZ4a?-2*nhRD87EhZBGI%KDYEsB|71;Uc>0)R?HZN zzx>|5zr?7O@fdPoKhM)YYd4+>g0ikr@Avk_lj1IPQ;gs87yj}=+%xGFzD$M)$RDla zYK~OzNz;TDneQ@0JW${P#jJ)CoV<_KCnu&C1;QT0W3E9!nO8T2HYP&oad(|KXE58Dgk- z0)y~2=8jc#uuK>$4EQ|n`*ZNqmjQD=i!KuYZimi&`PyUP39!>eF zEWhpzyGur1{$}Q|v}nV>4;GD-NYwVj0FDzeC3US*0uE5K3aTR+BPODgICVBp6-v^q z9>eTtLpm?F8cVtAEgd%-%5Ialkv{R@!v*9a%00-IYCId#jt2~ntCpmjWUtxO;*gnv z85SkF66Bx1zE#$4w>_ z+QcEHee3Q9>eByv@B-4c|6O>M1VnKDa%oFxhIA(B-WrLQc(gou2B}zf*FIfYYwAfX zEuT`-^*6p}*jP5q7I1JUdMt4Smo+j>s<&nkd&mxM^K_8A_Z+YFQrrbSMKl%75fshF_gyZ*Z>xsx7KAE6eE&xWT1 zZRgTs+^sIr<>Q?k4XAA3_=4bUsViReM$D}AKp5VdCqTNeeF^hral=qtLWocm+fa@0 z*JPhZcEW$mudg3q8n%clOcXVgR*DijxTO^%WO#Kqdw$BMU(21JhEf zHpgHMzT~v$oJb!RE2Y~r;6Gb27T)U3{7CQ8UJg2Cf$ed|AP6TB3Fs&S%Ko9IErW1R z2~u`yg*PP&eS5FJKk0x+{d%jDW0U^p;!hvN=^KoYg8aX{?|Q8u&8DKcPJ{PiviH`y zq3Z&3ykwJ{s%uf=<-PKSVQ)p3WYTuvg;J=4;i0a4lj-yW`K6 z81k9{>OgV|M?GM>IJMSMmaWS#Ys~nH+1^17I-~Lnh_OSgG*jjeV9y>K5V$Q{m)^z+ zzw29UVPAPxYAxDU7iM^j2>Snzo&l+`dQE0t<1my|^rFQkS7w}dBv-B?y>-w*RQohd ztL8} z1Gi3uZxvszLSN|@EKRHmjv|VlD+G#s*B++Re)h!(fKyEN0$6#BC3%dcE zE3CkvWuL}pF)j@SVsJnI48kpRwzLtBnPt)sH3FUQc>HG$k7N6b5hqt6;Amr@s!!YK z^5s&HbDay15~(k4$8(J@R zKw139$b@*yUf~w&3QSb#+VIc4N8ZDrSs1kA)Jq_nz`y=cWkaq}D^n zp8Eq)P)kA}WF&d`wgiWS*-y_aUm~|o1%ac+oG%maCnnQ%{Vc1J8h*0(-2<2%nD#l{ zFoOu0|s3 zcZ$cR@u5?PU*ENvvPAnI06-!W1eMiAwu$sY@@5smsPNEoavnSX_97?^l~dL3_k4_p zb`?|oE^-M!>E(k=b*^D#pzW0c4V}uIn740z3-tE#q$7+0k-D4HqDk*L%5$jZ*5BjG z5-MSta-7Z`-1kZnYCQ_>YmDO2ge9lX`_3qK&UowKg0y=1ai%+jZ@u4UQ9Nf7aa+o} z2@l;rhKcO>5=PPhy{HsUJeHYI^su?&=xCJ$hce3*{F;_d7ff#33-`A_y`O~8%9}+v zRJ;1q3>Z_FaTMDQ1K3@ZBz{{8tn^&rTdS&cF0_7YB{c*B&2-hAJ>aYJ>lnzbFb+r2 zNvRf`$xo96GiZxF0nWt@(g?|6oVdHZo?Gs5d4)XwW1JX}l+O6L5Sq`u4u5YMs`>Ey zaNJsk{c$q7R7ItnWogx7jD31?d8Orpp_wgLW}Xh_4&QJyaoKeCbo7=7uTt3>j8Pv6 zs!V@O&tb+*f@vs?Gn+ERMk-ELREHOo)EJSN!{zw79V{PeZbsYBv+J*w-e`D~F0UiQ zq63sBoyo%{YkBZBU&^bqFSo*BgBa?w*XOI4xo6L++}ga!roCxW?&OPVq6}wVD=|)C zCxXQ-c=`(;2^xdias%}Hb z&a#DYUK>)n-(cCf<4c#dJs_|*EOwYB7Vv5h_D+QLMoria+SFO>cqt+Td5pyguG7t- zs^bLM3X?92q}Z^0(`oRw;`|bxKrHs`xG;`U{;1%A*faTBH-~Z9IKF$EpH9z|8-9KP z^OKaK!perHm9)9v8!UD>nvMz6GQ?pXf9KrUQ_&K~>5lx?1n#@mfs#Qf?AZyVTF@Jn zIiiCmdT2#AT<0=Cxgj&TZiN%r87pCxC}`|^k6L8=zhM8vfsD(+05BZH2?+`R0XB`! zNReMQUkY?PMbP3;%+6ka-3uNnPu4B`Vs`1`6l#DCnx=CB9-}8ZbuO0~`E)(WlvpR_ zGbb&mp!~68*O|&E!LeRcfbqpR^+&I3ijG^Bmx6lb`MR^NWv2Wa&jK7e`y_f@4^TJUmB=+_Ts&tb=FaTH&B$mTQ6`wxxt+Z#DUINk=KG zcEzv52&gjtB}8d~bgpK>T3n&}v-m;luts`HjdXLPG2?;d(O!WjyS`3*GA-Mog!D?Rm?HfwwwCFhZnDKlGG;M z?YuMBWg?IMq)GodHsjvhogi2-!Xas5(K3CLP!tD$swz1>8^9}6$KXO*`^2w+o+fJf+gm|A(lzj*7aA+P_U2LFp6}$)Ou*q@;x*q@<-A zq#OwW>5?vKhHh!;7(zfmI!8)s0BPnu+|Tt};u2j|Mjl%z8mOA2{2$1VW_C0PFENYMZ~_ zVchlYaR#Y-O>bZnhkdl4Qrx;60`*U~(fD-W*5n1S>h%_@n0FN`CHY@^)&9=NzS11` ztWe+wT4nB=;RXZ4$g_)`3NZhFpX#ykw=+jAZEEp3x{GTlFpUAbDJQ46VUB8?@5S(& zfD?f|zG1?3xeW%TvF|?gb6u$a23DA;MJx609w1GXL zt#Nd)sLg3nSs;(E?x6bTY_rL;eYH%Ue~AVai3S{hhJ2$__FdWxs&K3xC`OPm@y*d< z%JZiV-wn$tYi)m0pPRI3Ru#X@5hSVUPW+7!ibPWzQtCmNa9Yw2bG(Ai~FyVmu5vFr{?OPtf(lP=1Z7%D`yNi)fr7yPQRIi_h!V zuFI5->#z4?^>#K*{@<+M?>zLbYcx+Q42F+Y+lbO^QVY)c3JCoPUwL6{WDL43>{TrA zg!?Hht)n&0clUutPBtrRLC!avhboir$w`~w-&k3ja?IYJd%QKAoYKc3;j?Jv*To_R z&;~8p9t~Ubd)xIYaSX4lJLhIX^)`7>mdy20h9&m(T{kg+#ZLQR1sDy}9?k<>I9RrK zTX%*ZKD^WJb&%jc(fhM@ZnvswBz%YMBf5DBuwmOTCV|amPCu3cam|hpLR16!A@EC( zO1=6U$+gYYaQ2(qs-z)#_wC)J3cut-RSkEo+%HBFCQVI$K+=`(zZt7vHvAC8MLZIA z==-)zTbW7oVyFN6NAf33*d_p{z+zvb+Es+a@k_17GALLK;LQy;A%|(6Kb3t96rpKp z*d__fc#jl5%T>OODV5tyjaoYv7%S@PH>+#G$X*c7AKUx}4`y(9pqEJafGv)}MAYc9 zEPx72Qup~@9ro#OEch9tmiUg|-I@gETf{aNd5CaQ{89DW& zzUc1LC%_0rU4tW|ZSrH%rUU)qI!=#ttx2;QV(92k(tXIjFFq7nqw-mun9q%vS8%?^ z`Bf_8dw8bL9QN0yiQGv$XE)Qat(U)2@!!-1Coy+_e6`-B%sEP7)M6sg)}0ou5cpy@ zb)aL7D2f0Rz!L!%39JFZujh8WE-Y-qCA18DiO$Z#>#O%V53m>Z0D0i8yiW#CmT|SN z!CE88gaa`<&L01O(@0ZQRTcQoK-*zIM|JK~Sg~{$%(~6yNY7KeDYhQ9s+OW>KA^o^ zpO}2pQ`tK$Un~F4@)34$8F(soz*`&%_hr$05_2XfL=y>w+mWRq|L-X|KcG_%zMokf zH+3$B;dmAZ_)uPsQ=^$nVOSFm!er*&RU5V*M&wY-s?m(Jq2Zk8WwH<^NWdpArw(5fWq+i0V@OwOW@PL0 zeJkpV2P-&BX=~n^zMgW#BV&Mdn>c1IAOsf_vaT1luG@O)o|;%EjO(z#>(JcfGX^x< zTw3@tlTLW?_0}dfBJLCGGiRws=Lr_cjzoMak->(A*1}$Hvk;lQ9pS(q+(VHas_Y|$ zny;iDpQ9Tb`S@j}NE(^m#pQ?AeRHNPJ?Ih*uv3sOTUb9hPVRX3$=*>OThOmhpL@i zL!;$sqw4$_9?dcVojl>#S|kX&H;&Zr$UQz5GlZ0=7P`via{o>jOtJXff(U&U zErg97NRqkl>dFg*W&xN4wD0Er(R@B}WJiZDL%@xMI50-^5;?Sx(99J$BsYK3{8j1B ze~P2+dR{*eOZ6p=?}f6dcQ^&7WA6vHEM~W9Blq)jcj@k(rhSfCaR_!$oDb1+x+r?Y zo7K9cQn(FZ3R=(V7Q{P3>+u=GN!E6#%7bMb92k}RWB?(+hSd4@&#m-KKt}C<#{~k) z$97HxHlA!ZMXd>elICXE$K|GVLKWPFy>{r@>Gav;cXw>~{wP-N!>}h4yR*mMOu(b! z^x;E4U`GQmd!KXtaV~0gqj^;#D`}Qef5jWu(^X98g%~d)G(Lt-w^|nuTPAv_JeM-k z7jfvf#fdUN7r?x^|5pp}qrr`YMdjIe|BFb&?Yg@_R_nJ*-}K)u5e!+^+J~COZcfjV zw#L?_%HVl;tTVFe7(;$Ol@>oZO(G?z_%M-YVQ^9+gv-%~fw=St?5NkEHg*ezR-nz7W`4{g`{k z($yb9U_%07nLZyqofTtV6-gh|bkKuaS!}b;FrR_zWv1V-r#MN`bCF1RPjlkKuPyEq zL&lph&X5fT>oE9s?aRiH!1;Dxgj#5GlSv~vPg?8qSn_4JJ2q5<|pbODG$wpOR%jI$7`uaW-)8+Fdu&Y zy0IE8u0dTE>HI7j()>-O6hF}Rh2((Pkrw}Ho01~-YG_Ksx;H=4hJVGzOC}-zeUn`4 z*z!tWv=>NT2C=N0O*grnpyRo^m~ICiBp}lU`Ac+I^1ye;Dw5B0z@u! zzk2t;uUJ%mPu|Q~zX-$oI{Ceq|3;*+gv7=&o$+yEmf=%Y^pQP`-h@0Zp8|iPR}0KP zdLv~57+yUN2$V}JK*r>;tW8Eh*K?^vK#mtx-~xDHGARb^G~K3K^q79On0(Jq$zUzF z&7NGsnmCzl^fcQBqui&vAv5tjM|X^q!wjT8Y9bOuO_#}WhwkAqi8?UxF# zKzLGaE(p{29cT{6El+fPlzuV$&NC}!@pF|OTS!xH*f+SFeMpqO>mJ4jXGz+Hx|l;8 z=}$T9oKo;!*OD(8gk)*FJF7wrQP1NTItfYPKSRwr>`1ezSe(y?g|qgQ6d=l0yidy12O|Wc7W&e`^dsJ6wzOoNvF`LHC)vbl7-(E=b9<4kdg% zYzY`4&&4k`pMx%3x?+0no#7NV`prc&;XM`2F}|AgR+kOPJKDP9&|920; zw@~cHbHz9wGgnmC#cExORlf)k1obc4{B96^Wyqmlpvb}LDYq9hZ`8PFi1Sr6nI{y1 zS7sxV8Oo!H^o8F0Hl#`6E8E7?YC)U8#Av4dzoAEa-IV*czZ; z2Zf5Z(U*+68mhGItVs(z_&!%l^_ON{?K#Y#JbgS2H~zWfaefLzdzN!noJq7@gLMVf z&DcM0*AkD`wiRJk~&cFU7B}Al=nIi=K%-=Czmp&>{c%P z!drhlV$x>F&O>T*bl}NTrOzP?kD_O3Xg!+TY#*sibWY(bvo8g|RWx<*iT_|Mt2dT1 zmtaX@@`Tr@?1MPP;qZt4xh;I6r7kXffZ8xgIQaV~z3Szf$wp|jNQh9uXY1rw&aVhD z7_6(IHP0TT!gFjXn-U%GhR2f&KKlOlPjBN6G6A~zI1gJ|Q&?2&8;lD;;XeVTUCm71 z*!%3A3!41hkSMgY$?fWRpgIC}Jq<%{Z{sW-fw`@*aXY>8vyZO-crQ)_3JNy-nS-+R zZC%=^d0R74mpfN24Io(=gs-H@+pTcOl z2Fsw6uj8kiw`zEk_2WYBE@T2-xHVrIP;*5Vj)5zPDfPpp(VQnGCSPQDiaXIM6q{>$ zL&S22x1a7g7U}mADv%OZp9UPegoD~n8CRb>%cP7o_|o4daV6InZ~$QqNHsV#zY<4+ zq#qFeIBr+>;j2YUdW0}sP`FfZ8s&q_P13$(_8u^HnDMspOSdA}JVAV{xn39{D;!?B zD`{Gik-^yUS3rk^L>h}vg-J;>N9aY=b6p=APEzrtBxBwTka68i54cu_YdY;$!XcO; zco=?73-c2b^}A&?A3aw7XTJ;3u*n4jz&j6!zKndF!qBGk~ z36MAf&|9=(-u*k%8+akcJSi;zonF>d0|AR`aR0;Zuky)FL$scss<*!+G~MxUyMABs zL?GYFq_G^XQC`Y8H^NHyC6QqfOXY<`ymKpV_E7VGttevY|0FdPBoEhd*27998SnpT z!!QpXAeB!khMo}bCSodrtg}M6tIH)cf{mc%Dt3$Ie!Z^>hfe+GVDV51DzBM<0W38d z3?aujl!$nPJxAxVJMT#j%r6F|OKnVH3UOO(g9z=v0Uak&>ydBij7;b`+6!}REjrk-!Q3Pp(>)be({e|nNx+-o_L_q;`6Yw zs(WB95iKHS=`Ww$vYIxKaCqWs;2Bmx0fZ4;x`ZLPq1x1`l!0&CChLCx^IqnwbhoeZ z)9QavI?zg!rEg?^v-cs?LNcB4yGeh)p>tijYgMxA7Dr0ZU7MPLnZw5?a)ENW{u@p6 z5su#*X%AhzdsvT!i##`fQU1cGQW=PJR!sfG+_FU+q#jxmB)hy4e3utCFl5Y4U^p*C zr}ZXXDov_Y)wT6I0L9h5EsOm22wrth!uRSvaI1hMMooihB!aVj{iI}?!Fh7xeEzPE%=ZrPu;_e zWw-E3kvBldl;RwV9;o;zE%8;x4sx#kHfcR}n{Hv_{Eqy$!pVkCLc9R0nCX+B#~e`; z^25s25E&f^-!KD?q2)vaz@{Kq!-W35=flv|Ci?b1PcK+fBu3cL`MCtKY*#t(FscN+ z>$MZmr*h6vfrVAWY|ks;tS8=Lg6ehpEvahf@5R^F7Vqe@$=`uR4}Da7L-M)6+60cH zxN0x@m-vMsEt&qgCp*TVVu75%rCoVhG?7C5hcYzrqB%!W(ndtN@v;#Ah$_l;69~Gu z+(gojwgwj&og{ADL8kgvHk@_WBW=s=b)v=ZdXQYnuuZ1eD%c^6O-sR?Z(wF{#Cxu5E+&c``1q_ zZ^Bkw2AzaWYE!uh#P|$zCmmdUKXd{yvY-{?fCg3xF}&IDdS$Kscg_VT8pVl4uggIS zv2q<}ups$xb#p~wooZ^0vHO-rWa5^A$uD`GEx zvrYsGZ0(G+&W8;!f1?Cu>3i0-43U8gKW6XEU?@CIZ{@LNL=qx#9>OPON_@VDdm0$w zdma732XqwIgKN)NV4B^S1HJ|ojVkweAw2B(WazpX1%_YYmwXEIPfz8Cu1Q`mP|U)A5wBxZ;zkt zRaH#v`d8*m$MgEPh7HaO30rQ#`@Wz}33OD(}Lf@0VQ7_&!r?qmSQbF!Ljl_L5 z5uh^Tttw%cFqP}V8N2_|T0q|l@}C;NfB)f3Es`;k z(F4X%6=#2DaC6eIWNV~~mb^r#>PT9fTWd9i{3Q9Iismr|=2g*g=Xe)>fRdZ&dG?>g z1zEp-I140ZK;n{Bn8kBbXZRyFgKX69Q{px2KMg>mwIkcUe%zWscbcsr1WKJ9?jDG6k;@u=%gWv;U znvxpC;9blIOstHz(F`XgIsg_O%o$uk&cP_UN$sNUIKgELCXK@`BTm9Ay&1d&23HKy z+fa6l!m*<3=^Smy=8*Cx{EC;Pqe3 z-y$t)p@xb;$dc$&T4sO;eXeTS!rUF{8^D)iD(Q5rfKdByo2C*YIk{vvk1hPa z$xw&eHivTZw&FbC8M7!D{K3&sW9u@IU6hK&Gi*`fW5Uj{hwuuIw##SdH7;=0Sz50j zyw7?+Pc+-br+IL|9g4PhJBNWt(^7Cd zsv!`>;Apc8bvXwI#VBcz;68a-fl#nYdiT)%B(Kdln|n2yg%fr^ZR&t58MInJu_f4> zv|2e&kg_kKeI>&off;yL!sjC4>yFFK1%6E$OPG3STyolEfW{TVd}q6Lfmi!MC}+hKo1xO&nA9YZ@m>FQ*yuQjUVRk-Qvp>UN=8?nqZS1|vhY#QDEYuxNIoZ*7fk0m%t;$8r?(z=8E}M0h z@k4k4MH*HmfAd50O>caJ&AU|hgp-t%<~JY3_5GzDcDZpyh)isy&p=MAYwUe;Yd>b8 zZYQ4~++M-B-f=grl#G!`>^%Kr<+XTNeL2BZi1RtoVuf4;C#L(Z^%IyCp4CfOWeO_= z>PRV;i*U`0H%P&{&S6x!R79pY{bSKZbk2H*BTlZl-VGUM88k=QQWH4f0?Tf_QkC?1U}cs9RL41YU7l@@r|%6bsv@Vx+v;f zy~VRZe8htR$2vr~cnY_R7_y@*^^R2qp@JoFV&DaY9l>btwv*HKPS|WBMD%v z5RqC16+@RUVzM{SNXA~7H@wl?OgLwXmLehFOLMb`*>jQo>c!M;|9g!GG*P-9hhM$4 zGtD1fTlmvW7~Fs;YtbkdFk&nG41+>J2YK6?-<+8NsnPk`Q*=LB7Hk9-!Et`^C)KR5 zW1{0R!5j_72}Us71Wwrm&k37ra5+DPENvg(-3er;F$O&My^z$PtdY`Gj=@6gLRtM zEt`t3?*2^`oSw$xELV`lfLBK;q{cBSjsJeGMASV+dx-OKFq)9w0iWs=V!prRt?h0$ zY&G2d{$tS7k(41LRNrVj`1S*Z0V#Ts2@oEph)L%9M*}0qfyU&qw7Q_(tOpHLBN>ye zJV}$-Fn_^%V*j*ZebiXdDz_C#ap_=g6 z+c}J?eP~1{QJ-xw`wK|0ALl75x3T{lRYDETv}_OXj6;Uc+s7Q~zL<$R0#(0CJ3oC5Kn^mpy*;h=JKi>>Od<_c<;nB^g0WXB)%tO9L-^sbi>g+hC zH(o6z7rL@*LO<0^bIQg^c49Fn zv9I`FN}*!vYTvoXG?cs&M+PhnG)K)SKPZbue@NzLD++vH#V{&-u3dg4#5 z-w)0x(Lcp~ua(s29(|b1UI zeIMbe?v^*l4vv)vF;R37)Zg2}+&&HacUJNGzYg3&&!MtpJGAsT@ufPl;Cr|pG8mU} zfCh43!=dCmY$->>(w9Wc<*BD$Y6+t~l$F5LYkc53R)WV7p?#85YG+-(Do;`-8@F_a z_yn02N&pmr!&K04Ovs-S! zQ3FX*n%(vIsM}`mNSXyD5Na$FyK$Uj8L9CB8V+FEOHmFbyUXi1py%^L&qq>4ket&B zA`?v)_C1R6y9UsdZ)CWt6i#K^3%*a~x9jTWhBVb-v}Hb?;*Xekgu8?Ufz>S^&co;q z6*@`a`Okw|77oNq4l&7<_RPQOUO#RT-DKNe zpCim$Cl#RlL7#-8u)0Vz)=lQld5gK8pc78AKrZp45J)0N5k}Y_I<2+9vyZSQn2Xl? zDm#QkRfg?OzN|7O$Jk_qTyERUTcbbM|GgZ2uB~oY2B&9BpJ6JNp`t>cFEf=t4IR74 z;|fAkBpcWC5*M6_KHDD!dQ zyDh}~cS-KkHE7a?29TlBCaPmtIBk$32uY5h$oYz#HdD0Mm|zNNqhs|ac^mrP_zh#0;7*}ziW(!Ks47jD3(0duf30t7J* z4h~%iX{k0FM}cMl9o-kxSBYak@!uv!=I&5WrcqC&2?a~dm5=e2`9=^wG=y?b?)Jyc zDcY6Yt%gWgaVVSSoOqPVF7qCV%`-DDP-o(6E}5;C9ZU;FOe7TVSK-KX^3g*dzzakb$7qw|ZBiZhSn zM{``lwqO_N)|k1-b&@m`Kq7b(FeCD|^v;E9c)WJj#MGxQxe(Pd|6+>T9sXk}qNBXg zVVe|uj_vZ){2W;%=Zu}afFug-B@f)j1u!-56iZ86kNvQj% zWw_A~W_wj={hIIrK*^$p1(#5Nd#HF?BP|6L;$x1|bXqb-7m2vF_fD_rh(8tFN_6Wj zYL1D6VwtfM2w2*_UW>^!yJtcozg)BM-=EzTNVHhM&O7$ok?^@jhxo%%>a*ZC zHMa^a3Fwur>}RMV2ZXmIjKu=iDn+B2)DHC{5mV2hSya!%Flh&}!E(n4!;d64yls$A zhs73&&A|lN@ot0egU2BF*&i&Mp`v9M91WbXB&ip;O{`8N7KnRtZAN?g&~`+z=$^~W zJ;&x}vk6r!(@YyI8(-%ZfqoN4fri6P=LCXH0KL;X6)1JrB6U;&xOc;q^hg+i3`6>k z*i^k+Z^G-7`Q9cu@I!raxO4268}&k-{oMP{PK$pqkl`S=QTFlC4=W0cJAl`mP>^>o zNL_u(D!fMzBTQNo6;(qMu39E%wk!NwSKg@3o=Rl`7!`?-P;F)N#oa^nX$a`%0#9$V zxG5(1&aVj2JvwWGKrc0ML$P2PZds<9{OXln=d*+43#Hz@blGLp$%(DeqJh)+-=iYW zq4-7YlO|Pa%nvmb6G&i-R7}i|>B+0gnn=`qbKLSPg=2X{?SHiZPyIk!09-04?QV@%=?u#A51Zg)C3PrC z7V9A=ZWD@g-9$wg7qHHz*SFuj0rLNijg1eP(dC}b=?=7#rkWux6qWz4l3v9JjL2v#N!yasJ{1hwz=KoqN?F zQ%@m)B{A2rej+K01*Uc}YJ_gz?OJ+%gS>!+T|^teNYp@)1!{yamB8m`$xoU zEw3Nz80&Iya#qj!D=v=rvFsf#ejtN2SZk7{Ps}rgGp=bIwf;LGxyO1zC37TU$ z#q0eIw?E={)iBKQl|zumC404AY5@rHj@#vM;Zn3R)NbzYIN|hvg4O}^n=8Z*2fZoO zO07{vyak0~T+D_rc$t9oQxKrQN6AeYnLKQXu$>qPf~asl9d}{W7!ryimklSvnjCNw zE+H6SMWxUqz{~wb4gNt%a=~XatQJImY+`+Tx`iG{%lK-%5I_ea$X70JTv*^1dTavY z?aNwXiDxj0L%{AyOH1`Jmgl(h*R*QY&5 zz64dgg|KrfPpX=8$lY||ytVON`ECHWf&V?Z&ny<{1D{#U@x%leq6MprQ!N%vZ-&&s{Ws zw#<8uIj6&LZax$KM===f=kec}I=IFN*5LAij8?eh;k4RXYUr_6rcj39b#)TFjp(zt ztf2+3F|ah-znnfpR~-P|=u>LygTLpvBODm7ydKt6ha(+LW;s%jD_Zqi!G@V0vsb3B zm`iV|{~Sdp{&0TpE$-#fru!t#%GU6meItER!Unwc!KzC`EpzJQU^CGrAiUBj)7E+7 z@pSbJla%)_cndnG(<`Tx>R0TuSxy5y+bi>rPFvNVNhq|)4C~8Vd_!Y>}z6X)@ zm&a_h%N4KO5zs=$iYj@th6WL`{nPOJ&hj1Z{c9SH$Pr0~r{!#Qz+H=v-Mn6iPtP=W z!@i)OU3E>eD1s#~(C(u0lfYbz8kj0JJ(|IiHxK6Q3~azsoYlq)Sqy4XgkZ;xd_$R{ zFu%Ci>%L%N_(f%|9`^)}D1pT$ouQ|@z&?Av*^^-DR9IMSbhkyOQS;76i4?f}Yc2IH zJ6(HCb_!!B)F!jPC;e6jKn7k~QiV}XU0u)K-X0F^@fpyN9?hgfl(=2}yH<}k;2Sl1 z_Uf+pmAe>T6JZ?n(0{03BI&8s6MDnK9fvL>jzke&Mst(mU+9QB?rO@~Em}1nJ`qM&p>8^>+zUi!Z zaN~#MLmLpY`?vyAY@|20=SvkE_DjRxa~4kUD1>%?01E&LRYUyeg9EAt?ZanXGZFhK zN@51v9AS(>E1?$_)vDsPe*J4%|FKG()s@NpE!xs(NZT_P+HOvI8%jMVbuxR_2dJxq zUK3U}HZ~e)-&6?Pu-qP~4L?eBk#FJ|=OLPYdFc&Ffu&P;5SyvAg|6VIN9rU$WHH`! zlv7GVKiSY_6gG^pZ_BiopSlxWH=LAM9lOs=*G=AKLX!$BYE){R6ij^OByno;bLS$l zSbP!b-lQHFibpPDC{|P~^o#dzlbBmN$(Gi1Jmvgk(~BFWtCH)F##e~e$98i@90T#S zdrR$V#In=o>RvycndcDsCEG*7jS(<)6Y^SgF1`Xp6@CAlT3KsSM&EIni)0wZANBo^ zs5HR11Tp6sHR1G)3*F^n-8ceOc8>nCCZD$6>6~&g(fk>UapV{&Y7B4P&?dr6H4J@ODpU5W_9sXGjy15^atE83kh^eZ263em%9?GTG(V71 zkAiWuJA$7P)KMHv#L_F`VS!0R*xdwMK>^)Z^>ZIY(2_+R1b<+ayC7Dx_zXdDpfo6v zd#DzRhdgViM*A|ap`TH_z5pp zm-{GHe)$G6UYKg9E;tCa(5cE(ZEYK%eQ^W(c!mi)ZkMO~yjh(8QeO&-(?@B#-2Gy| z+ISa#=|25|uVZ7#x29j^|5>OKkH`6X>g^dPD9Bnh$Gyn99&u&N&dwP2AiW0_#LpHp z2UXPO?wRN&JA@C-6-bCKU$v+-FIa-qU8K3n)~GWzm=OxUe96?;QFs5|T$kjso?~1J?XtK^Z5hKJ()Q{>jeAkj?RuBLS{I*`n-A z>Pz;VOPQz-FxaC%!hlt+>0kIUK_nW2NLDSp-3aY^jtbeIVjtak{<{aKo-1PzTK(v5 zXSbWp?+%Q^zX2P8;?0wkmvtEK)B1Z97yn!gJ=^Rj4n(QD7!--(7#K!t8fxP%^vj;( zuv+Q8258qr^T3YV=&f;~ks=R&0QN?{Z{=Cd$ z9jRiGN*v1t6SwBgeRo<0F|kjZg*u8&vL{geejgs@{tFi;&V4c!8tuZL+jq3Ni>GzY z$Ii7Rl=KxE^COxfmB2yeJcQ+kKS84@&jdM7`L2Lm%vvDL_heEhDMSwPx3#XWPW0h- zqYBN6X=iGy6fJG9T1dF)DCkTeh!0>tK81K5wuM**Q5EehdYt-spmq4U_3ISRxpfKCg!z@+dVWX3iO#GP@iG7st<3yO& z=m72+>;!pBRfg-U;9xK?FgQRV*)qjoikAFbCC%X$m8zdi-a0iB zZ02O#O$?{8iyQJ3vX($vR3KX421X0kbK6sC1l1{FljZB$f(< zG@;O;>KokvJCTm+QkN^uDA?d30B}7)hxxv^nO<9ZqbA2(EAxf>qlZR{>> zNKQkIYQurJ)0K}KY;>b)aQ?Y}Vp-L+uNa@O&@YsM3M`yk7%qGgF-B!xJ(S#*GSV-E zkr2jZX69?x{AE3G_j`@0bw8-d!KkbPLpQ@RHXZJ&G^1reoN@eYrx>* z*0if7a{JY}JqgCYjEpX=ZW9qed|#0kD_h{hx%w(j0_HJeZ;jKD_jRO-aP692C-4;u z{(Ua4L)BU_9KbAFaU@d^Umj+1nS6s0JiVGDxH?l~1=OhIOQ$**13VPJp5mqCJ-VJv z3Q|r{eWdV*#^p)S9hu~AuP~(W)i%QT@UZVGrbYm1nk|}`SI;# zPWg{#NH_sMJa^L#N}JzRdOvJ0ly$U;m&9LlyFQdG16HRRs~R3gnRoo@>&Cf@nZmgq zsxVNgp=7YAFG`7`62!3(n$n0OZOsQ?9>d5U7$Y-e?Pr$tH0Yu$K*n1R-oGgplP&U2n_ z)8LE^elEO_!w;_uCrn&jU4?x#lGZMlB@m>T{?s%yhpR}XMe0nhOk6w|8Dgp11)jva z(=AOv>2Vitq6;P9tRJ2H&*;$Q_eRN)CLaBVU$fnWj+4v$?BvqRsigSRg;~9z)*GNX zeoC~+O#R|gh9KlJuhJ}7YG&@pm?JE<>+O>cjUkq{Lw{Vy`7r0Ce*4F<`1PSwQ+9Xc z{Ctk6Q3;Tg*jHvjq3;`-hq{O-f@*490V(2khjQZWXW@GOe?mV(CC&b z>sPF+;a-Gs|0|Pl&-YCooEf9O7@M_c^0BqleJuY|n{I1D#p)8DN_~C(ci27$ph=n1 z{!{$p_xFcX@(90CdDxwAc$SO*+)5ZXTyWyNDE$puJ!QMO4AU>be1$e}<*|HU-+wtp zQ*U%ozs7Eap1G$H+VPT-J`U(zk6~A;Y@S%Y&4mPb5k5-%?URcze3;#pyvD2cB`cnk zcY5r;?H#6;Gx6!1Q4}uzeCguW7su&yjSqSX%+mGdzUiUn)A^-q3PX<7b>#%=(+5k!q&_f z75giB*Ey~F9@KYf=f9rx;7$^EYmSIyd5~!_hVmQfOwf1|Z^7b~S*077QX#1oia_i7oy|0p%A}Q`EV|G3I-Uj)HalC$SY+?LauwsB@QXBu}G5-{h?44u@Zmk;_WgrGqc4*&z21Bt4&7&V+$E>+jk@h(mu20wq_lFCOrZX5A-a7fknJb$8ViHm2*0+? zHss|${c4~kpPxTiEbh@aH2ZjsP2jT)&gyR?@v1tGn&uNZ*_9jz z#Z8mvn!EX^lAQtpWWo|{cmAt?}n)Yoh6WSYXzX6rK>6wZ0H&(DgGuAYy9J= zrd#x-(V#hIhotc)#z4{-i)h0Boe+PH`oYD?-Af;z+t=y@ANbybV$jp`aP7CG)~SG*!QBHv~d@%Vg2$Pb>$-IRgCAHqDd&- zHB4zpmLl_BWVp^J&Z3L!Ks0)I*gm*R^Hxg&HkQ?p)Zv2hKbI>KcwnUb2zEKQB=o_x zoA1Hn`7Ze1ca6}X`5K3+P~sGYU$0usJMT<%6)*Th3Kn2JOPnK>_<>6ct!fJ=i*Y|& zG9w>LFV8*lqU6a8PQvELt)a7S4W$X!(LlZTLO$8+LYGi8Z!^nzlqulmPP6X=rjQ6V&cd{kNC&6YMv!k0H zbE1A1Zo;@{ei3M!>;DRZc+Tp|{iI{cOtqUt+kofA8t7qSM<}0R8h| z|56-ux(f@2mhv==@x195&+!l&3rRiYi0UG;DRFBu(i`h2iU z+CC8hBmAQy*Wg_4FIC}&?cw{v=3@_dsa8UhwOzxnul>MHcd?v^yOO|0*V_Xg*YDrI zv!~N|C^J^P_ye-PSokQ!8z~86y+G6(g-=gH<^b+vwVkdK>t0$}S+v)+2=edWWSt75 z6`@Cfo!`54U>zC=vON zQUI$;xw4$u3m{L0;}t_@O4Z7yo{b(Mi;K2pxBD+<%q9sP{|T;*BROJ*nPnYzFt&R*%o1PQ};dn$>)X zgyGiZtZK5=N=U^vhd7xwhEba(I9{BUSNr>>3f6X!1s%cCTG`ktq>tEvg4nz{*@E@S zRxYa;|4)TXcSzAlL7?F15sBAHcIm28Ti)8%jMG;~Yhx&5#{TVL3}0sf{ef{CI_A)k z97Brm00a?u2R;sr7tj->_hiMIVE@QWYO}g&n3e1})Nd%p$ys83f`5O)Huj?V_$6%P z%$)oAP`y34lp!JV${XCjr~v(4dHPuz0oN+80dM|HQ4OG+SN~egiiCl~rNs(>$GlnX z0A|+XPF7g0jfdOC$8Ao9PcRK-B=j;$uGOsgQnHOO5BXlIQ~Z0rkx0G7{$1+hwZl&U z$P_@Q%OR|76|g{xz5}8X*4E70F83%}I}(1)bd=6_p(x3dFzv}_|BBFeo6>LBb>}81 zy!(CE!va%~lJ~FZnpb<*Lb$6hqF_}>=c2g^vi$)>rRq1QM+H;k`y7jmlCM`*Q}c$T zQ%|5Osh=X=9&qrz6@2kG$4Qzzsy|-XnVg6E5lB)1p5lFAEIyIyyJaWJ7Rn@2kq4_B z5@2|B%qgi?bi?`ecBsOS8>uc@u97!|^(f=4xC8JexVZ6gCu;j$$>t6#?UESu76>#G zPhZ@WoFEQIzm^Xkj)rjGXzV1NwU0x;ptCU0iRBLrJ49q``m9sSv9ft;qM~em=Xis! z`!Zx(NpMx=O6f(B+q!#3@Sf!OI~&5EQuI56?tL~AHhy|q6eqUuk6M(nk1BS)Gb@nH zG;Y>BVqJ)JuY_L}OG3RME(Tu(p{jLlCI)2-(=}`G2-)i`p$WAlmQL_=fl___pQf>^ zw|&D)^uq!8)jwaPHjGgo;etG6bDCbCp875Q!?dEwpjF+VA;w%POtEO7LzZNs%uHvW z5Z~DKgWKS3OgQj9f!T7+zlX)pjxu|*DSd`}t9gORSwGzliZPwo?Hy~UacMvnica!cO${6+Zsdhj7qPBoa2q9Dagj}egZo+IAe z0PmrTlanNQ@YSAYyFRV7v;LKpUN6vR|3?bGNndnQwsbVTnA0_)F=78#N`xX-m(@}F z;xN>J6|}WF^)%)My)!8)X@bZXk%PqiW%v~F-LSKlI3Rcj)!ckK1J@GHiU^%J=4ozZ z)=T77Grc$x&SjPkrB;|GV*lG8oc%>H-iUAG+*6GLKjdn)X7p@5UhVh%JXl_m;0?Av zmA*1|Gk+%pt@I5tsfvrxr>|WvT~2NJTH{@*BGu!GrNQQY6ak@(FLeFXLmSaar}D(I z=I(@b7GFkHW202vTfd4mnDC94#DQ@X?7y*3C73(Sn4Ig_XX8Rhpbwrv$86@F^}V%X zJ~yINc$oMg!$?Q4^0ns8S5bs!pdxhl{x7A|W z@V17vci-yAJUl#pFD~X#QWFkyDqQ22zKicH9cZeWsLPv+)+9xkrv0wFjM$K;rfyk5 zB9g#U{pSt=cc9_?EJnQ*(QqGOJ@+c@+{-jJCIOC_8|;JsS*hIWs8tO>vbGh5737%rwSEkm^t zk~JTU79v_FeZV!z*KR)~c8I0x#BfBHo4lhQ zu*+c6BlMTf_=-AMgF_0RqxY4U@Tg#M{cJDUI=ai7(COlGro}E`e}6x=32U-?2LSpH zaDIBd&b&F(yP)G-nC|uDiM~uR(_HRvP&G< zNithdP&AU>Z`=sRz;=vqOPkFhBK)v!HzL@;u^cF7`SI@r*}`~Lqtvw%9Otv8D7(I! z<6TtDruIC|N|5LW%@_Ocpf632?($NN(>e0~BjRYq1lTv?H0R?##frqLvS-mW3^gRi z#@ZHyQ_S_slub(8Cgx`4#{>(LHiGLSkaxlhPd4)A2a%aG-!asOIFCQ z{+gpiMO;(&VT$o+WJuHWsy*RDegW5kcBGNUWG=UTrgL&Wy$E_caOKDg<{GZfsd8dT zGhVJ-KUd*j9eQ9OARwS^K381z^72Z1i_}{lx;YGtpG2P%Lof|!H>dz#X>l{8p;aBL z)-Mqi!uqn60M+P2 z`kqHi?*?Q@wRoLl^-yniW_TkVe7@0)mj&1qGFG8}Wc$0wr9Skpe4P1L zuJZ=z+}o_G!p#%m!!xr#PwkFX(P<6nca$_%9VDWx6z!O}40YMJhgc=SHrH9v!sWQQ z`Bw%Ph|@eCxYgsz%F4VqU0Tl(D`JTkJFXbz#&_)@jh-H@r<=pT@dzyBQ&ZR^9%u1D zIK+4x`v=V2Y7D2YFE>h{NsVu(4@z!2tLj(EhcrdTW35(!tytuQ(7%Iq%>F}#`ub3c z$N&G-aKerP1nwlU6j<_K{_>G}UadocniA)}Et`&wWiNI)g_o7rj21}7@8DXWT+d+7 z9sEr_D>|b&- zmX40A#DZtuOcrBbMA`OPvcgg%{-*^Xz5qCIyw&$X@s{-RvIwKryE~q!ho@My%Zsr4 zMbP}Btv-t^zy~6;vUEz|e75a>fBi!$qi8YERh}X?W){|BgT*ux=g19q1NgPxwEWsW9~egQ?F7}0(4yt>Js=uIp>$agv|dh~EE@>5c^ zqEwgNP0=ee#I%^h`9BzYc%)A^=$z1zCTRbV9cHcwOi7W;Q_?V02ly){4OVmnvA{~S z9Dlk-Q8DjY6R42(J{0ELu~jAl(-)d4gJ)Rx2 z+t;wd%aD&?KB9hD4~++0zaa~$lyJOLU{4ROj4g1&b&E>oo$E!VH=q*VmracC<|MfvbE@4VCYY3`n>G$m_ro92a zK0oQGcZ|xgch^yORHgJ*>-wX@xM*?H6pn?zsgAUB2mLoIh?KxIQYOQ`UAHH8-I(KR zo;JBQ!n357Py3{Ytqe7-)iDpkATyk6%tMHBdp0z54H*O-=#M3`O-+0>vHc%2u06tm z+|bV5{dW>)K;;}?;^3{bC*0FB*MQ_?ttGBufUzvwV(TU5_~}XDb_aee zW9v!O^u%_KS!oO;=59dow-Vn+&owuP`g}7uz9;#P@5-SICC$~^*xHNr#Ap97u>T^W zURda0g8&V>EsG*+-0Bn5_(V$+2jAAcKOuB*ZqO{SN2bqJd}gYR%V>R3O)4izWuk`W zEEH?j)noHENk*c3Q^^ucKRQ-hF#bm<^w$NlH6Uu3k+iYLM z^~yV`F*YicTonHvlz`mdIYiQ!7Z;9?a%K>N(QQKr?iWB+dU_5y^MW7^zzDZ!5!3oD z6_zxw?3T3X3_V04%1eZXeIN%F6jvKb)F?T4Tm)(l9R7+TxZTR-vOBt-48pA^rBC?e z%Wpna*2YFgN0~qggp#oLX973x(KLmgPgk4P^2h0wN*^G7mPu}`yUXlLr-gt)#Od}N zK{J+y#M3wD9~5#k~=u9uLgm~^RY>Ac9td?^|-mqD`BarcI$H@aYI9z zy!Br6=6ip=(cPvM(D6F@1!SZGRTXWE;Ae<3%0QFCCH=We(VGp!Q+BK=%Ked2XBTm* zyGjScb-*_xfuxx=C9(9IE#9!tb8+^m8TOJb*n6Jch`Fll=I>{f zDIZ}q1+R@=)7BR^s}hMJ*2ElAxhN5BvuwHNqviGgnzJT)m^#-r^lH-i_hFK{+hr-R zebbjWt=*F}6rlt2=xj;GIK7*(n>8`9VCQ7+Mb1PTpKC4U_1i9$wx`QGxep%EF)#QV zH@mLTPnRl)t&fMy<3ys5$Gv>ybE>LaHvj9S56~abj^^PjsFcF@SJJtd2)-d*dr!e* zM2OO%C7(%=zDYI4rpHe*x=S=>C1AqE)y}40UCnWIGQfBZ_(agVh*711I_+@G8v(-g z2z!9V6>QsJrjwg2Qlfzu60DiiW{4=7-mNVTc@^S!2vW;>2FT49ASpgd~xt(GlGNEE50B4=@Me-kMF-;f&ghyEoC7lRq<0iV?Ah0$odeCUu$YHS_mFSa$2}@>_)SghUVB zQbNVNMZ0F|UH?6sy0K-QFf7#b`v4ypg(Qfo=XJXX)yWl^JifL+MKkdwKGlI5maAc# zb3xIEtu=F;4X!bwDBC+r-S>9*qU3w+S$=vP`E6`4xV(<0evC5(b)Z1-$~L&p(s+pq z6Ap|WH#p_hWr)~!)agiEFB49WG-j@t`O%lvV=+aJ67XYqX2!I`d8G`kLpS&N!Y zF*l-0=T>u7ipHx#K8*Ul`WqOe_0XqkjLmRQ5hA(D+_x5E@9IzcVQ;Vc&-_BCgLbNb zTlaP$+=H!cASwL95OJ!JZtAC759YhoHzG(tb+V2KA1=~mV_Hj0kis!skCWW!Iq1%x zJGXCpxWMP=;0*?uJ`~6< zsoIGj{w|0LRKB;)qP8~v8YD%EGDb&=BHno%&vScgVPQcRJ@b|C{c&@rSChbX-M>hi z-d*M;wZP*o4^v$7;_g7h_WvQq9&Gi5NCKkfK;CP9V)$B_$ziZM)h6a{3r#c2owU=o zgh*S6CapYtPcvH)J~63yz7wjamC~6Z*A&A-ebQOT{z1t|-9&Jk?Z#fllqc4SujAKg zi5ygU7iU}WA{SCrS@ltTo=31tBoZ_4YRpJC*PL%@yL{knUUjtnK`WdAiQH4caJ8n<+~ayrkMwZ`2sDRVHwracQMmdFAF)p zGcnUeu%*71f&31zq>EhEKye9c-aI!MMaqXql#pc(9!o)C{+w-9KX0rLp*(BwMrZ2S3-sbK&;9Q7JzW5QAA|t zHVGXdz>w{j{qZvoRLa1bX1DC(;)FqRd)EVr6kzxMn|3t|YgSE?@f2ETZjJnqmA$)U z!Z^2CN$DoJW56k%-d)=v_#&H{jn38vSh`V2iq_mFE-!)2Z|RmFEQ=r;2=H@{I^nIX zFswc8mE4o?8}}aD%pmJ>KtKHs@()mR2{q?&)(Klaig~wp)PKx<}yQSgw9)$89EIb{Rq%Je!{u5+4k<$wL_y7bhIcdJ7Dbn_v(R83s5{FT#t8r8tj@R91X3Gpz^AwA+1z# z?(Hxs2!o3z&fhkGp!#iRQ13r1_iSroI7?AJMS7_h|4ow3%D@;y2W>7cB4P7P98Pvv zmYYW)cX~IHqR+NEg@4Ia_Xu=&4H{#rB@@pb>i)=npR=x~zR-^C@*&DE^uwk-q{K8$ zz=(f$<(3L;qk)fRN8N`L=)ZN1K)kwjRYUi3+5uD`b=v#}l+e5tPDiZa zdJarxXNctb@*-DG*aLZ%BptO{2!)IRv4_^Y*{AiM#khlk)Fz_$CKQ>R6CQ0Hh?gMG zZ`bK@iUqHT<=jBD)i4AnlnS(Q_NIJ*TP(++9@p7D%b}2Y>RZ!%dA~y-yrhQBGl{PW z?dx9n(kfOW-q4^{PPa}MOfMjIH+-55e)yuP<#17`zKIk%pbt0#)v(UtkK-$!cZttl zh6d>Mrorw^zzo;r9Je$#}h)<=MzfnZ=^_vHkQem|>BfnY8zx-~zrLUGa z{`*3bkOi-%>{rZV*4y5}!E5+70MJaj0h!@_2uy4m938WN4$h{Z*Qo#ud}OhZhba9_ z#Gq%Hf-EaN&3bnJ+b*(|Gd9D!;sB+fEz4IjJMV7iP+5E;MN7GUsDh#Jrm*owVJ<(x z04q-{yvgxX!SSy#x`I;<#Arr`)?x(FzK~QsT^#B2<}509I_Ua=C;qRZnV|} z#il29jsK7!6v-kY!Kb&Cz~rpXtGqv zqCm(r$)6CI^au<9Uw>d+W5r5Xs0W`M2km@eAt_pG9tG#T5)BRAhfn)K_#{a z{qPu+o7ur0JitC=`vd@v;kztJ!+4=R_BS591KkytX2rQPs{yTNMNd3Lc+`uTOz;t~ zda`%wC$w-has5uYaeN=hkhzm0jqp-8_0*@ToF9h6fwKkB0@rhk58cj$%k?t&gC2AP zlrm(lO&tS#d)S^hVi@yQ5uDcHxF|gUr!@EQ*=EPcxyR<)hI;<2J;R37N&h)dU717k zRyBa^GpAhio&sqN4y(?pvnkxQ#syF<_8&*6{NFJW>1cV>!aT^)h@9L*N(1#kQ9t{L1%oH8OVSwp*8tw`c)w8QYE*+ z@9>vyANhgx(_w*4@XN%>2?uDER=O>Z7(4YDn?7a>gEtNoOaOT{P$QU_1ejHQ1dryV znf8vI=$l-mhTv@uCTX0GN(M{^7AuA*M1O>ZraIdZ(j0{T#5=bdD#08f78{g zuFp$a)<7cu(!>2Nt=owtQNL01{qi^8aZLY;_sVldB~z_hWrvq-l_NSgO@|_kEskBU zd|Dm<{8E}J;q0vl4G~J?1i?D>e89C*(V&)rHD&ytwo_#$<(A&W$13mM1DC0$>6Vdt5*;mty^J?O^T57sQG%-@U z#?Coe$9{P*pVpU1K2)ot*G8{d(x(qux6tFIsVF4t&+P6S;A$P42w_^2x9`#{_5|QDMhs=U%TQpkuMg=_})BK+Z5|*gUlDv)@!*w8NF^mCKvPA zX2}b$w<2=;zvb&v0RC?HpY)IGMcAzuE7xJ^>h!fOjCn4WD%_O*0(ro$oR?Y_^TTqC z9#>bv9;pS)HcmS|#=S)JyM@A)JDrMkFN4yxYU(g5$~d`{$jaAF=c%3=3r92hM4{Le zvk;yz`szY@Iz6TYS<{-i8%X#AF*L2f!&jSAOkdt<0711hxQpVXHrX2 zDbb*Ts61xag>}n%W(2=JI4^IJtU}#xs>tpJ+VVDCq#4iOh+%}Uj#zNm5Q0C;Q+kHr z%fDlEGh>F@wZo^l0I{HNaMwC{pxlOX+A6zDDq)9$xQ3B=lm7D zVR0cm*InTuj{PYVmkr;BP<6wwMwNN&S22#c(8#@XzN^~ka_aBcAoG}4R%7dG!41^* z0_#_~onG?V=NbUB6L?U)C{^Sc$BRzcCHlBLu~)TM*;_02V&uDWf(mOTM5fA1U0gY; zzoI{Bp~VW<<6~BF8X2N;NO2+A58#6m{$+T4UJn%Ys|C~pTM&(0Ms~IB&r|20Dr>^5 zc-TX9Dbh41-WKlEN|cDzf7;K7-Tdq)3wa0$nXUdG^t`@_jt6@JqO5qYH;{*0+&+$< zU3Xo09I#g(TS5tYPn7S^a^M)K;QSOdlX1;eU$}Zg16I9CfiCDpJw|&glSMCx(gl_o zGPyDoUw_r~gXa_T-wJk@=NMAAKX3f-V_rS>d-&XXWZP$f>ko?Rck2hj{JdV=Nu^a; z-m*w;D3++s%$k+e)C~F}Ub>uZk%GR|39~B77BQPW?IZLMzlhy>;JmemWY6tK<-CtG z0@fL1pU=!8=z*C(ww+6VblEfQ_1oh8s?~Zy3uDkVw`d^DqP80=6=&o9cFm1Ny|LPJ zdA+t8@hF%I`vBKt^TI=AGAY?;^uRG;XybP~H&#yfT{stuME7(IVGw~LN;Qg8o`U7~H0O};9E?0$RNz5#n% zEoF)(q%(FWxxQE_rSMM_%dVoF@`IAjg!h-xGh=PU@_#6d|70|b$2V(zm=8D5mLJl> z{0p@mP`8MD2)|?;io7|vbVPWg}=>ilFPqn7Im{34q1Bed= zQ0E&l5Nj}i=ZFP_pMk4CJP&DMLG~fhKk2Ykg^WedbDO57^tO0##{mn?L{H3 zLX$FePEHYv_XkdoLIAK5u9)v0q0^bX7&2xZy5U2c-K>q1?6S$LBlge8t$~^+q#UaI zoj7SP3g5o;2hg8|!~xVj$th`=)S%O^I2i#&!1FF5BT%QLXIj@w zCba>I+<+jA)czH;Z`S-ah8tt+uI7^lhR8}fs0$bAN7lv-@esojPnvV~+rJ;IztZv` ze}d}ajH|m3jdM%>A>U~sJECDrbo%qhS+J`9`@fo;>B}!{7e|c{;Xi(QqBV2NYise2 zx4@4sRHTxrkpDlO?!WVKOT1n#zBXs@LM>7!=ljgwKv(&Sih7a!{xMS^uGFz#pw!kz zaL}$m3v{^K<;`z=<1J~;csp^czUeG>A_=*K(=jacK~i5w(VvFQ*` zyipfMSFdrAK>R0J^Ai`GeVUJBll;G1L7s6w!f}X&8&V)wPe?M@0g!#OAjwfUmsZ2Xx)}u z<$S%)DYx_BM5_kTy}hmxU%PbUh@x3InaS%;KhJW|vNp(4@^)*oS28N^V|$ zecps0o7eqxBFe)8_ID&G2#qdwy-tgKT}%aR__tS{M5OTYZ0i~KV2yhV&m}7u*X6hD zM}ZtP2ET`Ib&8Qg)T)W;Xg*POM;;ThWA4!q+ZSYgVPo_l8#be}fbBN_RqPJcdn1G75g2sZ<(s^`y<2Slm7bu6r3p1j$TC za1iwmirL?M%de0f%mBDC7n1QsLEN}hmpUU1I{XC=?vrZS7Y8rlI_%4Qh|0f6#7J}F zqvdf?JI8hCc)Xl0XY%tlz~{=5S#oA;e4#v@tMA6!z-9P#bp85t6Hr?Qa~#!{u(hk{ z-MmXriMtLERR^S5kBx@v4I-j~`mN4ZM?2@sEXejizyQ#_2ogShCfu*K{DyD7BQe~z zaMZBqCd!s4Z*sd}M-SanjN3&W6PQ^IU2Jgtd#fRWV?=KfRuobtb_Hd9PS~>?Ehj)a zsL=dytJ+A2T8gHN`G=!n5|WyoCVe9kGso4}z!UYEd3=at&}gh|{gzET4d)&$_nve( z&0Xqp#iuCc@yh_VP1h!1nXfHwNRF+`x<>B?a4yoL_l21rXSyh3IEM96orZ%bZ-^|( zVgiwQ<%l|diftqI4!3T{ZzaAgm^!;{Znsc5BvFS|3e5#Uy}UNXsPj1ac=O?@?yi1Jh;!0#jHt96=F^&I|^W7+3 zD-^L7S}{ayy^wx@us6wp^b5}aIMC2Ge0hR_m&B9{nljUIv6@{heDbM*eH3;p@ROWin#INJaAontN4mM;S_!J}-5~u>3lIl(_kguwogbadv1YM@VW zsJMu5hg#O)Y7whb7SGZ4N;MVIKY{u&zCaEpGm62kaMt~4L&j-NKHkbL&?A{jmf z=|}FDYsj$0QS$@#MCZ8giuu}9rPk4c4agleHhyzcO$o(Mq)Gpv&{W=ii{Ny+y1Da% zK_E*>r5G1^w8nENrD}WDs3PcDFw7C9~aoQf} z3E;cQjig8C&Nv*jikG9@#-ja-YS)4GcH%H3_LlaVBfV;%%6NC8Wr~ia8R-=e60#=P z3*yG-gdK9)%)ba<)k_4kypAVl!=LI1OSfJM<9{aZL-RXWUD!W*vFU5y%a^ce*`QdW zoqm-tWs0A(-e&N8ry5FU4-*$+f+Ip%r-~E0k&1;M8}qHPnCe$04f5^_r>DH-4&^q* zYXY)LrsP@IX}+CRi`f?3&u6(|xu1AqjI5n!JWOUlqGn47k#^kk5UZMni9?)K zTo}iMf?($!|M^ZfBfKO{%7pHJoE|)<@+nxw2#CnJ zNE{NVFy!M5R2`X6pzFRTMW@y`m?v|@zt1-gCNKCNu`Pq4hObBWgqUT&~~4D zZzxi#X7wjcrZyg>)G`U|^_inrGpoAYshrje{|I|dCe1(C`Tkz$KB{K^d$V$cF-{sT zymB4r+5{3>_Qz6iKN*1k{Sjq6?w#>*sNt;f!aW+f*?3-}`}O+fV?z%Z zs+?@bb`#YuJXTtG*+3SA&6L$RF)A~vZ_!7rxk~KZxni^8B?mzfb}KGA3Yv=}`5F9#;wW)tQ3n>g^Y=)lH>uvoUhYPxtjwOc zy<5mF4s1+(GEtf+E!n}peU==y!QbGPrjT#-8ED<(qOvf+cblICQ_Sv!w;_~I5i&m= zDo(w(XJHG_Fd*dn=S5RrUd|1NnKh-2U*$?XfQ$uqa3^gaTR(sd(#^Es_}Km*jO^z5 zG;%GD(e0CN_1?iTd9=d&a+Zv9TL}|nH?B!!KXJTeE=qKCH%B1*yu+$2Gxg+>o>O>= zMY#`TKOuIJ6@`!qZ!dy{^S6{P6S?&}ygME{;mU?2$_&Z~+8>CL%(U@ZDT(?_$y?o_!(e+#pH!|lvYRktZ=h`@tI1}l1yrvo4xpHJeXz(g?(1vvT`;M>v zkKoNAJ^EA)ef|BEfS>M*6RU~uK};5YdXb%WD_S;Z(lW$z2fyMTy^3{x#qArkUsfJ_M%r zaG~&^{ThkyJ#6J%``yXsb_lG|Y`PSXV*TFi44kyy(-#3((J}x7}CS~fP=Olsl+LuU7;>-qH^#Yrn}1Meq-G?nn%g>97RC0#zS5` z>nZgHd;^1gi&Vii$_4j=)sf-R@Nml}C z!`qj)jjrcWydZg)CLHr^XqS^})bF5-_ovr^yu)ATX_|GZgL80oUgo+Y(*DsPR4LbK zA84@-!W^itx%OVlaV)&gUjAliE6Z^>VzyUSca79@%!ocxs%kt5?k`h_;D?e+|Kly( zfsc>(X{{IR;RNxC`o9y>e+HMIS1^#wctvgcif{FuK%p;getgDF0aH|t;V0#sAwN$! z<#3Ba<7nls?Qn|4!jJN~Vg06A1#nv)g)^VtM?hrc*@F+b>f6`Pq?8#8q6__%&VM3e zVX;B}C^u)L*?-;IKNqx%t|)ja=A;m7GI=nDaC4@2UqSpeyCWaJG=)uon<7}ZNXLw+lD`W~2o?Ye7{Q6<3)kT3^-XU+Od<98NpholHb?W>)(avmd_MIhMFWr2WMXd&j2APz}o`~@*p^jm5p7upH z891$=4xxNA4HKaH#=OLKHa2aWAOf?Hllm-xIK8U(*Z4k5qH!tGH~cRj(Dc?Yj1vUk z;104E-|#aInb`aDd&c9we~xG){pMQq!SAc9B$I2{hR&ywwd<{p$69m&&2fkJRT8s1 zL=|<%Y}*8tnhuwm4zU(-a^0VwHP)o1%7HbHi~a|NLTX`K)}hA2j{1|tSAYD4y86mA z3%<5YE%|P6pc80X;7G06`;J`Vogv!KS~3g`yPV#zt3p*lPdD$d=C*uyXs9L@Oz0I* zeLe~{un~`)45T9ooL%PG^$y7$yj@B z+0L~Y&C9k`eiz_}^OCMAm#T97mO~$RJ?lse?4AMaGUj!3Dm|xE$!Q)!Z)E<=Tb@jN z-M{DI;Q@kA4i&@GG>eDmK`)j&6A+!dq6@no_Ih|(CxS;&;60g_O(U52%Jx1f7+*&D zd-OK-xpHf7x8hu3u*!Pm?!a`?o0OaoneN3-krOS)N;aJ}vT3M8WTm_i<0<*L(s^Yc zzbTyG3o0xnQ#b{U`J|h_S(?gJ%A2M`MLY7bJRLAsuM-D<7zzyUvC2!%`S<22inz!S z0|Qd#k7PZ?0cfc`W;!w`Sg`m*7HnXfBbNC|@1WrCWY9$;MSN@W1@cfHpb8=6mff(c&ara+!F4Z~3so=-EBr;MBKnJN-3b z(5w7fPC+0EW_UGx1Y2!yd60vh$+djKq9ITSzoC>aK%w^O`zg6&X-igRsW1^}Fs7ny zOy)I)LhCDI1?A{djHMW07@&jGv`XrRe!R`uEPra$to)-Ffdhs7T#R<`s6bn(G?)8V zFrxB-3>rC3tcki@!93=I62z7u7Rn|bxt)bIb74FGcyd_pN_OcwU=f(Gpj6;PKj)B^=&t?X)A)# zTR5@3&yjVR+oEmBZ{uG(V;0nrh3o0zQ3>~AvXpUsdmFwjEB+e}UEl>!zIEFqvlHCE zUll-l_8}AF@qL`Bz)4Q6i3d56h2h52qoL1)IWZE4Xg*WNd6?bk*OBAv(IJsP71o@k z!>gh25G9QiXd_5ji3rEgNh+%E@O5*#TJjYKYJCL;Xqly3c5dwc1JbJ3>u)q~UVNz! zC;1+-URErHD;7h9CQjc8n%V)`)Px<S@n9Mh4OcEXjOk# zN`qY)x*FL%|2H)l9H7%{_wVd@PLd;5Z1})q9+-hUZvQoz zrT&6rgfHp**aK%V4f6x3@%EDjcO01-Y}^}n zx8^srfM@b^-@WK%`5wzVPH&-V?*j6K2tQc`fiiCt3uWU3>V(BgA+hHbzZJ)7ESzea z<-Gsa&;{%%mHSe=N*xrkAPAN2P$T(Fc=LC7{df8Ny5d9uikwoqm-8boE++`n4j|#( ztXQ|%Rs9itVrM^_&`4`KopMzn|GDP-g_AH13YgSw zqb`ZLy5lLvsVTu6(>paZO6rIaHq(k5T$wLOPp!5_lTfzh{P*?`6#*6D_VYey6+{Vw zBLs*zU;;|BaUC@#j{m_UXovsBn3&BV9f$i9b*BPUYT^6EMZyI~#X%7gv&|cf8%!Tl zf|}bmd|L{%ns;lN=+|4B=ygtq#BoM?xZRhKhu!*cBlVa8qyBXk)s*w~GVbxtDH*ml z_N2zHKSkvH?=2Ne8+SI1Lwkf@y+m3;5_oac@k+*^BOPxiW&Mf~K3wlp-}(%rDpvu! zvzoQ-r+kGnqCm3QdC+141=W;aK~H+_ydDc)CjF)Iiw;nHrs5?+6Z>L(+fQXT80c=S zxZb=(Wt(qhvBS+7G#mrN_p%G-2+FS$BJknI6!Z4p4W2REEI;QX`6Yi&h=I>G*7C3K zmRm7Wnr}h|*~^i)-@S+*4A9c%GhpLgUTESe#EifUHTmzQT8Kk|S+Dp0dzOY_cf&0b zX@-sT1*Gd4G!0Ei-H|o7gh*eEL25TD@!D2lt8ZtH#Og%N>Yw{G!RFfznye zwr2QH$i&IG%8UnTFv=jza9afjQuFo?8}X0tHnS`d9T$${<`NIU{?p~5I$zTqYHU`JE>r5)L(Y9NQO~n)lk`bfa%%RHTwV#kwNHANj9F`t zQ}NVgAVdBgqb!n`6ixBPGgh{gHVbJtNN1&Va2FYnL|%<|c@g%2x&YuB)8vQU)o4|@ z)xK$)5m7Vp)00$pNPH6*?PI5Z%vV=p+NUt%aJ|CxHs0wNp#;gF(Z(K%czJk)BXIi| zd<-ace*dqK^ZHdoXgYBi*fy%CXWz~Rukr1n@ zV1ynUzOAiITOnsiv@s(CLv4M%K7U#X%N|NcD;p{UvP-T+cB4qTTFVq9+(65^ ze|?=Z)Zb*y7UBiFgnb8vAGURWtLkYP%CCp3s{gx+bgiS8A6XTE4#?1&nG^_08fqK} zHkUk;2)CzNRGy`&C?Lb^8j#I;QSe~})7A8(*F6tGGIhXmojiNIH3y#xrGs5C3-w)6 zD8=cI%0ni__jFr1`rV0**n(J423rGNjS(Z>_m;>%)ux{2j6HK8R_v z_&t%LNEiEOc2=W9S>aOdDF_oOj%)M0-Q%V<0ckO1>f&n3Y#llXyPYf{43yEbXlwMo z4z`Z-K1K1pX|I3JUS&>y(Fw3+SZNz2BIb8*ZF0MO7yGer@Dj!fh8ye|gll(VnQ^3y zzys&buN(#|^=mROH91RBMf%&_7o#>vo-LeGjDJGvhJ>DSWHt`Q3T*BU*fsOm;jJ>Eim1*CUb;}Z_xbA~(C*zDVcJrO)jG zVP36SmCArIPYPNwPsb(Si)$MH?ay>_iYbFP(m5V%g`w(yd+02p`57z}hAnq2Xbw#~ zxTw&y@0OWI&w|a2ptdea$%@S?lb0r;;+Dn5&22VITU(D5cb^$-VA1I=VikAV0WShb z)kT0_RQ^p-3c~wwl#W-!r-2!PZ;?QzB8V7uUzFq9hkzIDl;rC8x7UQ*;|$W_Mf`wT zmtOEUD?<<0Jm0fC{Wa+Xno)M2a6f`F5mQ~-8RfJbTv~y9orNnEftX4hK9Ssw68Ukt zo{@?4PCqXQUkDbpW?7?pm3NZ6t3-k0Q$56Q)D7ZnCzP@X+IOP_&nmtxPhcb_5LaT_Xjljq ze;pTD7`?*Yk6a;p=GXca|5cB)iKVQ#Nc$FLwO*O7sY3Z_NVGv08QW?+$Dn>}(e^iJ zkr>D5S1v81nYJ{vhgD}A{5?>5*>XL&sa19R`x$2BBEbK*Ic(#ifA~n7yCap|Af-!M zMtPEDj8Mi`BX#GBMq|>%@`Bf_Sk^n1a{)#g3QMf!3Vm#sdlMq&nQhwWc^y18L-3nY zTgv(~9>R@TT9uQY9p$9|?IF%DIHYgI2&_G=^lP|?&x=JnYwpo(2n}{_Rz^b2SH}k1 z>bv%xw>zZZk-W1BEU<#X2d|YC>#-JO9J%M7Avg2sX6Dn}6yo_)DV~N z`erCd7@f4WFP3Rg%dBa}qV@CFZi}h)r6mTrRNhD3a@=UHp7y!TOiT1}$0;vB!~hSx z{1pi)aqtm21s=ROKo&kAh{<;XrA9EB#T*D73lL8KW~BblO?LNX6HHg&E+Lz19&&0JZa{CD|je`D6RSaFM~ z;143{b@494*`=suucpPv3EU`QvYF#JZrMv)&P(&t0Tirkm$oY@I({rOGK z<<{BdjtplBA5MMHfs&0G$r8G*4ZqoOA*b$XDfgO?UD}8A;Ov%p3Xno!ms>t4*&^03 zxzZJa^XP=tFN+VJBO!YL$)S*x6CjdpzM4P$;&4;@2BVJNPhEqMffW9k6qy3dGQB(6T z4@930_vB_TIYl<4<73#oKAw4%+|d3uW((?UQBByW-&<>qc*+zFhT+vBq79+e-jwmg z&^p41FEZ4XCYTUa)w5j1jntRzKPNrCP1nm(SmX&``#-F-BIj23j>M*D(7~A<+M946 zQBfRc`6r3$I#7r42ot+ec&^0vCJAma$j()T;O1nPzFxj&y}4&~ZJLf5cn&O~JwTIP zZCSE>Xqn`E?vuiy(s``EeFH4JlV-`!ru??YOk;-*|*A?Qy-?|FO@jq8%8p-P8)UOMbTc_`U)u%qFU2!V;6l6@Ebhj41br)QqcVgt6EY*IcUd2J!r>HIkMmmxpx9&exDYC`uctXt*($kKT^={&OjM`FkZ;`NL|a2aTgavx zr{l!+Y0Y#1Q$PCiyiWuYS=#5>c9JyA zL56%RHpgnTTDMCE5W}23W1$nx9Jw68@<8D4UAzl=IakpI;7Oft)}f6F;YZ=REb+rv zKg$M%vg;ujXBT2W&^E68O{}Hf^!yf1JC!71wC_s_!A!fnxWJbB)SxZ<0j}9f`%^WM zG<^?5YXRsa3-W~;YQ(15>}5KbrTfDC#PBPby3T5zfUkIs+$=oRuJri{cM#^cZ5;{_@n}KsCeN zvCNHwqbg-be@x^TFE7mp?NNImdLdk!99n0q4ffl)xw(Ju$h=MP9J1cQJ{?*2whw&# zh#QHO$3iI{r2MMu_@?jejvXG7>3yDM)EkBCx&r&Ulo$PeCN7MKbw$5EC6H)OtL8_P zpL};tdYzBY9VthwwYIq=gWxu|8a!&Qi;@OwP@F=%FMn{?m)A|@MJc+%?Ewxyw z=XKIj;YZfNBZc-xHzz;I;WQlh@p@PogM9PqC3lSf8v?-sx_c$3b0cuQhUv+kW_P!T zW$miUl{4sB*JoAN_L)CjAnEIvbtJ20_>LQ!tytrBpegLRu^vIXW{vZ;?ApvLUT4+6 z!X8v=@VEk~@3G*7WyP8|l{`DYdIiDFUg;vmO&Hs_Ac zmvi8AO6u!hA;K$PW!J)v1FVsHO8R&pPUs{jqv9ks&dw4H&<3jE{w#sk$8`eqyS&E^ z5tZ-cTy*c)ghDH+4es87(Jy9CEGMNs{TG*&?gEi?$Vz;|uC2REkO09r8yjJdI?>naN)MY!tb6wPXG=&sX-A>u`wwzTH)8ei#d(gPgC z3*3=8nCb@t;&o+1<_J|<$WokT_Lx0v39bzFIR@JZJlPP>t?`7j zz>Fv9b6busSiR~OKiyS`TJ9Sw^4Q`?NYxfgKAM(KIf}5Sr{i(dDGUkSemRne(iGGBE=@=yruE*&bh6i4@Q3iPL!^ET^l6;eF7;KSI|}MJmknA<>0W2+_#JhvU6CrKooM zKcfVUK{HLz=1JEKb59ZNtnbrFvsib2P`?U#XiEf^_D-TAH&5yp*PTZUc5WX%I(Cs* z@%<$`6-g~QrwFI5n+`1_<0 z^;F|(KW-~!{gt9m>P~i=jEFs)mU=^nmdvCdq2DZ;X@frgo8IR6>GhB0rBKIRyk?&6 zF?enn>WH7OknM+ie(?7>QN#56{-*_?4gE8)e*JT5&Bh=^yo&0w5H*~J{bP<8t{=)K zt9^xFk!SC6N=uebi}=uc19fiOI-2YgwAd4da7AGxOAI;`xb}A$pJxbF%y`YLJ0ZGLsr^WX7$GjYF_Wy{HzSP2Ixoz+f#H# zP69%2wfzr5FPvK)tA?fyIOY)DqzShw=N_YErE?V@-OoiT*u6^_Edla8cW^frK|H-4cQz z($XOZ0gKt^oV~Ao zMQ<_uX-tG9bP9~xdT7!zHQW@$FjUR{!r8s+1_xAJTPTVDLEc z$(o-QL^=CK(}vubdqaWE?;tnXSvQ*`Ce_?(rOrBpcNNH&tKsU92C95Dn>KeUxVva3 zUYE`ad1$!j$WE2|^D5)=O7KVXx!RA9AHquhlKpIK3o#>U+!-iL$G*C`+D%zFm906U z@H?&ukBWWz>8ai3uEBr{+R8ma@3c#IQ}xqkmovlGJRdVBpf~J3mX>opGndB zZ|=ca)k=5ac4FW3M1S#8y?>v>*}-YA^g@+gyUk5u6`>i~$y6;LRwTYIQ_<&8^!r_l z#0cd3lpvz9&4bsHFRkoSlMe;zlN%*ocd2@Z=W?SK_>rHVVorqj;#n+>sjPWL92Ua? z7C5Bwu*g0bADFtUnJ?cf&Mg{I{Hl^Fp_$Jt!tA2)_IsqpLD8gq1B*gx>4wU$I9XNn zV3Dty7+KP?uK0@k`GPJGRR?H|JbD@f2}FOI#wI9lm#oSMQEQW0 zv{l4St!t#KGR@v|D`1q4mI%Ne|52uP)U4RuiGkYFt7d|CafJ7C$prCSAD=3RF^7u$ zORb`fzOnS>nVmvfbPx@>)bnvY;U7R)Fce(g+sckZ{$`zL&^d3FXi?_aLVVN_Zqu?R zYd~)_Wa{TX3hh3T>pp1`RS6TVV>Uz<>wasVTarVUw7(&|2 ze8otl?~-^V$+c0f-b*0(>VX>j^_cK7bkK1ZW9Ehr11vV!qsb~m2Yq|hB*Wp`7E`Lr zJq+hJR9?aRaVB0Nlm0O@sw}HY`+o&jM{?zWG3h&yZdi#fZg&IwaKi!ZODTx3(Df6il8UORs60>Vy9ZLN z*2^(M2c$VTW9UU3e@7wj={Myq3HUTucZUtw?~iX2u~Bw&R=O})h>L}Ur96|Ja143Z z@yFG3#Qr$#Sl!RlO=00Ly{*Wn7MRqeBBzMqd*0u8BIvj3ytx6o#ZPO{^y{%o=kW1~ z*}4h8#>COi4?7&63&fCkoQGoe{pS5>O|Kh6%$bHmelnDTJ@iwb^$<@E?}EcUhLe|C z9quTQE*;Mu^A%mps{KA`E**0_ov3(@#=OOc9fE;%UtVQqOc4=BkipSW^;kfKyxr+J zlp56U>6Kw)27k@$kf)%41#Dp{Xq^OOja8U&2M>xx=sycKC1aFlsAUGtr5wOfAPw_i4rR@X^pT!jK|cPa3o7y}UnT-hf583IVlMBraN8~+x~GMap8cV3LhG6p+nDdnh6^n&REhuBEYd;FtY6>x%Syf64tTjMSzQF2pljKZS zO=)1TJSMpFVTehzfT}rooFiKl5QF|Zy<6vxC?xAS(;r*M;gVrdTs zqBbN!*!(x142U2FcZ$j|PLM#%CGaEoIzZpMCWVVDmOb69TI=@u$InNpZ60DPKEq3% z8^@aFdEo$pF?a>b;#5;(aPch ze#4BUqXTX3Dfw?odY%0Qb7C&Utj-$P&pHG(BVY&Fy<;5p`PD`oxQ4$yY3ose@5`lI z+}^almBReA@wuV#D%2De9Ef@07)x^uj*(t@KoM}Ahyo5sOyN?QMuvwd@J$ccIS!-g zPuHdD+-cO=9nHu{-VwofGMt=`5>+;cKhb{M!tJx(Mm!ttsDY$}b~-urXw5IF`{)zIA{Pi}3gTL2aBnlNE}ch#o#g1BuuN6GKpFQ90c2rN?D zRjo%2#Y%#Y-no%|MKaOweNy#JM$cSrEoLPDR$PjOLu_63&fG{tE`GK^@bv?d%hg0> zSuHrkg2Ltm9+34{@%owYXXa_GDy8CEb3GfCyt9PGm(FCGs*b(&}5p@M~nPsd$P&5#H(sG(FNP& zJQq1Tch~l^t)GqVHfz1wzFWRyU|@jXiCW3H7AyzJb%eLr$gZueO+`z4j960~z zV+z*0-``8GQ#e~Gg5!3iOT$R#(!rgeGKs@${{xLg8DrTZbR@-Of+@W=V%=Ur@bmgU ziLmf2SOHhn*UL2+81SR>hfw9Tvh(Qre+7n}LhrGv2s3xlw2! z&1AGfpmIw$MoUPNhL5>?M2=k4m*x!7xe}(Yk$LTJ=EQR}a!&QU_4sGbh1Dj(C80Fc zdoqyn%9VENJjb=-oaT3qqsg=GY!AhwnB_%u>RXP#G(Y|w(B?B3(% zOl*W&M#8sTKwer2boyUL3!o^3`cJdV&tjweeQqcrYpb97HNLbm|C5Qy8l+-rK(k1g z-?JFGQqS@Yp?6TDp{jeyFBtw9SM#fUhWQWyxd*~Mshq+W3b$O_bc2-9w6h&E2){va zCBwW51nnWl%I!%}N_UeKo9&GKOu(}pb+<}hjCb~VxVBYdgked0FL&PTGqis%uL%R6#vJAbcrNms zZuCEJlvo(6{EbvtwR+r^#z|3paBlnuY;>9h924Q~DORGI;60!(6TF748AWtaA+ zJ@`?%aRQKt8?O1ybSKCIqp)-{=krA|TE7drJA6uq?S1Nc77lXZ)g3@(4=4lAKtX5u zBL$6(3^mVoCJ-eN_TaPpNyzKsqhjmM5ih8kpRuK_IfN$vD zX0fZoW>bRjtN(&_JFhv4Uf9_pV6d1a5GcTeY0#BGlG`Q-cm78)Sj2XI>EJ*NbT?gG z4u4pUMwB1e5Zq2jZ_M$bCi@&cMaj6k-ybZ}jn7acE-54f4u;5MXAKN|I)OdmJ=;^^ z)nnK2M+r8xs`Z#3Eq-${VlpW)i-t=nDYuW}phdxbs12=t-h86NZXYA0tG-m_L&^8X zIwKSAno6}+j+-6vJH}RaprWM?iHNDfE2sC^n%UgB#gMhu(W}3!M7HtQDi5pw7S0%b zuI!D}Xv-*2O7hoaZ}@Zb-KPkV-;>bQ&P223RTXU$lv!Z&K_$0N{+iKkfj7KYM}9ls zu;k$&lL2E;QY42i$M&xb%cvSLbN##Wt*Glc^fxTHYZunM02&T-#AGr`bL3?bv7f{r zb^j_#tc(;)Z4#yu{W;Vw7b_qjl4roeLveN_3gyHeE<@1kcH|1RUH*#FbP3sv%wZXn^3Sa2jH~lln zyS{d#FQPp{|a+@`Rb)55GfDCWjP7|PNbrEm zG{=l5c4>?=>e{;T_WJvx8?k>DoeXPR&1Z2jhV*)@8y2_?bYziAIP+t@#;SkId4THq zfs=-P9M3=}0-?`I)Ws#`K3Ji$aOmH9k(_XZCJK}JxWQF>H3vKe0ydNz8oj!~v0hiKbjpx-&MCGSQ;h9MHM7}spW^^Z^Jd^&%- zm@ozgxZwadWhP4K{~{cU9XaL^sNat(m|`4Fk$z%90a{K`RkPWb|em%wnFh92@CdCYk71HfQ~dJbVRV5eQ! zwSRB`Qfa{g4rtJW@rfQkdK~iGHo}A*+Fob>n=@}xe|O{bYW2(DX3DSfdrg~e5##el zl!n{BJhps~Bptq0d)?6ZVtv9#Pt}y(M3=0OFl)2+3vnM|UVk-UnW6UMrx3X-FU5#$ zEzsHk>!YP5pi~V~E2^n8So1xi4W$EN-i_?Hep$fw8vx;+r`zK|weJwSCBmpZ`@2p7 zvt1W$)8&J6K(J}q*>`=a=Rc;}V+0rx1=7frVM+o|2731Zk{A{}y4mYl(4mwjUneU( zQ-T{D6<+|T*`(6F{SkGDs@P3}}H=UKSD+#DJ zU=_~7+w?N)YPtV#a>ZrJs_CtHy@qAe+k)gicxKFHfp2F8hsq{a)aVkyKyK`h;xOst z_I_6^Z;m6C){b4@c50rS26&z@H9S=XYh(VmSZJ;8PyL31-Rp%{ga_za^jQKa*-Als)G8L}HWKkuRj8Q#>ZiPZWyCsfNJ+Z?dYAuO zqCv8!Y9!>>Ft6S1p4wgw?DjwM$Z^(P;lPYQM3@BmQkkq&y>d2HX)%b!!Kqr+~Ll68}$3bNLR0S#kI4m~WLrsx5`P1;1^jbbwP z<0Mtr#rU-^JAKW}lZd_mY-zzS6*M;Ke^t$)p79v+2*tTPx2eNV6a23uFQ>T#PlKY zLTmHl>TaM{ZGX`9Ip9DRXq6l-cm6Zq?Abm&O&-)15Qaw!0TMUF<&DDRK@d1gisD@> zT%av(_PK=oFrK><%-k4paJP03!z>BR-Qe0==H|5eMvfku)Xte9!`2o!Qh zr6Y?#clpfNZPp-0PA9Z2w~J)J$JvvjB$|^rp#B`|{;E;}Ug~V~ZtZ2koFxfIvPf9= zkdK%t--i`XGnct`^!?Y}EoU;x{FeNXTo8Z!ktGfa^_ObL9qAkua4L+d`?MI*ex zI#uNR_@&c_FpOICp{AF}m77HPbo9*aHI>hWJ5lO6W-XQaBm;%Oy>qZxNm$ zEMjMORFa_m^G6q(+X!#a+ks;5ik#5SRM_nN`vZJ*_Du1%bJ-L$z{47lXoxH_q%F*SuD8d-5_|stl=FX$1l>ak zJ_m|pgzu%^quR$0l3Mjf1HQA`sZ*XB&F~OArLC%8szmJ<_RtBxrZChMXZ0m^*?yg< zr7`FD<=JQVuX45askwdJj*%yYN6dX`vf`gDDUvlZEiy+}6En2S>*bm6klO#+UsThQ zxDB%^yQbf2kF!{o6@-;BWyrJcvsX(AnZz|Ll4n znUVASJ@;29-~dW$>~m+X2kc|90OMlXE))b@{|(UL7;Zks8t=Mam(b1WS~Dfp!Jcd= zT@L|RtrJBzT|9pqb@T5%(e@n}ql>VP*PAl6<)CibLwFW4F;*Oz0*rSfJC|)CNVDIt z-i3lAab5bR>S`%6ne^InkMY*`>)xv`qjD_FHX8#A(cC8)^bYbyY9dx+62dG2^PmI3aZ29{?lj@c+C(|IFN3Z7dI+M)~VGF2$b_kBQ;2`## zAasRb!KM89r0wqRez~6r*f{)Gq@dq~8G&Y(k~N<9llgV0VQJqa^;syvoB1Yg zrVcsaiaUK(Y__!&4F(Qe?2)S)}7$bI*0y(}n;GEKL(51~`1G{+wJN?p>JUCRh zk2pGGA9x?}^#ClUexOS|@W%~RZgvwYeG{*m_fLy6%Tef6{n5Gd99tAXK;Sv?9F^*9 z$NTvelM$Y#Z>)rts*ed<_uR;3&`;NWi))1w6@o@KB-K*buAjJkFP=Tm#|7h|!!_)(Z<+i?~ozkC(1*_qF|)UQBUD zCj~xf)5M5pm@QuEIa#~5kyS~2ah!|%UHU-R^_M_vCimk~Dpr=Nwl#T=nQ!^HV*L3L zy>9VsU+T2tAfTef?RZDzLMJV>Ck9QXt;^nvkwBe1x~nPRvRqbJ(_aYIb%7n8h=zX1*;M zueA5ZfdfX+zft#hepmnt1F$}DTl!gkebynU+|7xDt;nF=pRFt7GAj)?<0Z)5LT}WR zGrHX(HCVlY zZDawQy?Xjl6UOXc?~{O;L2CLrOYY+oyz8Ej$ z*B`DwtV?_4SJk4}Q#Xb*#D5xe&&`^z@#C2Ke`P+CY zHF3ZbujkDf1g}a)y|CS@EL)m4a^`iU7NnhodYBN4QTDZ>N;jq`%Bwpn)_5vwu59!^dH{Gx{3?I0^ zCJOC%7qH<8ZbeRt&%lyA7lgaAv7cqL0@CtBYM`tKGK-Q%;5qvglf+{*SuyJKgHS_V zwC!}(P(zt&R?NA3UwVq7#CHe=g{6;a;>D#I@>1%H?6s%ork58@{A+h#LHkT~9q}Ih zIUJh#cq)VgVxFp7S_T%7dkboS0(Z5gZj_b50k{-Os+FbvILRa8Ez(e92bw%VfCi+)PQmn-{E!sDBTe@$GSEos-ATfaEnhumUyC z))W0^Fb~G9T&#z)?8^dzh|7m(`x?{p6$Brca<`)2T?aZMS5OvCSz|}P{+A1Y47FF^ zfQfqagJ$x(fZ$2K5ii}JuS^B40*rK+KEX8X{4+7S?%yeq^K(QD`jnJ>!}yZLP=P8* zUX_itv!#X|yH4lksrvop#50#j&DQp_Gc&f5du%F!_Vvc2d#$D-4ra5DC_t1A z6*e0iWYv?{BN@6@_-^O9VsOKfSYs*lr@BtvQt>fu7&`wyFcvHfPz@LSPda;|zbj}f zO0vBRw{>aYdG(v+h5Vjl0wlrsi^U4_gWj7G0vGbP#m-Msxfe$R3Nz7jg;Ma}zkHmA zZc>ZqY9haX*$N}UQu&D4kSCa?q+J`v8g%0eHz~wbi;D35IU4oYR<|2MNxa)rK>{(Z zYKHg<_Ld8!*x@DlrP|pD{4W_0{4{r0qmDV{xa}(%k)J~@d@E54zMUR^5&WE7FXWy+ z#!RL>s_^hVM{_lk4{`Ik6*BT~OZLoduAF;`%mj$SQ`h9bwKEZaK8u_HFIT=ie zd0rqXTr!{9Fz2=8ZS1IuB6_UM)~DM``pss&s)7veRJr?L-zR)S`Ouft-zj244bK+du&5ZQ&*00BFVy>+qhpt|gAPpnBv63j z@~B+6s}3i`-3u|M(|1WxR;JG1ut`(KRs*>hE<5C)qQ`>+&jwD)3KiC?=7+g(^oq zG|S?`_<;Y8WA%04y%Scx10Lh|Wazg>P;JLS@>7^h^$Sd8IUa~~pheddB7@uWrQtuR zN7M@a`Y9bR^du`EPduyFHthOwV)2eEX60EB*8_W3-!jZkOiI9qy##xgpqtKl^T{K1 zdPhmBM;-BUoIBhIAK88SYj(u7beml*>?{6*Pf~XGB&7i5MT=mr++;OvQ;XbmJv=w% z`3crT=rAo|gCTvr)b82HieNI$;uIfX$O13wJ7)0UATEeJwSa*g3f0ZQ-d@>*+`F(( zRsZv6Wh)SSLJ_=Th6zNQN)bE=9wtFn|L9O_R<4>$wH#YCuyr(;T%)D8 zc5iyp&EpMVsFC+h zk?0YqGRp*Z*;Rz;v9&XIX=d|-t`B>!eqd&XO8oK>!3V5(amJ;vJnymy*LeWJV<$ullNa!1HBmOoImVJ$EC`*6bBD8|v} zrv!=%Xp)1PamfqnZk3#?m&i_}VM|TmCvNVwye7q1?B%A{l%`1+9L3za@yF*7bAuG4JAI52t=0cr zsE%5lB;R4b{4!JS37UvQ-R0U69qRV;gMPGI_Owr<8aj^1dGd+& zOXBv}b~oF)l;!dLsLKH4B2MnntCsnH#4ZkL8yawXMx%}V|5S=IocSV`R-=uns74fe z(K3hl_Ja+5hi3OJQ>_$5670A47rq|rrdZ$tKZQoi{-DktPA{u7N=do3Z+wjjBq37%x&q~eoT3+Sb)7Uap zkp9pldV1EFxNzT=?dNgxp6XCkUE$7qViL4XVz`65fQZPH7(%Z|!);#Gy)a>AfySTm7^MDz{Un%M-h2tx zOhue(8$0`YcA~D=A3+niXk8n9ruIkQ^fH=W#JHNA`(s>WcFVW)SYdSETyDQS)&+>o zD-4V*d>O2FiE-u0?tDEsMvF_HViIKdXk71fm?Bv_oRd5atXj#q)8@IUTJk5or5b=? zGlL~hEZgV9+wlHX505nBz;g?1(JY7jE}ND%(^>^bzIHSMKZEw;2lEW=b*gKkr*>ad z6T?0iu{to5oD~i{uG)eaafKp%x+Ysbv^KVw$|^PassN4((X-M~!IlBx9g(5jaWCmy zPlX~4E8`J83(sDNpeb)_4l$Y77L}7m32`&2GofRq92MGFLa?A<-x`Ejtn}~xaqRWY z%KF`>hiY08A4_7qH>;3l5k=vL6FfkoFH!oi^qrkP%XbnZ^jNoVrH)bkiwe0@t#mqn7&h;!I8%6Vb(92rcE}ap647XBy$Vgr7)mn`+HN;ta;rPN4YVMd8?Y;!QlZ%Tquv4D4Lx6CxPaMD* z;IeWEj(mwamG8wU!<|$3tVT9h_S4&{&epI*zZ~Jb5s;vlVYPyFJFhrX)*WoB^hEcBp*V@9m7CT-vETT4t!;~>X19@#N`TjUb4!rsM*W{Sh1P5Wn`7iMe z2XVJ-2krPw#3+aNcrR`i!@UgX52MzOMPq*%S5!qQc^#Zrfua#Z{k&W_I=DdXUoLot zWrRu#!}${PzpEFOhUl<5JWBA@edg+~N5Ya2szssR_Z{cO^^7~)=|~%$Me<%Awi@os zG%Bgzw)e*>w_EMw`6j%kuJNY3CRnOe<4b4O&kR&@WcGF&Lg!;Rn6X9uMy9+XTFrl* zF2>V^9aO7!AfBo;)0AVfCK>bj37`ISOdk8)UzdfM?6 z$$oVQSWV#Nc+ES|+oz2+HdU5*jX)1SV++zh)PDOhj9Ifgykd)$!L;8{Cdj=a#~oU+ zQvNB?(5=$jPD#aqyWdu!mFmlo;~%JRzb*E3AZLJrAn@A6q80JHyXeZaJ~Vw{k6CHq zvaAq9!e%cQjzxf4{;rMMb4%k;QT0Tgsv7|)@3h;0Eyyy=m^uRyTWD3&OH6NEAvv36 z{n$6la?7E6$|^yhDS@)MmO&x^aa3pG-_;QNmRhIZe)pXXvNdcuvrcvU!}>SOs@R@k zN-D^Ier^NdYF+l?w)|?DDA|)xe=Cmg5!<7QUl$y@uK#=S2{YQA_^S`$#sVX(a3lP7 z`X{W&dzzj{Flag&X3(-`%rXDkpm0JUN6(%R?f%LU4tM~WRw#RuNW#Lh-WJth1^#^7 zpMjPsI)nqai8VzL`?coimpe_^InEnu=cP{za_{=-qPOxO=Qe21FXbjL1qc3p2+9c+ z+RV??Dcbm+2g*|xzH$EAP@|xLp=X-^@zmq`DQhu<>u4zZ1C0gv>AB#tp~}c)twH0U z*lR{2H5JhjB8gf@s<~KpFUT}T+Dk2xrrgh&L~Owj`Ql_p<3rME9gO-3cjHBC;htx| z?w*~}4e;p;BVn}2z3W}S+a2Q{2Dh0USuM{pnje^9_8K-nMJKE@I$Bxsq}2ELHHe$= zo3!gY$D|Bf3I^;`iN?LOvDrG*UP~DjTsZL0YE$wvrwPqNC?*IM>2q!QOOq@`&$ zCrtORq!9g~R^pQ^w-UvsxdPy@?&0z0=!h#UER0dU>a*0AdN=BP2quaf7yy_OL^6OE zSUtVk8HMX;)Uv#0_j_}k=L*PlYVia<)LBDWJ0t?sn%=_ZsLd8Q$(os>d&g|UI^I=% zE#di52S-+8)hRbGtz6T{8$6TWR$|ib-(Vn#!dim_!acBHGZ+Sv(C|6O38}IJp_*Ni37Ri@SaG4kvKi( z`zpIm4zlk{c~!X-gZ#H zh49aGKPL;oeWK5(V@l?bC767u;A#Gv$O3jM0AVS#=YTTVw$MI!)BAKOf!x8~*v3p$ zLbu8K+uCi8$&7osy*^s(X~eD+dggk^3@Urh?u7KAXn{!GRqxu*2|k&sEv`M+o|ex7aK-pbDL@yqqB62(F(97zKd(UQz8P@RFTF^SL_OE zzj+ghXMw~E3;_FEaCZQr;hmNicC*IebJR)dbBiG6ko6U#J-ZA`-~oqultue_*odCk z8L<=<8r}g}niU(=y@@K-e$<1ZqI+&-?lqA%OAXJaQ-MnY@a*)Z91=K!abNNLqyNp^`bmZ z)1kQp??&_BmvOeWL0qBJb{$TK$w!-!Y7O!&e$urw4N!x_u^;Jm2sR5bN^WxFgh31+ zAGg63tu)(oA|Iov@t$*$VrR(-WA4pUH@8Sv(5i0G@}urPkOfgxHud-CeQd(Rk_s!< zCN)nG2KCj`T6<4*PXtB0JBon(;}?NwEITB_{IXYlZ;J*pg8D;haN zq--REjISF;?D*wnojtO7XVT8DF9X^6071McX0~VRlWNqtb^Qw3p;^S1NDN+ppS9F$6zyZ`-j zk>hwD4h?yN2BNUAP@_ci3nL(Q?S;MRM&V_laxQ@z41g(N*K-GViHe=aq&KG={_8ul zG#seEE6vmEw5o#_14j&i{VqTuv$LmpUa%@(nVuWF(pZ&xN=8con8^V)5tM!An4Y-ih4G5#ecKB7;a1D=&qTJ zC|i5HmH6VX5;s#6-Rks0CNr>6OsV17HEumSpxn0uezcJ;3hw{byZD?tMieUS_UDRw<;Cf^?2A;!GxF*`KPC$Jat#=TD}65)TVYS$ z=(;R!zaI6gULhU#)DGBeJu&95nb)FWsczvguCcKgZDS7Vjxpo;+o;L{o5+2$5XJ=c zCH%2+R~fK_f4arb%fZt@job^n^Yo483YPdashaiCdEAQ2Q>Bq&1=@Hak0H*sba~%s z|A(K_*%IC-%A#|s>a;h9*s{Lv{O2_PU)ro$ zNQ&c+rj#i;9pv^zF`&9dOx)CAhgcGKv@t`8;n>9aa5j43?NEw;b_$OYA$YPQ9kV8M+RY1x|alykeur)|UMpnRL}vMyl}KenEJ{&AfsKVl?G zIdD+y%$EC)cHB$OEu!Rlw9Aw~`cIhY=2X(aLvb{1mF4W?qf|Zp_XxT^afDh~LSOHfpFZFe`CqxB+C{B}##$J4VDTCeRhwtd(aL?|YzBhI8B@%{@ZBe=`h%jSic z8rL4v7Ezn&m+}05N+;jjPYU;jsZP}O#tT37z5sJb(U^%)i>c6Fwcgc^oSXgJGibqNLH2o`n|$GI2`$9wkYEiG#TmVST8uKN zMEXLjbW}iawbRGbN0uWS@0tcGVpRpdkG%=BuCT)+CjTH#gsg9D8WKNuam(`eyE^ud zhcSxBpt5LC=SK9|_g@6Q7J7poUtW0sCFD!9QKH4zV-j);V_#3h2@c4Y(idxE8+B#D ziqM?sN|*FR{Ra)IvGj*7Ba^Q9Hcf9X?H3gqY7A?A)ara&hd(hg%h}WJ&C)M?ICGgM zb)vW#} z4z`s?Sed@{88smr5zw^-4q-aev86M`rk3m%j&}8iT+DkG30Us(g8OBq`pnxCJ&krP zsqATHqvUMYJH)P+fzNrV+-60DMAw0fKe&yAG6vncwW%j#P_*JGya80}!AA&064WCQ zWQllRB^Da{4;)9;H{Waz-H3CvE`Og`bgmxotR9eWkti|9rszaNUKu(MsM$1`?ZS_6 z+S?v|?qZQIl1wdo10PTAtCbFjIG)7s@4*PX1Vq5z#bwK?$r%~VXC$9OySwRc=>SqZ(IF3dr%9Rm) z1p#nn zC*dy3JuBIjLnTRXv-2zHvti z2~jJOF48D4DnVQ=M;?_9z2~OOfFAv(Fw$uMr({RYBFMw4c5ZI4YF?$w)Ln+^9Ci@( z(QzZ{pdiC4c7RW?zM)DPQFdTog~!xww^Kpu`Dz-wikvA!O02yPik8>mr;wX4Z0lmp zmj+}hcb7)Vcn-KIiZu2w?OxQapya?X!jX!)zbpV;K7f3$NP`u)P#Lv&$sC*|_c(QQ zLgZ2FU#xERXY#q{6q0}@=q1YtYZ6Nc9RR_a$#Fb{8%&1%C5V!2YH10(L0)A-fji|} z6UfxQmTiEm(xu<)qA^Bn#r}WDxI)n~<&q1cWf?%~lrt4-@xuMC1qE_*fS95#4{5g}@mS0<@;{piC;3k02S0HT zOfEBu2Cf=KN;nq5ECvqh1OK0Tj#Yzk+ChS^fo)b zPiln|)>>+B-{BSi!dW;h z=z9e5>PMXu(^tRxx-LrJBh1Qh!_>L(DC03Wwy;EC&Yoa{veXVJ7y>J@RQ5pb;A(qeUC)!csf%K}B54@r|f zP849br?Jp8O%SBvTf*U9TJgM}pQl1qLHGw8_2W(~oP%J-qWHw^=)e@xb}?9r${(dx zKN0sy#QBY@cH|Q!Rwq%934`^aD>WudXtz;$+)v( z8yb+QBb$*=!vzIyf@N387VsvIl}xLK+-lY3A(e&84Pw_jYCun&k#P#*{;OxMydHpJH^gaI_Q&3bJ{x86sR@mqN{6#N4 z4x8{8Zt~+`~7~V;f#-6B6tf3H@FQQ+b2e`?EO`wXPO%3Ji*v zChk%1U+Bjh$(&8D=y~#rjN;1JpXk)lvc%TOynEYMS}!``HpZ9e+w&u8_uJ|G2BGe5 zu+iA0SlS(?6@zM82IYZ@yX!wdkjocF&@B!hoHw+#u1_Ct0O|weqj1ziuFL=B0+?{$ zrrK!*R?5=wAFVJMX&5u_-`o?2d7G0gFzpBXV*lZ&Z!-QkDc{uOlOgiMYtE1-jo6i} z{p`o2Pe{*tTDM`h$23~P09JE4Bd&FQlZc@B2Jln>8%zi7(P#3KL^8r|?1-kjUkFO- z7)ITsRRVJBfU6*|vxHd!qWjLNhc}3tn>3p`I9{`lgQJ0wRn--$Fg!n zoI9dV@fjFm3cVvT>))r!+93DLw0E-%JvB=URcny=GL|wV$F|OZ5HV}HDwox;y+gGu z|3kI5puS%ALg#O%O9HPf&&#LXKXy;l&E|C3V#hkBOzA_Tj>5%_jk$(IZBNaBa+4`i z!CV(4P~KbI^PaG0Gl6=Q!)L!iWb?ezzwQ^o%_g!_y z*qR1M~}kLkk*VBAN4>O>loAICi!#7rNxgLV^8g;L~sL zEjxES8r(2&-vZradt1PW(;p9Ri$*<8745v~$ez_?Kh(2v+py=wi`VBc-nGm1c)C-g zKU&9VLp=Qj4+Ecq%rPJFr}EnxtcK;GjtyUx8@{Rtl#fRQ1>E*DwrD*Ok0NyL)TZ53 z;p05V?bvb%-0|(DS0?8mUG)fl7a>r->?szva!u!~MiKcp>_gH} zu9rpqD8!Z6B^63s3@PNSDOFTT%|*b~`p3GtVk# zoa+9xo~peqioIc`e*RfMFV`&@t#>}*t*&Q&bX{vR`)TcvXx~PA?VuX_o(4-+ZCHBq zDDT`=!S~JAUmCZZBL~|#|MoIMU3%$VIS_?6I{~&$C@}4&&C`Pv+wTmJV zR31)jN=DdC4B+R64W9I&hRoTV0ZziZqrrn1Js>VOvTh9ucwTCVJ_YXvar?n?C zLR(dzl+!v7j6N$_BN{4M^b`X?Ib4ug-jx z5VnlVmsMpG>MCSc(7cnN(ihj`_ED>U`N?f4_u%qIldW-tu_tA9K{Rr|uj2lWW>vM+ zW>Ysk|C!%>ckUA#{>Wate3`u4i@mI0L0vB`Ag?c0V!83g$AE(>SF{&Hl2JRzn9wXmuW=_#MJl5T}x=q^nq<$7+nH_k|NzoNRI9r zh=8r0kfNfP>JruYY>ner( z$tT48aw6Yq(AQq7C2=Wg!JX~0GFD!*BJiSIs($=L$+jZUc8$5CBB4e|%M_-&giMA4 z9!I5cw+HJlrv+|r=|j=W;R`x}1EeIFlfz_WN{JRnF36L=sG491?Ex2|=xaen;plwM zFGX|`1{@X_v8fRxygZro7*v9|F-0A3Y$t*rc*mrD^jS1z!D}9kkUhkjtX#yP_HY9p z=fJoMVrDQE@%rMdABJ8~G`;+Nbe2ZJKcSe_yG2g*OljE8PY3Tzq4SU_p;lfBrD%2g z(&1#cLk2_q!G5i}o5=UghPH{y4@=PeDTPdIG{;!_*qF#a z+A7b=o8u(Q>CdVi*xZF8iANt{DmQ?`iI;US+}eO1>wbI&py_E(_1{<}uCo;^Z9x9i z%o_YUZVQ^a1x38TNJztH_ql1KsEB35JDeH!Zd(aI*2PdRn4D5>$cso!Gj3KdPzGA4 zb5Ws`9>=?ze{fL0tS-t4W>m0_d=%uk-3eUoPhfKlOeY6;27l|yDv@^gBM6q9JPK3J zpRa@eR~SF1-Gj%8$$i<(syOiU!LHhZ<#9S^p-AMzig8`@iU*>cV^tZ~(pT<&U4C+pQU1sLwibWxeW3fN9z-KBNR`5hlHlAe>1c zyc4nS#i^y};I3D)Q`q*{*K7A)BMXq!7P|7(i z`l@zcWoccR$Z*xpva>*$X;=I7kNsehc%EyeXa!?U0ys(I7EkOW7a+{t!t<6&P)%XDA(fOS!77Jknx+`1u0kcL2~ME5g|*Q z{7=V5GZ21;ZGeBo9dYAAj9yW9f~AUJ6e(~wGz#0ndUJ~6;$q4O8A=l^SUfxV4UNKk zR>}7JN3~wpo?JC}zKT6=mc8`^7+Oa?^Qy$pC5+S>tQYXVV1)4OQj#D~2S`er#eboy z7{3)f|Hzl2Ni*3_w<|BqYkj?dbjH2(&wLQ+1kF5GcDm>S&g&qxaL$=AOJQCqfq5~JiTykJoUZP@a@C+7vS-&qY9v6f*V60)flbf^+48j<_4Efxbsy-DT%yd(q+ z$}&|)5svmY2G8i0VZ$!}cL+@5L!ptc{3(bQ*`FsYt?+|ngWvIKh`Jn0sjI14wB1sO z5=$vG+$9yp8Nogm7yQL8dw7X*w>emCH0J&H5~K}wapZ1?6pt3oqPu5#^m{{;7So!S zI=PntnWFUJmoo)@pP8A#_7mkOHs}{m3jCn-(~Yu4S(I^@9uYeRcXT}(d#$DVYz!Q-&ccc7dP|I zr=xy^vH|Bh2)I(GXgcri&NQiW7mrpt4$k9xTUjLN;ja$njqD6 z`Vy34>4>b#qjFLjLv=TnLIO>!^^8QmmzufWo?(<(u+}wrWyE0>j0u|H^UEJ`)`OLn z%sZ>%{0QR&SqxyJLEr~ByaMT_xrzsdq?RDK&Ce+Mfy9CxcuKE9_@QEaWBQs`ey&gD zNF-=qa;>Rj1-Ad5_fdgL;zTF|wNYP^G!rxhcilU_>698@c`e`Tvj?_;r-3Cooz6*t?sL>!qFPXA1iIZc2fE{t#FemP*REkH}8NKdnSj|6FE3e|DndUEU-kv3%|)?&NA zN5pIGhf@zqRy?K(>}RW|h3*VQqTs-J;s0W#cgLg* z^wpWPT33upx`c=Fg+H5e{o<|+tTZn7%MaR`F-TZIU5b5gf>vnSfR0;4b4Vjhb!oUx zgvrpU>STW=Iu7ekUl`gIASvD#Uy+)~&ug~VeWqraLWZ9nU-&D5r{(ZoonrMX0Wl-F zhF`N!cR&3bOtk^s?C1&Mi;xHqwEe)%ql>Tv4UHY$Q}ltS9z@^KaVLJdk8glLs+o53 z4&_Jwt^)fU`CJ`_?aL&Ee33R#Ry9STP_1k#?Q}HbqT$hjb9(c`u$t!MBgOg6{Utlj z`!O-Oyp1DQqjo!jNl9(PjT-f~C1x5It#I*g;{&uMRH&~$ggseqg#L^Heeu-1b*lq zP%Pw~xS1%Nsw+nV&-zMyRYmsmJ7gI4YH}U(k4N~i%}g|^*+B%#hbFuY6W4V(tezv4 zBVnCi?966{@UQ_dYU0k;;2R3HOMHd7Rk`sh0jze9Q1U{RcG>;vvNUgW++b)aX{myW z{_^yvL*f&R*b`17L6Kk*`M)~tpJ4W1%H#CMJ1>Cg5pR5t8CWX{Obx)M!ou_WgO5+n z&JWAR+W|l+GvrPgY%?iOto2*|a)eaaQaS#3bFApE4 znRLeD6-9jgHi&>N07pI@wNWzKHCl1@iYC+`FAuMDvr^17iacb7_aO}Ts;HLhVp2na%X z+P|`abOy%+|L7;;3Q7?TN-pw3@n-A^3ZNZ-VJ8vHUK<&?7tv$E;lTQQgj zyf0HKk9yw~9W7t_2e}R&_=swOH*H?frYS6X%f)AEf?cJn0)KcZpw$}`7QHauypgTl z@kl}2Zo>t{=@U>jqNu6zSI!el(9Er@t;gaUsY5XSkAc@`_I@e$i|UuZN?5FWNOXCg z{t4kDT0T-OQ?_$tg*Y7U-Uo3gPUJ{1?EvoiH##5%Lisg9b}m8%HEVC~zm%*U>0Klk z&_&)_iTtpp`d6I|dIuR_m7)$N_r8o%vp{{!|C~zruiU9Xy1Bi2YI% z7ctl<4XQdo4F{OF$5uFN2E9`P$BFfL@ld(O*rZerH#H{TK04sj z*F0jI5REN)ZI)!-xH_}zC*J2V4bQpHbTwVY+{wJ~ULYoX(3qq}RG(WP_G{<3ea=K& zNDwK0q7!*HlfH#gE1S);;`V@-gU1NmI0+_LT;(w&x?DP)c|XB@Qgrbx>LW!{&7?BZ zpD#o!5mx~11@oTeG2ZJ|dvQnRr{v4kYlg&yq84$m#A5Q;ABmGiCJpNOL!x4{88}P^ zSQZ5e)u=m>oJEm<^KBX|vGxCybz=AEmNA}~tlkcC!a^FGxzTN;u!bcKy);)B7A*Qh zZS}<3gsdfqp$y}EHUfu72dQk**5Z9$tsY9g{uA{l=NEtVOvq)c3|sy-7)k+oZ`^3+ zAcXOD(q^^U4EeY^fv&7Yli7@uadf?vu1!byc%LcC7bXE%z5Ra%Inqz0`T}90=VlIX z2hX`$n0IAO>2oQ)1|_<+O-*1w^Jn_-mK)orw}{+)#yqbD`L-|ll-mnaS*D1^R^5fP zDD}Hk&6~kH4f(Ukq=O_s?if}l@@jKve`j%|R8s)i3pu`P;wdIV$DgpP%n_0ya&IcJ=Hq@Mb?|8iZ}A?Fe=M`dQr9KqKr_g$$z4#BZq-DI`H7T#(iGphK2%RnvA24AS@9AwtY)3};DPHqv=d(dIX@gQ( z6H|>N$I!Jc#v7Y@EQRrs92J$3F)@+EF93Y~d4%YBZ6+~+*)?k&J*;{l_$G$tpxH`)yn{?YK*+p8_-4hl zqH&|1EtDw0f5}*K76TYgCcnc2^^sI0H?@W&|0l}r&l00Wvks4TKiIhC;fW1iX{re) zfBl6%Q`c_C@#uC{=}Z4k+d6vU7X?c^8MLXXsOJb5nkR<}%9)>RDHy1T7CY;mNmEM{Nsej-t}yU{RG5+~iJWBMR1 zV)RS_i{1+(&I>sif`*=E2g;wwW924nApAP(53!ZaoCTcNVYIH}X~j|UUoAb;v~_IZ zKy#s}U-5%ioDXJT?_imjfR2;>_RF`TDvcF#j}HC)`0u?e-qe?aAF&(1GI82nqKxV1 z@~Dnpv2TAF|NZj=R<%#Vo*_(|CbTtCmIkzT;*J9{8Mjlw+xm(fl3mlrKT$P z%hadN`^{)fLp+%zgIR2F^lx$@-3)Z#fH362o6BqmoZSW1iB(OsLki~Yo8@n5Y~T5H z<^6#WRK!cA+xTr(q=}CDM%yjkxDU;!POE+&udw%>$x=7>7h`>7Z+H*ABj7@yfpI>r z&VR2qCjaKv?atBV#^T3wkrCVkqESZ%^ffi+b^~i(^D|DXgvS|ETXsdVch3`NoBq+SWuPEaBpJieuVmm zTNyg)9c&+=oxntyIbPtl9o*Rto%|IA$?TntOHLMFL z8X$!ZeY6x`jyyS`+VvSXAk5&9es6D9!_{S$QeMn4k*~o|^<-jB-CV@?)>U0(PqT|^ z*YnDwjVGB3YK#!1_O?OnqF;c8IVjo|PHrfq; z5)Pj8SS3ngp>*^S(F-RNEpwK=kuQLZVbcr)o)mh-4%Y+x?Q^<1r({K~=$zj;+{HZP zsT7@g{OM6a4p9sy9Ao_+zO8LH?c*l2PjjmZ(N7$HM+Hioik)%$gWV2hu!`Deq$Nr1LQ8DzM7wY~yDsPTY-4 zR=B5}*Am!=@2TBVkLVG#rga)xefP%3&NVbb?#IVpq;eIpX355i%~|;??<46hxNhpy zPxIoSky{Om60s4RN^4w&-svmZR`q@C-H_tLj9&3&%#^~_B_|D`T5@7nx0BBu!z53? zXtF}C7E-@P!6F(597lh7hEQMkOP&%}K=*)4I8@ z6WO|UfC5evs{m|X_ohSRNWKx_6+s2bT4Ue1OifkUn!%cJ4HpK|*?&%zw zB-|rsF{W_{6Rke$5f-knj>w59Me9vSc7H>IN)L4l?3d?+6@0aoA82(a^d@8jIGD)C zOKviwIK2k8-erD^Z)P1DKat`zsSrV$@aUe-rP!#`~ zi)y6yWzEo6T@V4l8y+cM`Cav2EkJ-ko9_A22nATX(5?0(<`A^AsR-H7sw;H|`EDE9 z4}C{E5nH7XW~jJ})z3-ezBt8hcePSw(20F}o&P%WOVcNbK(k*PdOZ=^xSl;42@wEQ zIMEG%@gN+v&@k_}^35Kp9eszVB7ZJ=fJgUR_WT{en+Z*vactc|NPeDo8)J8h9{oOA zWAJ0KdO%i%Xk|)!c);!?6CDA?O*jtmlU5}l%m_4VkSj5na;n$zQpu_~D^rCF^-VRk z50wmb1Yqz{F9?kn1XW=6KP#~L*Ae}zS~qv$TI`8R7LjEV37c0O#kTfF4ldAx%0%aB z$Z*t}#)CHtJaUw`-F=P9?V0A5VVhNonn1f@AQUQ?_2qjbwY?UyE8f1xL7w@FWI@N% z%LOWr$+GSx%;E zUK+AhqLgVhzZgViK?J+0|Kw|?-exrq3%*|oV+I{MV} z2VvVg3+gGEK+NwTv&~}2q}H>w)l2cu6{h%Nr43Qsp^FGa6^HaeHapL8SjW3l3W~o# z4wMUkk;#9vhQJ;j&HC}D4AK#I5$>E)iaH2HGgK(fRFawfJnY(~b&KfYE~N6Prib*^ z)_KTRC#&uH(DK#06x{qlZx~%%OMT?Q+h_pSEp}`HD9$Oi=xoQoMPur~J-ExMf2p=J zV_JM+b2VO_axbi{(|b$^B-f{41<07O%8>Mx+wL}gy&5+>_qai%N**R%G2WPP{0>Ap z0I@Fk{iqWZ+5BQJvSqJG1T|KoF(|CK8kyZqCj1(0D_v8W(fbO`m(;E>q1Vg;Tt$;$ zRc8t`m9IDW2!l2e>m`!$l3HYBqYtH%OprCA)zE#XsgSQM_Z8NyGdOE}tTFpP=dkCI zkfQ@O=pY^&S`IhPP|jnx;ZxVEb;!mfLYNoZHqDm&eDTTt=cydnfx@Hz@!5s`LZ1K_ zbc`!L&ge4_moW)Xn7u~mF8;`j!8gxlMu9ug8{b1dnWMJJN12b+Q48&)gZ|C>7LT%@ zNiWiK|GSB}i1147;P?9pTkR9}JJp}$+9qTQ*_W&*R|-*x)1_VfxZ0nxX|H{Kb|3bs z$F)F^-7ROiz9ZVR4$FyuvIJ;$jNSVL(}rQ1VB5unT)_VzEl2||NyNs5w#0Yd*LceH zPQ~hJ(Uz`xmKj`{N>N{y)d4$nlyf_5KW5yBN{gqZvcDb{D|z@Z@a4oy+?`m%wd(Tb ztL7O>RmJ2#AGOexLvAPX+^W*MuQ8>0J61Z}3frS@N}3;1om35vm7S<~rTmwl;3CDq zEIL5{I0>Dj_g(+$ESxwfb?m%heEr3?_aUbwGJJE2#$NdLih8Hd*_dmouWY&)JmG+q z-H7te6T-rgQ1iNO?Fxk~JqDu34BAO|XmPM4hxxhmOj$+v)-#vceysEi^xzQ}<~NHEFW>68Eine5L&fZ(se zMl1wPj7bNV28?y+sM5S7m1G&PgJ7S>ko*o^->H&XtoQ@$m9D8G=q{5!v#Jd}L7c69 zWf_{&$72dh|CnvJ8Dtg~q-x$;MZC-KNxGFqn`KCHx+3Sg6RaX`DsgJ*>rjTYo|So3 z6ZETP2Q`2MIbnaHK1ia1T9HUxrsoAy&vZ*1LgvnMKH3Pswh%!;``W0Ae(Vs~{$T*p<;B_8J_lbc9oQ~S3brvH852?eLy*xy zz`dLWM|Rury;ruB!Mg9+xvK9rE%FSYIR|2)VFaV^O{2^%ZNBau9UOOJvAMm$LmyV2 zQT{3|=Wgiw#7>U5YZ9!H$u0|z%?Xr8CZu%BW#y46-QP`)YoAWw|Kh2uD~CnqlvexP z+OS6yU3mdXs9%FWA9IBDEeTdP?|<44Gnm&QOROeSD)qcm`JYq2={{j!{hz30-^ zXZovsHr`r&UJjdRUMElX68$jnp+N96g}QWG+Q6oIFXBVZ&Ry=YBQ{#vI&MYH8|gn3dBlH#o8xuH66NBIwaG|8E2Iio~Cer#y+&syB9iLvKbt`v_y3 zi-9sc;c3~Z>pixXTBjd^9(6GvRN)rGm~wbs2Kk2uLQp1~qBPrgWX@7+Tm>iny3C`+ zcatkWiH_p2`KT>EW@f>>3!Y<8M5WC`9$~+w!F}UIFJI^ymbHh%|cqk zjNe1Y6NFA!2r{J4pS&tYUcT)fRU@-I-$&`~%`2s^d~HN;CX$GzB>7!m&vZ`89}y&*CdMq{+C#&bsp(tF^lW0{alW+n+;2-XmCNq!uvPh&cyTuvt>`Rmf> zn16b7{;iYsbB(0I9UWAxfT(N~PARMb7t!keD9)T1ouP#d&S74wsmW|jq~0ZqN>!(H z92Er-<0pimod-1nZPUG8zUh>vI?+$2;Nah7+%b|3*{0lJ*>v*ROgK{QYC|?& z;aoE3nU%(cayl3+AdJO5T>6#~)L9`mI=_cqRaK7!X zPLgsvj%xUk$SaXxqgTn_f2m(huPh|^O->UlEy;2AJ;Aa2c|4a`_FnTW!Y}DJf9Y9I zc%|4VXF%-c;Ti*$MW=vud^jdKw)6i)%KowqZfXZU+@F}1YlIGs8^0^@;i;%vpGnLj za_5qC*yhVX?7@v8>*}!IqrsSBJ~eu#2M|-ZJ}P$p&&dH%<4u|>`uQ!!mZ~1_*k!qK8cD|pw+#i8))-&k&@>M z`C;&L6DKz?}Kd4N?6YH zp%zjZDO>UFigqLu+D1a0?B&TApa|mN!j4;AWZ^H$@)6+E)HvW%io}l-;du?Yy5+c! zbOnZ?54Q-|V&0eUocFKGeHivkP_B{`QvS6Yj%a(}Ieh#5iu2Iw5IZ7{=0jim04Q%Q zrM1!RA7;=5jqhje8FiF1#$Wtr&fCz(rwJK*tAkma_N9@2)d%}!7cN-|>H^jeDbL{J zz7^$(ltq{kl>JhjXytFyf3wk|gEtito69^_WMnEr7y?|aZ}HL(#0U1CKF99Io4m5H z^4aI}7!cNodiaf{JWUjF>lLIMJIdsw$RexuT_1s@c&S5vGig+k$9O3^Ce7DEGWsk` za0nVePv27xlYsgOt6n&ScAT(4K!K9ZcfelT{ez})zUKl1KZ;|ZBA=d}2nK>HV#yf4o*m}qbhRhuuYL<#Gl zvEF!A(dtfyR$5lnY^G$=NM|nyTk*ZoT`l|^o}u?TGK8sDCGX4L|M|kccWOvh*A(Z; zzIGL$SXEnrDvGow)6@OXXzY-?R&Ehult+PkR#1MY%gUxn@bv z)Jgd<;4{X$tFLx|0s)plevE2}YMwJGO*!szHZR0?2u6TzJt38lgg3fSUrY*QPX)KH z^6Y-ZX7Ojx;Y0r~i~;9$Oj`9gThff{m6_RtDUE=~NNZ*nu{B$LTZucu9_&k_l8gtx z?GCPf4V*cIpS9iOU)VbYZ21NZEK)J*ep%p-5>}Ltk_)_a1pvC-kf$l*DvUwMW#;SUEJ=C{7UA9 zCX8*mB)bn-$NhUvd*g2arhqsQ4D@;~As^{SFRx9gbf|{)P-`T=l)OYR&y^V;YZY4% z+DEsMrelcbE{^+Fh1D!vQh}&owLA^5j-|T{) z&|kc+z|5O)Xr8_zLS*?7#x;cJDod(6AZ%Erv&qcvHuf12M#iq*-K}ZLp41n|GnP|Y zK7fNa@uHm;g^N#pK3%m&HKo`>V`5F$evOXt(w_028=MpDF?3ppiXRUCPC#lYl3|6Pe)`l2_o(n1(NsKn&D^FOEb7wd zGS_2|v3g>AMPmFzm9?F{XP0@Z1177h*HKf@W0HeXnLOFKOMed>ifIv?QX!z~;-FT)3jH6Cj};}g9<^XHxBJ+-u1`aLs$ zZV9HKNDI7UttUqDmG>#Dan(vb-34&=dVb}`QAd&|ng&^P4$Pu5D}D1w>ozW12Ipk~ zrjV0c5pzpQAy9MV4`0~tLcfL$#7${|@)Ru|T#XGNPodAUpZD~?RKhjv!E0(l&d$yv zg0H8zzF8ykKhQCAlPq~6Eo8l5tZ$Vjx#sCIMMlHAMUA7|fcS>idq-f@T2HrV!S*`G z8j&AuYh)_ZUIAc&wz}}wOAy~32662E>(nOiz?G1wZDi+wqu^BAN+;(|ZbHU_wU*%! zbhUx7(pZ!0+{7*Ko@Ni*>DtoD@ewC3JZi@K!&=&v(=7pb8}1~*ueHKrK;|gQnr{!c zFq>hwdyYQKIOD}hIGlUA2C(_ST1s0Q4H3{RrY|q?xt}j_8-+Lbv(9S2mdz?52wt&J z6U?)P7Z<*(Y%$V$D_gB1KzpFZr=Bt9JIYyU(l9QoB%@^h;cy&V) zA2WHBuPhp<>en9D^R%AN^O+yqp%eECCzUwHPd_t0xH{Tp8qkb(L{B#z+_S&5O*f2d zK_W`ZM8!J?ZRw5h@bUEJnLhFVqT~_7CS$}`K9A*S|Un@{U(ii$Lga&Ce3&RT~ z+fKfrvUH;DA@I}d@biO`9k9S>es_o{$A|(L zrO4fjg`IJNw5=mo-`v)+tk!-wFWzX+NQvx0IX<$Y&$McP10@m^q-<2S%zDphwiio* zFP(9IM@b;D)S*r;lKH?T7h?0^$KA!4o2ly3#Q3G0k6>J!WVY^a}iTg;w12qu+TO?x%zA-h)QmIW|!_ z7sW)9jLRUvP2-wyKv!h!%+&ZBc2;y7Ue(3g<7A-?>Ph%9?H?ELI0o+8ux(G4U)4N* zW;9Mm(yXxseLBL>ap(glaZl~3jM%Y#a7{hsq~EjjX%UoiJ!hwoKn}Jg&ar-N66XsN^8iGHiOUbLFH-;LaAyoS`Z|`?d%lC-r11|3 zT%)C>o@^Z-!Doz)y2L@@oT`^TR~RF3yx5m;ys>#BwReDa!DmV$w%T3EIj90W?+F=&i^Z|)G*QzCt^upCA#fuz}6^PA;`RY8if-da|_ zmo#0i`%*0TtE`)K>(t7BJzpn3o#?4ee+I#}`Oi4pDQ4Xi>*IUPR+l^a`2OxcPDA%{rU!D2D1eertdAke!w z3m!;NP|$K0BHs!MUHbd`-+4L(oDCUy_E~EZ(b7&zBcOt55JPyzT;Z^QJJdCt!op!^ zeS^|r#X^v7S!?5-sP74}8+xj(3464?zxGmqG<%sJs4XC~2a_9=TL)tJX;wM6bFMC~{Rr?(E!8_qo& zOR}?t8*Kf0Z}^o@t`4$qL|2X=wn`mV3g*l*opGOPM%Nhs^5oL{X0+^=8ufF=41T%4 z+RQb$dQj&9t3!dP0fLD3g{)ckKT4d>{6C`y1{^7{01i)d!Pn~N)=T@=zx8!=hmOyx z!LH2yO=4jLLfQZ^s4FhAnG1-c1<@XyhmVdt{RpO!IQqIqX06dEb|28?Rn5Pvjv99f zZNuOzuTUHhP-M(=IyARv<~qFdhQ1#^Cnlv6`@!kAbK~@|2Ht+bo!fJ5`>2{_zs6CO z4}P1Sr=<>mg$tKKfol@(3p0OY1LeIT)6(;M4@0cXXPa=vF?HpWwHsqVe~*pzk5U5a z?CX&PO>v1Qq+!3`)A>;!I_+9!=1ahoq!5eiW%dTC%#*U54>Uvs`->VhLWE>I^&~!6 zuC<5fM@4Z{xlIVsg3*a=;)o3hFXHNA*H`giQn^) za+F7QdNub}{lKVDa(3)UBQknUPR5x(;qKF{vU8wd_*0C8Q|8@$BZmub=y6cw?KwBr z3AR!&mFz67*#MP1XYBF8p1=K!iFDgdC1YL_ets`q)FS|Uga*UVulvm8mT_IQ1HP3K zTluS#aUQ#HUwL-U?qGsn#KK&~Ed^PF4m?RkoK=hRxrd0w`S0^Pf`-_JPT_?9+;^o< zcanV;#K8!@XYs9l&)-NGNB({pSnyOqyjjTXxbUr2aP-QGX@t9}Tr`6(KONV3$VbKo zr;%M)j%IaNB|m$56!vGtb7&Unl)IGC%|4uKQSXIDUd~7XuZ{8GWhNF(3n&A&zbjix zvVFZ}j#F{%9hu7`46Fb=P~p5Hdf2J7Ds5IyHWqnBpSX zQ2%q>DY6`~usto+=!YhumGBLajiQ_DieYj;-hQ|>Sr-UUMU`tkXCf|xA6F1~1XK$+ zp#=5c&h5`G_sn;+tj37NNl`@f{4k*<50W$*Y~w0+>f|ndR?)=j**MC|&r~C>AG~QQ zI3hzrR-%nM{=_=@NYGLIoco95$Ae6Vc+o~io7+B*>wN@eZzn^QC;^Li;4bHump?Ij5Vk+^2l;18c2!#*Dn1B6z4E>Snc;llHPCWDWjpo zt|kvlGCffBqsORoPkCqh1wY}m%+XMbf%G{#Uz}H?#~yi!LG#bT7|u&?_J>&_x2Wep z?C{EybP2!6iw^;7%qAhov5a#F0neOr(0E~H;Mx@fmq<+79B=B4YH^*MTF3b1JT&p|$_cjUo73s7AfiwWkRNwcDK84E#k3i9J5)oKEqhXM+N|=FgKXn^Y2jNRk!HxS(y4^|_9fglDcHx+CIz09V6R6= zUK30-3~F#g&x7(>P}limdV2Z<@6IxAr4|0~sal*K;n@?oG3qc@5){4FkF2Y#zfa(t zBXsxCiPbHk*(Bx-+3P=iI~~b6?02L2;!Qa>!}>(V9^k91CcYGKF=w^{Qzhrmb1_zJ~ z=;t3Qw-8rw<#i`kWXYBN&Yh}wRatNS^agI|7ymP~>W!Ef( z{rlx=Jq}rv<-0dr$}-Atw%U}POt@_H^*QcmI&qCHmwrHe;!b@&C#5$uRxWWR-Y$Z# zmJ|sq`zUXVfC3e5BL=OQU5B0gLIrhL)7iB6mx&A01$OCJmhaZ5UM;#&(plDJ+>uNZ!_G<&>0IONf9K@=p*D&pQw4UZ4_c@@=$L`rrwhAL zI=ytF#qxZO3ts=Dy}eyzXXZ$3YX%O_q4SRp78YOT$N4p!TAaG$00nU?eSV}?gW6Y$ zVO4nqi8QK`W2IU#F`+BJY=0kk&<1C$g#KK@klhcKUFrI&E}~1=DQW(B;Xf<&-|eqtoN;R1 z>t0vYgxlb+UwU3Fn6LAmEd^pEk>;DAGgZaQb5NkFSx?1SAtDIZnr#oG&|)W7QUd&Z zbS^R4b7A}>4vm0?A?g3wRnVPeIY~CEA5gPA%U5UIw@~ZUzrshztM<%2=@{m3rsFuG zeOKn})Ati*mx6}_eUeK*-%4l&{+4&x%5$D3<26WFnfE>Y^pc;>rZx;OQbK^HC*^bT zNOHy|&%ZvUM72m5Rf)~{9vES$1p(*5o8pRT_NbL2L$PY$0=*eDR%XBg94x{TpGF>$ zg(592a@I32u;(U9^aHpYa`wsmLNeiEI5Cm-dD8&Aluk_f$MNAXosM^0!A1u@^X^VE zl%2D2<@I{etx;I9Am?$nj0)@TjQj(wXO9R060?NWhL@wUP&m8MLajyt23mAaMQo0) zI_^pb_ng0s-n=_M6N+j<3!+5(p)gL6YOE?UWBEt3X~K!kkhEX1cgT6c6=!Hlg0 z_VOa2Cg0ndb=Xdt|H@I@ziuJC!(g22ViemrU2Yzty*?So-8}W<`->8XVWOLb$k%Vy zH5r+w$a0X2xfk}N`RK1Em4KhupC0KfElCbW7mjMbO$;2-dDg+RsI97Px``knxYGK5 zgx)ICVnHymg;G_VcHua2qA+<~=60ux^RLQTK3$xa6%9h^lqz!17gUs}hR9&{gb?2e$TU@84zr*zl zpCxvp^KeOiMQ4brKA@~FzJ)`q_?^XRxmMz*RBPZ@F%S<729%g_X{u$-C$~=B`N&q_ z7%sg+Z+XWl=XGGp+XR#T(P4F+!vc;Zep|mct|sEe$Gdu|dfFoi3v}l{Z;I7999Lf{5jG`*uBlDvU-$X47(YoZ8QG!O!wU4KENacI!S)vC*UGuJRc2iT(hYcSDWOQ zEp8hMU3lCllj|_F5ZoFueD77W(*qmuIpE2i?sc&Fl>>9n*o1(#!f8 zq^@YQlY^Zqx|hoy+e!)29CF{HzU9i%v4bgn7(j*!`8vT=IP2t(SHu~$NMuvghYF_g zUNd>Z;Xp)0T+;JEmHaLN&#CHlO4bjNY^z0THj%3tZ;Kb)j(>fvsSNcnZtP$ap`Ac| zZ#~(29i-Lv(QE%Ncl@VvNh5l3q&>J3z4n548mN)Bht#^NNeSoS{aGdNi!IR~ssvj8lzOO(W z#;&KH^c^}s%17JsUX#)#c>6sfa&9JxhN#;PVRnXr_R`txFm_b`oUrAMve-Q4>y%sh zv$L*Q&0^kI`7F|Ryu*@wywz5{= zxZ;nALi~G=MRgcIw{x#_#hVUP1z+=x##3QG=UDkl1|nCflSSD}8KGl^+m~Mz_9s&& zl?ZFF)o2H_3&BkHxSJZkoOOTk)XXd=Kh39$LL9Ag!dL1ZtCg#;Q1Tdr+~wWl4tt7? zd)xF@*G_LPvhQK!p58y&kj|!^``qqa!1*8Ag5q@v8#v2|BOd8B)s{+U37?-cJN%U*bDIB&ATDGPVmF}kXQfs- z!N5^725+)5BVCtn#_sOQSD+uJaepNh{41{b^ysN0^fC$SgIa}KU@mS5spuJ0XsBz{IzV^moc6x-uXR#{M&s~Rn&4PJ$l0B znCVWUfYykCPh`iZ0@niCr!-n3;Fd;Q|94+Arz<94`aq3t4xQ@l;>&}6vih(;i_d77 z`{o2FZXui#aV~Zjs=12)LdVaf;|x^tF6q~JvdR93EbXMr&(~twb%2%|8G5*B5jKZ2PbRS&7lARrk3_KkhqlL9toPf13dkPN+U#dQM z=Bur4E|=#T1lM-5QZ(-CHCHm2E=>$m-245|7QLfT~mogX`)Jg zPG?TNaYerEMUDfr*9rEl|Et2*-3R(RjER-?%)3b{3>#i92dS>yGxQk{9(;rUgy@@{Xh|xf)3>k+Q~}J@2eVpW_4owKYP^~^VZ zL~iS8wz>+VXp4E8t-A0$+$i* zz#kGR8ITlQpJO%RGzDjw6+m`Gsne{s ztxuotda`5cL(&K3m^Vy^2~lP`cn?&|vj^@Y^E=0t^+mjma8)Wj1d;mH?;ZX0RqnF! zOO9%u4Yc&}XC(&eb{M=V@Nf$MuD zzAuY3L8e>o|`mWzL$s3%)G$V;R|ye zUM+7`||@d9WM9{z9C4$$E4xfi)$AUpZ5t8d#DY6(8yG<+=ejywP&`}x_d zH7Tg=&Hs%?{W&o9N5f=vNYqTy!+U61H2e$wCFqhP}BRtx-Jnt_(qD`a5qzxt# z5A1oamoRD)WNCOWq%z7`wmMsnNSw&LP2jT{&sGxn%FZEx8E9@_%Cpra-@C+x)N()9 zKV;J_ddT$9Cf$x5rqTU>r^(ENoOvz$Sq0DX9j}=NEIfEU^L#0l#G^0uQl@ zhqsDidsqRZfL34<;G8i8w%BftU?gFnUj zG+y6+V@tv;GEidjp8S-XU);xdu)%)s7v!dQQAy;QTgtc`3FVE}GeJDTF0#q(7(3hX z7D)#Nb?OxbW`JpXs^ip06AC(Xv@ciab8{k#49g-;6O9NW?k3*#UzuC5&1EF!ZS`dS zx=~|ay-wO`ck`Kkaj%NuT;e(t-~XeWLRR3hBQexWF(mj)f9zFWcHaxx|!QoH8DZ`5|s59R@)L^q~=_0XV-4v?vR(fy9Iz25nN#RXken z>-6dpA6Qcu=KMjR;9%)+x@tN}zFBzt8WV#u7<<@IOCF3Fopl=0-Zw7(S4 z=+N{pTiHDmO_=C$Toi9CUY{B==q%8m&~lDYt9G zdv5}~gj_`5z>N&JTJhp$IB-5Q3l||+VbPZoER^e)p&upq*>1s?Kn@>za4;5%%AAPI zoB}gPAl#4-3Z{UKhTopYH2D+yRE}-o}fU_qeV^ei&taBGS=G6-oTgAOqW3 z|L~5~-FwF5`q=VUw_RY?6-^-M%I3jyeW4tA-LjVkjp+y}QaUE*FH6(DymxP^g-*<+&__x|4EM9r!Q4|lPV|F5g-fQS13|0I-1B`b1Tlsz(%93{$3 z*_$)s&dSKXO31F1y_Im*ku#DR_my#EuMTHrgw7s!|M$`N_y7I>J$hV^>v4~}_vih7 z&FAa+e!WE1bIiQT_KhY>qf$&qMawAC477v#P(x(M?Kj*Tv2}tZcp;b+@{L4N0HccT zoIk~!n!8?YX|PZ&Rw3}Q6;l0W-qYv&I9tFr)BZ#Sw^%xEp!y)~JJ=L*;UAoeMeao3?{o{Nv6n8$s>l>tkvgC< zl*N+`Vc;K6?mDoi&_$y>&(1surYh`=77OKR8j67S~a6oQPWzOu!~L}oOSz0 z?fD0CDQT$_({1q!yG(h=XFxO!M@Euj2L=>=l4U6Q3)y`NiL%7H+Oy)ts{7^gd!I-d zpyI7g#TdZ0WN~lyLsMv4glBrb^(OD-Y0E1dNlATl{_NXRo@+5ok(nJYcwpD5J$kHC zZ<7(i<;k%!BbQ6R6_w}65Ol}91B)0Js>QY2TO(~UT2>J-om-NAFErN|_>hM>0=;QZ z3GN}3CnA3tM@ksos<%QSA)%r4hV7yN-0hV!g(j{iMTM^hSuJ>WJ3snPvxO?CaOmC- z(N_!op(&m?*3fqZbk#P2pC+Mm7AcwsY%nw(Xbzc=g7b34HO3GtZbiA!(3=_fALb- zNWxuWj<2!U(>)x<&Fs7r_Og?!^~1)W(bXi+8N&Db+!5+`dF_}S=zf-~mgyUb zdOs@|ya%w@M>G3sp%RJK5?>;y*%NTHCVT%SfKDs;g{eKc6vEv*$JoMYKHM%5my72! zPBBor5NN64b9|+V`rL&?Kf7owz{XLkHYG1XA4nFDfmN=mIIk5$K3+@T(%Fi8HO1;R4M#> z049TRlqGd_F%Pw$TRoR!R5Wo9n>$;SuZYhfO)EA6#O3?y&B;~afhTb`_^uO{) zXdn_ee6K9p3VrP=2Cl}{k7=f1(~cE%7fm9ZEUC8Tae00CV+s*xNaZv5D`#+!Ff6<* zWQ=4h zw34aE(fL7O=jAHE3p#Ea0-!~3E;3|sQt}Ej6`1DW?Mmk1OWyl=<{M?4ixkIML- zLV!ZB$Z(%;K#g9(h~BF&nh@j4v+c76K;A%4c1W|Ze}o-L2A)7(DyLwJOE6Lg@-u0E z-tlN09aH_>L&e~C&6W?cpa#B@O5R^xQ?T$1<5tdqi%L~zMt5R9g*Ovh{McfU-WqF( zpoqy^0?j;8H>1E9d!$uv&K6w|s$V6!Z**zQ)cex-OB=dLZ~P`l2z5mB#joEgSlP!E z4OM>{zUQZnhqZFuYjMV8mZjBnCy<>w+Q}h*jh(?wpl7poq`F%q=94E~$)sBvC5q=~ zP^iTzE6)&G3qSQjEFw5D` zu!F`$2mYsi&z<50BlIvEPFu^nJiEJoS7`?>#F$+bGVP_WiVyBW)U!We~s-`=5q;M$*OO;HQkP7y1*cxpgr&_99`6@Dzh% z>-;kY>5b8q*Cow~{@juMS90=IF~6w$K#x=6-fauW0$X=E@jeIGPu>3UbN63 zKOMr<&Ww{x)aWPkKCG*BiJ%9!;uEchzRHI`)T zs_Ce4mNJr6>uzUDi!Vbd261xZmO8hVoq5cz3Z(x&7Hz@EU=Vz1LZZVMYn@gSwce$6 zb2G{_k#?-oTT|;;(N*{!p@uJGhez7R*w#(ouT=Jr@87M5ANcs zzFAfVV&ihotM3OrpNjl*-%SM7_iK0Ow{3NSgBJK?v9Aw^UG_kRLmv5q7pzG+%kYUV zl0D+vajK>ZCm-vINQoPVW!)}ESSMtQ*2R#jc?=?|=JTlLl8o9iIz2|DRATI5gFL}; zv0rR2!8_dTxR_m@FkHnZmxpcESh)qK4U98oHJjVvL{dwc^a!o!iFKf>IDbk;Jju}U8v9X{5#ImltH6%8wB7I*lC zI|l^lFVve)vBwmy1awE^(<2Snu;xkb@)kWQslp;RCy}28F=G!3MjRc;SC18$#}}y< z(t_!7vI+_<&CRsY(a}@~?hqnI?xy%BmqsKm$U{l`HrFQegv8ZBac3cg%{Im9?I!9} zsQTIRH%gXoIK9*O%d}%wO{@8u-gOi{`~9Q3JkzH7m*Iv5*7ZnU(U8lA((I#<+d=nE z@zy0~IW`_ob-I|Z9w#)!&pWCeb09|}L_0XeBprx9)O=tMDM{jwJ-)HAvGUVzd189? z4ErYo#q-Y=b_Xsn*s~g1s8r;AY(6fL5|AG?5S4GPx#Pv6vB5*Ne}Rn{P9&aapCx*x zg@}Uhb0?B0QJ%L55#KKt=&O*yZ?xB6m7HN6R9ZFZi3(5aV8NT&U%gQxAQ16wU+tO+ z@!M8180qCGRyE%~F3~j#^~0-WBz*elhRL)o5w{#IF1N~Ksy>}7EvJHOp5X{4!={rJqJKDf7;Nrq1`Hto1K`(^5R?zi>n|viNnW(vX|<)tfxgCEnukf%XZgVHsKk z+AwmFflK$Z(2Y`?V0+!>iHhQH%=V$_9TUkxvvxh_)Hj+m~$ORm&?NX@)& z?0YvtUDhN(s+Ci|UjSj{Cv`mG`KyJ#zP_EWI~}kgky?$oC76mK3rYF*zAjhaZ?@UP zGl95GZyz{!@YV$a?sCz8XxA4kA*n5{!_Vpp4}TP%5otw#z-da=K797@flk*ON~VI9 z`wMDv;@PsOdOb+lXwiq2YLLgN;SyP7!t6o)c}N;3&F9j4@ly z=W}j~O1jYLQZ}zYV9;C%o4iXL_pmDA{jagoM+03^yyvh+GU|n1?yU0a2^_e14%Lre zfc*SE+*FE$NE7QEz&n%+o}P@_By1I^JuTNM7%|JgwCp@oJjTG#wayXp0*r_!tgZF# z^}s1WThcbxm;&*DQ1P?nr`NXi=)u*`pu-y@j9;Q5iy1P@))~wzUe{TOag=&Ta|(}) zRu>wIiCgBD4VDo|cVwr@p`KuXx+o*)EuQ2p5M@vL$F+;|EfS70_zgiew3m96A0$uy z(M)@k*~`DH3<;dqWQ!1rZa=;Iu_kz_;11mV00>S-o1B#kGza!tmtew5*)08T)x84b_pW#}}{Vi2GqtfTq5;GPyAMD;?^h`lgj%lnQ z`LA9&ZCl`*w3zfR4Xz*>gmQ(XH)qwPVj{u?HV3A{19kcsb%q=i`jhw^0J^Ec$N*M|lqN(>CNaT0cL(gbi9-w-*yrI71O_oefB)ATwwX zrdA=+UdTr4n1?DxJ?#G7f>|PU(9A!xx6=IRT~7OpSUw(~3}EXu z8_wlfJ+4H@GSalt>=*pnsee`2uym@o+)yTp3%VYRji)%nr1!*oB%!K4t&Ny~c3GQ~ z&-!{yLaYo&TI0Fhxq-^Y98`V}f;*J+3^{ZHU~ChB$LIZLP9Yj!+pyg{Yk1P$P(-vy zs)l(jRFU4440-T9XDg0vp5cMOIb2C)0DutVIM`SUh_VyEb_Rs`Jz{Pth!3Y`&YITIoL9`ALA@P4j~UU3#N^#szk~{o=;znl#+;! z#848nb2FeW&1AqHbhL~T#$T;kruUejqLeGwU4eaFMVX+nD%LG;%}@v0ac zc=>Hls`H~nWPraG2`EqgYu&0_lM$k;U=AE1RvX&HZs8vsUrc_{78~>2nc3EteZS$3 zMoi#y(n^3vPUuxL=65F_2kgI(@XGEfB#ltM_u#2q;5MW>1@c!f{igCIhF5g3_}FfP ziN5jGU5!&1GeNw(NZExTqk%5c;!PL2Mfb=krYnf!$jY5mTH*dl^hA(;rqr8WJ51)Z z0b7qDs+?}O`-i5CAm-Z0Ki-91p$*dt`9VdW#w7*iLk48X1d4r;{`b&;ftdmZ#tKv? z<{q!J4s8N@{wywi0yKX0UI&B2fU}Zu(O%h@;{G(7ZXLLN&VWDNs`M#)?9eTbvM+Od zepmN-s#_x&yy5Co`yEk!K;M}USVH(cq~G4={AK2Lss|jLuNLKRvdmVU%Wr9^$~Cq- zg-$J`(*D#_-cw)s<9k+a7xzDNTo@ZyrY5mJw|1~sVn=0mh=vNENWo6V4hD+5wfJhE z3!4+_c0RYvWzu+?(hXOttKYc!U$iTzXp#T9aOHbS*WNGs-As*dZa-^`lP_cCW|nsY z&oUoA=AlW&5843Di2=Zp$r%1O&_{35-i;8edJyrG!0d_1SZxJx*$f$pQ`lv6iLsdc zv#8EEyUSt6{J@U6yW=+nD|7aJDUn!MRI}jwPD1Hd*0ZNyovEGO-OT3Lw8LzYfi2ji zgxMhC0@N0xXOc>#E!MxhLlT*$>e1+P|CqffolALH6Wy3&{mt#xr`Fc}t)Fc ztA&c%=#D!9U4yw^)cR~RKQ*>wf;x!qJ%;w;h^XnUUo)s$L4NtVo%d+e>Z`yv9;W5d zOrSD)SZJagC$fxBp5n?j?t<#0OFH?XzJVE-xiJ~UtWY1zuf4K~ByV~XXP9cYCQta2 zwk;0qP~U=#tk3=p5&Dd{Yt^l!`M{@s%wj`GFur`k^Rx@|m7*F{MZsXh9$b==W0SYa zfqpxV0IcLr0@VwqANR9Fx!7RFN}c(*y)ko75jex+qhd6YGt=Q;Zf9R4?&*m4DcWXX zUNmpaiEC~NxyoD#yR8R5AHbd(1I}I;e}h`q!Sha=^aV`3%qfhCXGeXX&-+**>YZAb zd8{LWK4g`2#U0*pgnbRPd0)<9hS_*Q66M9EwDWD-flcDGeTTtOh- zcxig-N1MK0X!21zC$EOg`whqIlTS4D=08*=x7tYfRx^nO9=V_6xz?6+q_y?E6T>;K zePtyU6BdJ|DQ{7>i1m+cdog7~JXQvAiUoNTM?y(EYbaQOoDB)MZZd4DZrN`UpgVvs zyj(|C2;3dPPyYFH2DJ9|2EDz(fWPPQq85{VD1)teR56(N!)4l8*Z3!^>4BZ0)=40~ z*^6VUzc!?sZ=QYEdiE*{z=ldH6&q%LJ_0{Q=GdYLE}>?d{EJw(-gTT!Uh)-9I%j8q z(OFi0_@XHXZsjho*U&$cCD0)bO_lXxTNEE+aM&|>8AC%5z|f&SLio?oE9|t$aoR8l z*A3K{bs$*a?;P6Y>=u+qJqtP;yi|_l;da78=My{93*T?QYik&-d_PbQUS>JeefFJeFo85-{-~VHQyFwu(CJFN8|aCjn+mw z;?&j08NSaqu=djLlm zMfj$ZiOupt7e&*`%~r~&Y7}lJhkZYO4wHvVQWo%7)5)-AG#KM#EG)98x~eG5F@%Y$ zD`26AT82kGm!UUTMg6G`neQ!4WKj-4oHw}D*jbqgOKFo9!c^Fny-44;JAdF02jzf8 zfR6l?VdxdoHuE~*I(w#n`Ad-nfG-eO(1FnP$&(jEqI*he>crCOakhvnac$IK=4Yib z8>45mmErjB-DN`4>@opVktu}ykv2*hmJA!GaHep9WhZCI*jD5==w*RQJ9bH;>5`?u zGr5k22ngK`6TzA28-z1G1!!Jw-ILBWpiC5Lc!_GR+Ig16_N+X~DnZs#URquM=e?~T zru{zgbc>R>4jAxreBeR{u5wXwkBO_XlcP9(Tw-w|W+!E+H2`K-TZ1WI{pHs8erd40 z$nhtbcJTj00Vp#GZgy*FeSV$+Af^;C1s$wGcX5ia9zsb+r~s~U>%fgRiv~U)LSUvT zl?vx~wSa zr8q<~YxXk)-sA-u)f4|Ziv#7u>jOj-P$1TpK=ii!v$?ywd$`Dgyfd%>{S2t#e$yRx zWvQ#ZFrYjrJe2LgXaN3iC?MaR_RQ4iGUR0gxVuS1#Et87iQ|kI{YsNb%rgc{!}j+0 z_Ridb7PQa>$*9utKP(SC6wG9L)I2BEQ2J%tp-Y6R)^S}6Z+T)yvgHiRNTS}ivO#J> z)Lp5EmQrr8AiEB!3ns&G$bVEPec&Jsb*V__BDaqrq)i~;9^>FVJ28>GDmMeBEKv{? zfU$!-Z_`a8a)x}*mKS|2>8fy-Vb}DN8`Vl5_%7f+zSl7qR97x~@&^`B1vMxzddG;+ z+A|geE8u(MO_lWgBq5LHJ7kQYyO~ovHp(K1T0cN)Q8bxIB6gD z68qSCG2E;WRm@catyb8TWo+t?wYA>A=ViI~4Wf0sFIhDBFEZprv2hd=AVUH-oN)5M z%HfEBIpYoftImnE>)lkJd+%I)114n(jAh2HSesfGAf%#1Qnlic&iMv_Hz zQbNZ`IXUp_klA)}%kShp-Ht7e-5erVL%IXYe%XzKu>Rm9fN~hSYiK|+STkZ&V4DLZO=Fx zxr*UdV>_;XP3f{aM5yDtjwbnQp$P4gzMYfMI=hh!ro}+pCr0TCj>t_<-^0Kni^K0J3cRuV^wgtVi3ftc(>1Vq=@$jtbW^6Is{*~ zRDB_@(@}LW&-in{?uZ1W&#OOV*3!w-e4%v+uEBvzU1E;2HK}-kKZ?I30h3|Fi z|5d1Q`wLt26EJ(5pa|C1Eta()9e=gugXwlJzxB#RAqB41NqentRkh2i&-?hBUkb;z z+Mu4aWt9pWzlkQg-Oq09DSeMsVZAY9zbk7f%#juBMD05Vfij{Un>Ayf?@zYLZgcbB zS*eE;lky?_*W4Rl+g6vDC)J=qwnrea9Eo~fn&WP_`WIyGSDXF2q}25NL+&~`0T9bc3hrmANW8Q%EI=K}f5afcZ@FM9*x=2yu8v()Beh#NCoaqB zb77Taj+eg~n9sI^L5hH6!o#EMyFkR*pgwUgftm2{nflLM z)b0g`G)K4_XX>wdY7DXn`%P+`P)JP{4VtR`G7kE!GWTEp{4m*rDOGUfsE1RnL)H$9 zaHnk;)}1Q(r5@Qj+EcG`S(Ue?%52=;_X%V6{HR*X9Hc#%sa?$7nIx0+*QFKxO>xoD zV6BN12+W=U&NqfQLta<~Gf(2{dd(iZgtyX9SIx#BDLlukCH@kKCl(Ey`zIhihUH;->r^m-K4lREv$ zP&%WxbDOPY9a-yUP9ddIb^1d-fg!Rc@dMwJp1j^pcQW;rx8_)F6B*LuYA4(MB~2a% ztw?ha$qpQFHxKr%0u%y90s~k`yBzf_E8jS67~6|z4aJINOLK?h(M5D&F$;2u?lpmY zDRgPbK^|KDm{r-rxhIbbumAE=di$#Y?%te;ZH8~iMAK$)dLz=Et&OblIp_d!bJWUS z>;20=G&k%qB^KYWQ+OVK9m@Z=P-O8{3kA{^A)iJ0qYh1`3Z0OUWqotQE40wt@YKR) zYggDmYc&i8a5JdeouG2mx#Hu-@MdeYA!K$rFx1>lz9(YV=G2g#LJLDH1>TuoZzna|x0c(Nv^Sjb3A#`fH4shC}+3shLUzd3jJmYvd zFAIN}l))=L#KJA8vM;ypjd(`R_FCrQ6YKIX;j-b&rP>qY^VQO+&fEYZ*8`c5`h&SE@>=xQ^dUq_9 zkn<=9*0=>V$9WX-IsCijf?VO0_0>{k%j7D7a|^4+qcVYw^hFBpllENq=(HnoXH1=# zO}72vuveShGE3Q{l}|^Ljv?&f*=^EN>p?C>t;2Tdak+)^PxY@Ed^N%9_7p9ESy@T; zJpV%IpjaY)xWIq6#f3Dqu^a)M%5*2Nm`=wwf9(dgJrldlZWlCJ!xzEOM11U8cJx(X zAup!0`CN)}dH;Hcpj7T6JKnWqx-2@T&4`8(qg_7WlZE{3ZOvd2*qR(Yj}`yNa`3$e zLmnRwj&=Bbsm~(%Pxf){1^7jWx54|>7fL#Il9dKzpMb5g@cb{V`Oy1LCP*EwkzBOB zynXa0Hg#}9qh7Wp#NHaMcv|^)_N4o5bnKV>az{}J%#Xlfpj$q6cBKHyuUF6j55*@P zV`Sn_n$LW_GHe9>jmr3}NLWRv&z#tt-aWQbJrA>kwTY$)PVy}43HAlSPA920{-Oi> zb3i z;-TbioD|#myroblU5V@{gad!-&4nH{>o|mv@?~yl*xhEv3C?;B?0wY9f$HihH*m$( zg_lD!;P|~t=7_?W<*_qyygvjg^{tw;X)kt`F%9##ph^A?BK(H_WK$`oI`3>4#JU3! z`{1AJ7~x7-;B>Imxe%*;-ShjTT0Y12Y~xk`Ov#b{SC6Pp;h} alaKJ(b~-(FTBibk?%&l?F1l^`;(q{656>6? literal 0 HcmV?d00001 diff --git a/models/rfd3/docs/.assets/overview.png b/models/rfd3/docs/.assets/overview.png index ee53c36a80291c83b59e6c91609652b852f831d2..6495cf6981680fd3c2fcea1f6153d9c5b93cee8d 100644 GIT binary patch literal 480735 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%0DyDm;68Ji0U4+(4mbh3)yJ z&hVmlSG`HhCmr=2^e)#)SyN8=3Z_dmo>HAV)*l`+uB_I0cs_EcO-p4qDOJzkNq;uYmbJ%xUK(wDa&|0T@|y zi~`vz!7ZFiyB(dK`f#dt#&CGUEmu<81M1XbmwglRSp=Jl8g5}!~OhueXX-KLyj=&mit$RP|>YUW9Mcc#|zqTd1Los9MiM2kX{Ji z8rtJ>+txb`ydXD>Lb#XyPmeRBiNuEOp$Z3Ud{feMVqXYZL5DLf7Op7RD@b^psVQ

`l-!lHvk4_p&q@ZT5V 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

xF#oq~~ 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 #6hruoX&nBHc6uDXo%T1AYu(bO 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

XnhD79>1f#Ret0iIri=03jfUeqt*%St|n7LmU3 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 diff --git a/models/rfd3/docs/examples/atom23_design.json b/models/rfd3/docs/examples/atom23_design.json new file mode 100644 index 00000000..18911450 --- /dev/null +++ b/models/rfd3/docs/examples/atom23_design.json @@ -0,0 +1,73 @@ +{ + "W05": { + "ss_dbn": ".(((((((((((((((((((..[[[[[[.)))))(((....)))(((....)))))))))))))))))((((((..]]]]]].)))))).", + "select_fixed_atoms": false, + "contig": "90-90R", + "length": "90-90", + "input": "../input_pdbs/AMP.pdb" + }, + "AMP_aptamer": { + "input": "../input_pdbs/AMP.pdb", + "ligand": "AMP", + "contig": "40-50R", + "length": "40-50", + "ori_jitter": 1, + "select_buried": {"AMP": "ALL"}, + "select_hbond_acceptor": { + "AMP": "N7,O4',O1P,O2P,O3P,N3,N1" + }, + "select_hbond_donor": { + "AMP": "N6,O3',O2'" + } + }, + "FMN_aptamer": { + "input": "../input_pdbs/FMN_3x21.pdb", + "ligand": "FMN", + "contig": "40-50R", + "length": "40-50", + "ori_jitter": 1, + "select_buried": {"FMN": "ALL"}, + "select_hbond_acceptor": { + "FMN": "O2,O4,N1,N5,O5',O2P,O3P" + }, + "select_hbond_donor": { + "FMN": "N3,O2',O3',O4'" + } + }, + "AMP_aptamer_noh": { + "input": "../input_pdbs/AMP.pdb", + "ligand": "AMP", + "contig": "40-50R", + "length": "40-50", + "ori_jitter": 1, + "select_buried": {"AMP": "ALL"} + }, + "FMN_aptamer_noh": { + "input": "../input_pdbs/FMN_3x21.pdb", + "ligand": "FMN", + "contig": "40-50R", + "length": "40-50", + "ori_jitter": 1, + "select_buried": {"FMN": "ALL"} + }, + "unindexed_rnasep": { + "input": "../input_pdbs/rnase_p_3q1q_active_site_small.pdb", + "contig": "50-80R,/0,100-120,/0,C1-4,C79-86", + "length": "162-212", + "ligand": "MG,PO4", + "unindex": "B49,B50,B51,B52,B321,/0,A56-58,/0", + "select_fixed_atoms": { + "B49": "ALL", + "B50": "ALL", + "B51": "ALL", + "B52": "ALL", + "B321": "ALL", + "A56-58": "ALL", + "C1-4": "ALL", + "C79-86": "ALL" + } + } + + + +} diff --git a/models/rfd3/docs/input.md b/models/rfd3/docs/input.md index 9253abc5..384101c6 100644 --- a/models/rfd3/docs/input.md +++ b/models/rfd3/docs/input.md @@ -120,7 +120,7 @@ Below is a table of all of the inputs that the `InputSpecification` accepts. Use | -------------------------------------------------------------- | ----------------- | --------------------------------------------------------------------- | | `input` | `str` | Path to and file name of **PDB/CIF**. Required if you provide contig+length. | | `atom_array_input` | internal | Pre-loaded [`AtomArray`](https://www.biotite-python.org/latest/apidoc/biotite.structure.AtomArray.html) (not recommended). | -| `contig` | `InputSelection` | (Can only pass a contig string.) Indexed motif specification, e.g., `"A1-80,10,/0,B5-12"`. | +| `contig` | `InputSelection` | (Can only pass a contig string.) Indexed motif specification, e.g., `"A1-80,10,/0,B5-12"`. When running inference with an atom223 checkpoint, contigs can include `R` or `D` suffixes to denote designed polymer type is RNA or DNA e.g. "A1-80,10-10R,20-20D,30-30,/0,B5-12" (designs a 10 length RNA chain, 20 length DNA chain and a 30 length protein chain). | | `unindex` | `InputSelection` | (Can only pass a contig string or dictionary.) Unindexed motif components, the specified residues can be anywhere in the final sequence. See [Unindexing Specifics](#unindexing-specifics) for more information. | | `length` | `str` | Total design length constraint; `"min-max"` or int for specified length. | | `ligand` | `str` | Ligand(s) by chemical component name (from [RSCB PDB](https://www.rcsb.org/)) or index. | @@ -136,6 +136,7 @@ Below is a table of all of the inputs that the `InputSpecification` accepts. Use | `symmetry` | `SymmetryConfig` | See {doc}`examples/symmetry`. | | `ori_token` | `list[float]` | `[x,y,z]` origin override to control COM (center of mass) placement of designed structure. | | `infer_ori_strategy` | `str` | `"com"` or `"hotspots"`. The center of mass of the diffused region will typically be within 5Å of the ORI token. Using `hotspots` will place the ORI token 10Å outward from the center of mass of the specified hotspots. Using `com` will place the token at the center of mass of the input structure.| +| `ori_jitter` | `float` | default `None`. Per batch, move the ori token in a random direction by a distance sampled from a geomtric distribution with the mean as the specified float value in Angstrom.| | `plddt_enhanced` | `bool` | Default `True`. Enables pLDDT (predicted Local Distance Difference Test) enhancement. | | `is_non_loopy` | `bool \| None` | Default `None`. If `True`/`False`, produces output structures with fewer/more loops.| | `partial_t` | `float` | Noise (Å) for partial diffusion, enables partial diffusion (sets the noise level.) Recommended values are 5.0-15.0 Å. See [Partial Diffusion](#partial-diffusion) for more information. | From b04cc1d72793a803203fc244e7944049bcf0710c Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Sat, 28 Mar 2026 11:51:34 -0700 Subject: [PATCH 47/49] more extensive documentation --- models/rfd3/docs/examples/atom23_design.json | 31 ++- models/rfd3/docs/examples/atom23_design.md | 228 +++++++++++++++++++ 2 files changed, 256 insertions(+), 3 deletions(-) create mode 100644 models/rfd3/docs/examples/atom23_design.md diff --git a/models/rfd3/docs/examples/atom23_design.json b/models/rfd3/docs/examples/atom23_design.json index 18911450..4632fef8 100644 --- a/models/rfd3/docs/examples/atom23_design.json +++ b/models/rfd3/docs/examples/atom23_design.json @@ -1,4 +1,9 @@ { + "multipolymer": { + "contig": "40-50R,/0,10-20D,/0,80-110", + "length": "130-180", + "input": "../input_pdbs/AMP.pdb" + }, "W05": { "ss_dbn": ".(((((((((((((((((((..[[[[[[.)))))(((....)))(((....)))))))))))))))))((((((..]]]]]].)))))).", "select_fixed_atoms": false, @@ -66,8 +71,28 @@ "C1-4": "ALL", "C79-86": "ALL" } - } - - + }, + "dict_input_ss": { + "ss_dbn_dict": { + "A6-25":"(((..)))....(((..)))", + "B1-20":"((((..))))...((...))" + }, + "contig":"30-30R,/0,30-30R", + "length":"60-60", + "input":"../input_pdbs/AMP.pdb" + }, + "paired_region_input_ss": { + "paired_region_list": ["A20-25,B10-15"], + "loop_region_list":["A10-19","B20-30"], + "contig":"50-50R,/0,50-50R", + "length":"100-100", + "input":"../input_pdbs/AMP.pdb" + }, + "paired_position_input_ss": { + "paired_position_list": ["A3,B3","A5,B5","A7,B7","A9,B9","A11,B11","A13,B13","A15,B15","A17,B17","A19,B19"], + "contig":"20-20R,/0,20-20R", + "length":"40-40", + "input":"../input_pdbs/AMP.pdb" + } } diff --git a/models/rfd3/docs/examples/atom23_design.md b/models/rfd3/docs/examples/atom23_design.md new file mode 100644 index 00000000..ce6b1789 --- /dev/null +++ b/models/rfd3/docs/examples/atom23_design.md @@ -0,0 +1,228 @@ +# RNA / DNA Design in RFdiffusion3 + +This guide describes extensions to RFdiffusion3 for nucleic acid and hybrid RNA–protein design, including: + +- RNA/DNA-aware contigs (`R` / `D` suffix) +- Ligand-conditioned aptamer design +- Secondary structure (SS) conditioning +- Base-pair constraints (region- and position-level) +- Partial structure fixing and unindexing + +--- + +## 1. Contig Syntax for RNA/DNA + +Contigs now support nucleic acid specification: + +- `R` → RNA segment +- `D` → DNA segment +- No suffix → protein (default) + +### Example + +```json +{ + "contig": "40-50R,/0,10-20D,/0,80-110" +} +``` +This corresponds to: 40–50 nt RNA, chain break, 10–20 nt DNA, chain break, 80–110 aa protein + +Multipolymer Design + +```json + +{ + "multipolymer": { + "contig": "40-50R,/0,10-20D,/0,80-110", + "length": "130-180", + "input": "../input_pdbs/AMP.pdb" + } +} +``` + +## 2. Secondary Structure Conditioning +### 2.1 Dot-Bracket Notation (Global) +```json +{ + "W05": { + "ss_dbn": ".(((((((((((((((((((..[[[[[[.)))))(((....)))(((....)))))))))))))))))((((((..]]]]]].)))))).", + "select_fixed_atoms": false, + "contig": "90-90R", + "length": "90-90", + "input": "../input_pdbs/AMP.pdb" + } +} +``` +`ss_dbn` specifies full RNA secondary structure + +Will be applied to the first L tokens, where L is the length of `ss_dbn`. + +### 2.2 Dictionary-Based SS Input + +Specify secondary structure for subsections: +``` json +{ + "ss_dbn_dict": { + "A6-25": "(((..)))....(((..)))", + "B1-20": "((((..))))...((...))" + } +} +``` +Used in: +``` json +{ + "dict_input_ss": { + "ss_dbn_dict": { + "A6-25": "(((..)))....(((..)))", + "B1-20": "((((..))))...((...))" + }, + "contig": "30-30R,/0,30-30R", + "length": "60-60", + "input": "../input_pdbs/AMP.pdb" + } +} +``` +## 3. Base Pair region Conditioning +### 3.1 Paired Regions + +Define paired and loop regions: +```json +{ + "paired_region_list": ["A20-25,B10-15"], + "loop_region_list": ["A10-19","B20-30"] +} +``` +Enforces pairing and loop propensity between residue ranges during sampling + +Used in: +```json +{ + "paired_region_input_ss": { + "paired_region_list": ["A20-25,B10-15"], + "loop_region_list": ["A10-19","B20-30"], + "contig": "50-50R,/0,50-50R", + "length": "100-100", + "input": "../input_pdbs/AMP.pdb" + } +} +``` + +### 3.2 Explicit Base Pair Positions + +Fine-grained base pairing control: + +```json +{ + "paired_position_list": [ + "A3,B3","A5,B5","A7,B7","A9,B9","A11,B11", + "A13,B13","A15,B15","A17,B17","A19,B19" + ] +} +``` +Used in: +```json +{ + "paired_position_input_ss": { + "paired_position_list": [ + "A3,B3","A5,B5","A7,B7","A9,B9","A11,B11", + "A13,B13","A15,B15","A17,B17","A19,B19" + ], + "contig": "20-20R,/0,20-20R", + "length": "40-40", + "input": "../input_pdbs/AMP.pdb" + } +} +``` +### Note: Most of the above jsons is not actually reading the `input` field. Kept as a dummy for the `inference3_engine`. + +## 4. Ligand-Conditioned Aptamer Design + +Supports small molecule binding RNA design. + +AMP Aptamer Example +```json +{ + "AMP_aptamer": { + "input": "../input_pdbs/AMP.pdb", + "ligand": "AMP", + "contig": "40-50R", + "length": "40-50", + "ori_jitter": 1, + "select_buried": {"AMP": "ALL"}, + "select_hbond_acceptor": { + "AMP": "N7,O4',O1P,O2P,O3P,N3,N1" + }, + "select_hbond_donor": { + "AMP": "N6,O3',O2'" + } + } +} +``` +Key Options + +`ligand`: ligand name in the input PDB + +`select_buried`: enforce burial of ligand atoms + +`select_hbond_acceptor` / `select_hbond_donor`: suggest Hbond interaction atoms + +`ori_jitter`: small random perturbation of ori token (from ligand COM) + + +## 5. Hybrid RNA–Protein Design with Constraints +### RNase P Active Site Example + +```json +{ + "unindexed_rnasep": { + "input": "../input_pdbs/rnase_p_3q1q_active_site_small.pdb", + "contig": "50-80R,/0,100-120,/0,C1-4,C79-86", + "length": "162-212", + "ligand": "MG,PO4", + "unindex": "B49,B50,B51,B52,B321,/0,A56-58,/0", + "select_fixed_atoms": { + "B49": "ALL", + "B50": "ALL", + "B51": "ALL", + "B52": "ALL", + "B321": "ALL", + "A56-58": "ALL", + "C1-4": "ALL", + "C79-86": "ALL" + } + } +} +``` +Key Features + +Mixed RNA + protein + fixed fragments + +`unindex`: removes residues from positional indexing + +`select_fixed_atoms`: freezes specified atoms + +Ligands (MG, PO4) included in design context + +Useful for catalytic residues or structural motifs + +## 7. Summary of New Features + +R / D suffix → RNA / DNA specification in contigs + +`ss_dbn` → global secondary structure constraint (optional) + +`ss_dbn_dict` → local secondary structure constraints (optional) + +`paired_region_list` → helix-level pairing constraints (optional) + +`paired_position_list` → base-level pairing constraints (optional) + +ligand + selection options → aptamer design + +`unindex` → remove residues from indexing + +`select_fixed_atoms` → freeze structural elements + + +--- + From 24e92c0b4333c136ec6aafda2d1718c243fd04cb Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Sat, 28 Mar 2026 11:57:37 -0700 Subject: [PATCH 48/49] cleanup --- models/rfd3/docs/examples/atom23_design.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/models/rfd3/docs/examples/atom23_design.md b/models/rfd3/docs/examples/atom23_design.md index ce6b1789..f0f3f53a 100644 --- a/models/rfd3/docs/examples/atom23_design.md +++ b/models/rfd3/docs/examples/atom23_design.md @@ -205,19 +205,19 @@ Ligands (MG, PO4) included in design context Useful for catalytic residues or structural motifs -## 7. Summary of New Features +## 7. Summary of Features Used R / D suffix → RNA / DNA specification in contigs -`ss_dbn` → global secondary structure constraint (optional) +`ss_dbn` → global secondary structure constraint -`ss_dbn_dict` → local secondary structure constraints (optional) +`ss_dbn_dict` → local secondary structure constraints -`paired_region_list` → helix-level pairing constraints (optional) +`paired_region_list` → helix-level pairing constraints -`paired_position_list` → base-level pairing constraints (optional) +`paired_position_list` → base-level pairing constraints -ligand + selection options → aptamer design +ligand + selection options → aptamer design `unindex` → remove residues from indexing From 6462d22ecf784e00984abb4448baf27708537ace Mon Sep 17 00:00:00 2001 From: Raktim Mitra Date: Sat, 28 Mar 2026 12:04:48 -0700 Subject: [PATCH 49/49] main readme updates --- models/rfd3/README.md | 16 +++++++++------- models/rfd3/docs/examples/atom23_design.md | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/models/rfd3/README.md b/models/rfd3/README.md index 0886afc0..bdbf0dd0 100644 --- a/models/rfd3/README.md +++ b/models/rfd3/README.md @@ -1,6 +1,6 @@ # De novo Design of Biomolecular Interactions with RFdiffusion3 -RFdiffusion3 (RFD3) is a diffusion method that can design protein structures +RFdiffusion3 (RFD3) is a diffusion method that can design biopolymer structures under complex constraints. This repository contains both the training and inference code, and @@ -62,6 +62,8 @@ For example, you can fix sequence and not structure (prediction-type task), fix For full details on how to specify inputs, see the [input specification documentation](./docs/input.md). You can also see `foundry/models/rfd3/configs/inference_engine/rfdiffusion3.yaml` for even more options. +Nucleic acid design, along with proteins, is also possible using RFD3 using the atom23 checkpoints. For full details see the [atom23 design documentation](./docs/examples/atom23_design.md) + ## Further example JSONs for different applications Additional examples are broken up by use case. If you have cloned the repository, matching `.json` files are in `foundry/models/rfd3/docs/examples` @@ -75,30 +77,30 @@ you will need to change the path in the `.json` file(s) before running. diff --git a/models/rfd3/docs/examples/atom23_design.md b/models/rfd3/docs/examples/atom23_design.md index f0f3f53a..91f54ebc 100644 --- a/models/rfd3/docs/examples/atom23_design.md +++ b/models/rfd3/docs/examples/atom23_design.md @@ -133,7 +133,7 @@ Used in: } } ``` -### Note: Most of the above jsons is not actually reading the `input` field. Kept as a dummy for the `inference3_engine`. +### Note: Most of the above jsons is not actually reading the `input` field. Kept as a dummy for the `inference_engine`. ## 4. Ligand-Conditioned Aptamer Design
-

Small molecule binder design

+

Small molecule binder design

-

Protein binder design

+

Protein binder design

-

Nucleic acid binder design

+

Nucleic acid binder design

-

Enzyme design

+

Enzyme design

-

Symmetric design

+

Symmetric design

-

Multipolymer design

+

Multipolymer design

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,njsO^r>J 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%0APfV;vM?+YmR12W<*H#I@^1F?R<=dC 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 literal 158871 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