From 83c1bb37982fcc354fee798f8cdba74c5e629323 Mon Sep 17 00:00:00 2001 From: dylanyang Date: Fri, 30 Oct 2026 11:44:58 +0900 Subject: [PATCH 1/2] Remove local filesystem paths from the package The packaged E-value parameters named the calibration database by an absolute path on a developer machine; keep only its file name, and have calibrate.py record the file name instead of the resolved path. The edges.py demo now takes the structure path from the command line. --- rfoldsearch/assets/evalue_params.json | 2 +- rfoldsearch/calibrate.py | 2 +- rfoldsearch/edges.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rfoldsearch/assets/evalue_params.json b/rfoldsearch/assets/evalue_params.json index 8306d36..07efb88 100644 --- a/rfoldsearch/assets/evalue_params.json +++ b/rfoldsearch/assets/evalue_params.json @@ -1 +1 @@ -{"scheme":"cluster-max-query-conditional-power","gap_open":-2.0,"gap_extend":-0.5,"seed":0,"len_ratio":null,"calibration_database":"/Users/cassie/Desktop/RFoldSearch-paper-code/files/models/db.pt","n_clusters":882,"n_chains":885,"query_parameter_model":{"distribution":"Gumbel","feature_order":["intercept","z_log_length","z_token_entropy"],"centre":{"log_length_mean":5.405412276932465,"log_length_scale":1.4314640237189997,"entropy_mean":5.108781332445416,"entropy_scale":0.8183067132985551},"training_domain":{"log_length_min":2.995732273553991,"log_length_max":8.392989587956931,"entropy_min":2.440820042086996,"entropy_max":6.263660143519078},"coefficients_mu_logbeta":[[6.314071261583727,0.8335121835572201],[1.0014082494503802,0.14515852489140346],[-0.9753767472278257,-0.2643183809393454]],"ridge":0.001},"skipped_lengths":[],"length_table":[{"length":20,"mu":3.681607851452168,"beta":2.2049071982506163,"lambda":0.4535338270895957,"n_maxima":7715},{"length":30,"mu":4.318213830212868,"beta":2.142801718467983,"lambda":0.46667873717917296,"n_maxima":12559},{"length":40,"mu":4.671987618454014,"beta":2.635210346382038,"lambda":0.37947634858558105,"n_maxima":14846},{"length":60,"mu":5.474719895978278,"beta":2.805932581122761,"lambda":0.3563877502715556,"n_maxima":15201},{"length":80,"mu":5.772794615881089,"beta":2.7694398030699623,"lambda":0.3610838548978339,"n_maxima":13125},{"length":120,"mu":7.259581991124825,"beta":2.932889103734647,"lambda":0.3409607266523075,"n_maxima":12053},{"length":160,"mu":7.58952147947528,"beta":2.9673456230981414,"lambda":0.33700152493726754,"n_maxima":11095},{"length":220,"mu":8.220892333062306,"beta":2.7725828084310318,"lambda":0.3606745295250124,"n_maxima":8031},{"length":300,"mu":8.720539493252323,"beta":3.148145760014543,"lambda":0.31764729978556666,"n_maxima":4087},{"length":500,"mu":8.450259640284866,"beta":2.4765796813949943,"lambda":0.4037826876770326,"n_maxima":2372},{"length":1000,"mu":9.312368469128588,"beta":1.7573420575198044,"lambda":0.5690411810955764,"n_maxima":2055},{"length":2000,"mu":10.829700401390879,"beta":4.004095918502507,"lambda":0.24974426695901686,"n_maxima":1826}],"clusters":"cd-hit-est -c 0.8 -n 5 -aS 0.8 -aL 0.8 -g 1","null":"full-database cluster maxima after excluding the query cluster, same Rfam family or clan, and adjudicated structural relatives; excluded leaders are backfilled within cluster","note":"Database-specific Gumbel mu and log(beta) are predicted by a linear ridge model [1, z(log query length), z(3Dr-token entropy)] fitted from per-query full-database cluster maxima. The length table is retained only as a compatibility fallback. The power-law correction was refitted after the US-align audit of the background was completed through E0 <= 100; the Gumbel model is unchanged.","search_scope":"full_database","validation":{"search_scope":"full_database","cross_validation":"nested leave-one-Rfam-family-out; all components refitted in each training fold","database_sha256":"dc6ce2f01f130fea15ec7d3dd67b5c3a555e55370a43587017ea6bdb7cb2f169","substitution_matrix_sha256":"adb51e94666b085c492150eeda6878c0fb1a3bdb85cc12088b66b2b3ac6ece37","rfam_pdb_full_region_sha256":"eb5f4444536934fe4e84613031023574ec86c36c49f589258dd0486c26a0dc03","rfam_clan_membership_sha256":"2f199aaaa0a1e340145acb8fa20639427d1c0a38f4dedce29901888f222afbec","usalign_sha256":"61ac31ab591cfccf06aea9972437eed2b35c358445d4b6baaa29e61547731b39","n_usalign_candidates":44692,"n_structurally_related_members_excluded":1364,"status":"background-audit-complete","fixed_point_audit":{"audited_e0_ceiling":100.0,"pending_leader_audits_to_fit_maximum":0,"fit_e0_max":100.0},"lofo_power_observed_over_nominal":{"0.01":1.56,"0.1":0.56,"1":0.95,"10":0.89,"100":0.99},"lofo_power_protocol":"family-weighted leave-one-Rfam-family-out over 516 queries in 96 families; Gumbel model fixed, power law refitted in each fold","background_audit":"US-align (mean TM >= 0.45 is related) of every retained cluster leader with E0 <= 100 for the 516 Rfam-labelled queries of Splits/labels.tsv"},"target_database_fingerprint":"57c84bf6a0a0f6fc4ee77e67d54c60db93b4461576eb135bb382f59ee56e2ddf","calibration_context_fingerprint":"c92913298c17aeb6eab25e059e39b51f074b94de015b6762a4ddfcb906ef839d","power_calibration":{"scheme":"power-law","a":1.7796646845845532,"b":0.9096246520395346,"fit_raw_evalue_min":0.0001434105763656027,"fit_raw_evalue_max":99.99407725040136,"fit_grid_points":96,"n_observations":32143,"total_weight":141.16833147680342,"n_clusters":882,"weighting":"equal-family, equal-query-within-family, with experimental annotated-background expansion N_D/B_q","n_calibration_queries":516,"n_families":96,"background_scaling":"annotated-to-full","validation_status":"background-audit-complete","structural_audit_ceiling":100.0,"fit_raw_evalue_ceiling":100.0,"tm_threshold":0.45}} +{"scheme":"cluster-max-query-conditional-power","gap_open":-2.0,"gap_extend":-0.5,"seed":0,"len_ratio":null,"calibration_database":"db.pt","n_clusters":882,"n_chains":885,"query_parameter_model":{"distribution":"Gumbel","feature_order":["intercept","z_log_length","z_token_entropy"],"centre":{"log_length_mean":5.405412276932465,"log_length_scale":1.4314640237189997,"entropy_mean":5.108781332445416,"entropy_scale":0.8183067132985551},"training_domain":{"log_length_min":2.995732273553991,"log_length_max":8.392989587956931,"entropy_min":2.440820042086996,"entropy_max":6.263660143519078},"coefficients_mu_logbeta":[[6.314071261583727,0.8335121835572201],[1.0014082494503802,0.14515852489140346],[-0.9753767472278257,-0.2643183809393454]],"ridge":0.001},"skipped_lengths":[],"length_table":[{"length":20,"mu":3.681607851452168,"beta":2.2049071982506163,"lambda":0.4535338270895957,"n_maxima":7715},{"length":30,"mu":4.318213830212868,"beta":2.142801718467983,"lambda":0.46667873717917296,"n_maxima":12559},{"length":40,"mu":4.671987618454014,"beta":2.635210346382038,"lambda":0.37947634858558105,"n_maxima":14846},{"length":60,"mu":5.474719895978278,"beta":2.805932581122761,"lambda":0.3563877502715556,"n_maxima":15201},{"length":80,"mu":5.772794615881089,"beta":2.7694398030699623,"lambda":0.3610838548978339,"n_maxima":13125},{"length":120,"mu":7.259581991124825,"beta":2.932889103734647,"lambda":0.3409607266523075,"n_maxima":12053},{"length":160,"mu":7.58952147947528,"beta":2.9673456230981414,"lambda":0.33700152493726754,"n_maxima":11095},{"length":220,"mu":8.220892333062306,"beta":2.7725828084310318,"lambda":0.3606745295250124,"n_maxima":8031},{"length":300,"mu":8.720539493252323,"beta":3.148145760014543,"lambda":0.31764729978556666,"n_maxima":4087},{"length":500,"mu":8.450259640284866,"beta":2.4765796813949943,"lambda":0.4037826876770326,"n_maxima":2372},{"length":1000,"mu":9.312368469128588,"beta":1.7573420575198044,"lambda":0.5690411810955764,"n_maxima":2055},{"length":2000,"mu":10.829700401390879,"beta":4.004095918502507,"lambda":0.24974426695901686,"n_maxima":1826}],"clusters":"cd-hit-est -c 0.8 -n 5 -aS 0.8 -aL 0.8 -g 1","null":"full-database cluster maxima after excluding the query cluster, same Rfam family or clan, and adjudicated structural relatives; excluded leaders are backfilled within cluster","note":"Database-specific Gumbel mu and log(beta) are predicted by a linear ridge model [1, z(log query length), z(3Dr-token entropy)] fitted from per-query full-database cluster maxima. The length table is retained only as a compatibility fallback. The power-law correction was refitted after the US-align audit of the background was completed through E0 <= 100; the Gumbel model is unchanged.","search_scope":"full_database","validation":{"search_scope":"full_database","cross_validation":"nested leave-one-Rfam-family-out; all components refitted in each training fold","database_sha256":"dc6ce2f01f130fea15ec7d3dd67b5c3a555e55370a43587017ea6bdb7cb2f169","substitution_matrix_sha256":"adb51e94666b085c492150eeda6878c0fb1a3bdb85cc12088b66b2b3ac6ece37","rfam_pdb_full_region_sha256":"eb5f4444536934fe4e84613031023574ec86c36c49f589258dd0486c26a0dc03","rfam_clan_membership_sha256":"2f199aaaa0a1e340145acb8fa20639427d1c0a38f4dedce29901888f222afbec","usalign_sha256":"61ac31ab591cfccf06aea9972437eed2b35c358445d4b6baaa29e61547731b39","n_usalign_candidates":44692,"n_structurally_related_members_excluded":1364,"status":"background-audit-complete","fixed_point_audit":{"audited_e0_ceiling":100.0,"pending_leader_audits_to_fit_maximum":0,"fit_e0_max":100.0},"lofo_power_observed_over_nominal":{"0.01":1.56,"0.1":0.56,"1":0.95,"10":0.89,"100":0.99},"lofo_power_protocol":"family-weighted leave-one-Rfam-family-out over 516 queries in 96 families; Gumbel model fixed, power law refitted in each fold","background_audit":"US-align (mean TM >= 0.45 is related) of every retained cluster leader with E0 <= 100 for the 516 Rfam-labelled queries of Splits/labels.tsv"},"target_database_fingerprint":"57c84bf6a0a0f6fc4ee77e67d54c60db93b4461576eb135bb382f59ee56e2ddf","calibration_context_fingerprint":"c92913298c17aeb6eab25e059e39b51f074b94de015b6762a4ddfcb906ef839d","power_calibration":{"scheme":"power-law","a":1.7796646845845532,"b":0.9096246520395346,"fit_raw_evalue_min":0.0001434105763656027,"fit_raw_evalue_max":99.99407725040136,"fit_grid_points":96,"n_observations":32143,"total_weight":141.16833147680342,"n_clusters":882,"weighting":"equal-family, equal-query-within-family, with experimental annotated-background expansion N_D/B_q","n_calibration_queries":516,"n_families":96,"background_scaling":"annotated-to-full","validation_status":"background-audit-complete","structural_audit_ceiling":100.0,"fit_raw_evalue_ceiling":100.0,"tm_threshold":0.45}} diff --git a/rfoldsearch/calibrate.py b/rfoldsearch/calibrate.py index f926f47..c76b34b 100644 --- a/rfoldsearch/calibrate.py +++ b/rfoldsearch/calibrate.py @@ -238,7 +238,7 @@ def is_audited(first, second): "gap_extend": GAP_EXTEND, "seed": seed, "len_ratio": len_ratio, - "calibration_database": str(Path(db_path).resolve()), + "calibration_database": Path(db_path).name, "n_clusters": fitted["n_clusters"], "n_chains": fitted["n_chains"], "target_database_fingerprint": target_fingerprint, diff --git a/rfoldsearch/edges.py b/rfoldsearch/edges.py index 426d93a..f020612 100644 --- a/rfoldsearch/edges.py +++ b/rfoldsearch/edges.py @@ -137,8 +137,8 @@ def find_base_pair_and_stack_edges(*args, **kwargs): if __name__ == '__main__': - path = "/Users/cassie/Desktop/train/PDB_00001DDY_1_A.cif" - out = find_base_pair_and_stack_idx(path) + import sys + out = find_base_pair_and_stack_idx(sys.argv[1]) print("pair_idx:\n", out["pair_idx"]) print("pair_orient:\n", out["pair_orient"]) print("stack_idx:\n", out["stack_idx"]) From b789ecf561af82cccb4738b0dfe64922cdc204f4 Mon Sep 17 00:00:00 2001 From: dylanyang Date: Fri, 30 Oct 2026 13:43:32 +0900 Subject: [PATCH 2/2] webserver README: drop the sw hit fields, removed with the sw mode in #37 --- webserver/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/webserver/README.md b/webserver/README.md index 5992922..d2ec953 100644 --- a/webserver/README.md +++ b/webserver/README.md @@ -111,9 +111,8 @@ curl -sF structure=@query.cif -F databases=pdb-rna,rnasolo -F top_k=5 \ `tm_a` hits carry `structure_score`, `tm_a`, `aligned`, `sw_score`, `bits`, and `evalue`; the E-value is derived from `sw_score`, not `structure_score`. -`sw` hits carry `sw_score`, `bits` and `evalue`; `tm` hits carry -`tm_mean`, `tm_query` and `tm_target` and no E-value, because TM-scores -have no Karlin-Altschul statistics. Hits within `RFOLDSEARCH_ALIGN_MAX` carry +`tm` hits carry `tm_mean`, `tm_query` and `tm_target` and no E-value, +because TM-scores have no Karlin-Altschul statistics. Hits within `RFOLDSEARCH_ALIGN_MAX` carry `aln`: aligned ranges, sequence and 3Dr alignment lines, sequence and 3Dr identity, and the C4' RMSD and TM-score of the superposition over the aligned pairs. The alignment is recomputed with a full traceback