Download scripts/export_wetlab.py from REXWind/ouroboros: direct link, hf CLI and curl.
- Browser
- Download file 5.35 kB
-
https://huggingface.co/spaces/REXWind/ouroboros/resolve/main/scripts/export_wetlab.py
- Command line
-
hf download hf://spaces/REXWind/ouroboros/scripts/export_wetlab.py
-
curl -L -o export_wetlab.py https://huggingface.co/spaces/REXWind/ouroboros/resolve/main/scripts/export_wetlab.py
5.35 kB
| """Export matched experimental data and ESMFold structures; never substitute sequences.""" | |
| import csv | |
| import hashlib | |
| import json | |
| import shutil | |
| from pathlib import Path | |
| ROOT=Path(__file__).resolve().parents[1] | |
| AUDIT=ROOT.parent/'Ouroboros_Showcase_Research/wetlab_20260927' | |
| PUBLIC=ROOT/'public' | |
| AA=dict(zip('ALA ARG ASN ASP CYS GLN GLU GLY HIS ILE LEU LYS MET PHE PRO SER THR TRP TYR VAL UNK'.split(),'ARNDCQEGHILKMFPSTWYVX')) | |
| def digest(path):return hashlib.sha256(path.read_bytes()).hexdigest() | |
| def save(path,data):path.write_text(json.dumps(data,ensure_ascii=False,indent=2)+'\n') | |
| def main(): | |
| import xlrd | |
| original=AUDIT/'PETde实验情况20260927.xls' | |
| sheet=xlrd.open_workbook(original,use_mmap=False).sheet_by_index(0) | |
| sequences=json.loads((AUDIT/'sequence_mapping.json').read_text()) | |
| generation=json.loads((AUDIT/'de2_generation.json').read_text()) | |
| manifest=json.loads((AUDIT/'fold_results/manifest.json').read_text()) | |
| ids=['de2','rcsb_5XG0_IsPETase','rcsb_4EB0_LCC','rcsb_7EOA_BhrPETase'] | |
| assert len(manifest)==len(ids) | |
| names={'rcsb_5XG0_IsPETase':('IsPETase','Y1','5XG0'),'rcsb_4EB0_LCC':('LCC','Y2','4EB0'),'rcsb_7EOA_BhrPETase':('BhrPETase','Y3','7EOA')} | |
| cases=[] | |
| for index,fid in enumerate(ids): | |
| row=next(r for r in sequences if r['id']==fid) | |
| fold=next(r for r in manifest if r['sequence_id']==f'{index:04d}') | |
| seq=row['sequence'];assert hashlib.sha256(seq.encode()).hexdigest()==fold['source_pred_seq_sha256'] | |
| pdb=AUDIT/'fold_results'/fold['pdb_file'] | |
| atoms=[line for line in pdb.read_text().splitlines() if line.startswith('ATOM') and line[12:16].strip()=='CA'] | |
| assert ''.join(AA[s[17:20]] for s in atoms)==seq | |
| residues=[dict(index=int(s[22:26]),chain=s[21].strip(),code=AA[s[17:20]],confidence=float(s[60:66])) for s in atoms] | |
| design=fid=='de2' | |
| name,sample,pdb_id=('de2','de2',None) if design else names[fid] | |
| if design:assert generation['sequence'].replace(' ','')==seq | |
| provenance=(f"Exact sequence match: submitted de2 FASTA → group_02.part_1530 → petase_lora_2891 → lora_petase_3epoch/test/test_result.json, prediction index {generation['predictionIndex0']} (zero-based). Original prompt recovered from the same generation record." if design else f"Supplied wild-type reference FASTA: {fid}.fasta, labeled {pdb_id}. Matched by name to assay sample {sample}. This view is a new ESMFold prediction of the supplied sequence.") | |
| case=dict(id=name,assetId='wetlab-'+fid,title=name,kind='design' if design else 'wildtype',modelLabel='LoRA-generated' if design else 'WT reference',assaySample=sample,cohort='PETase wet-lab report · 2026-09-27',rank=1 if design else 0,cohortSize=4,sequence=seq,length=len(seq),residues=residues,prompt=generation['prompt'] if design else '',plddt=sum(r['confidence'] for r in residues)/len(residues),pae=fold['mean_pae'],pdbUrl=f'/structures/wetlab-{fid}.pdb',fastaUrl=f'/structures/wetlab-{fid}.fasta',selection='Selected by highest reported TPA + MHET among the four measured designs.' if design else f'Wild-type reference {name}, assay sample {sample}.',structureStatus='ESMFold-v1 prediction of submitted FASTA',experimentalStatus='Reported TPA and MHET concentrations are available in the 2026-09-27 workbook. Assay conditions and replication are awaiting confirmation.',provenance=provenance,pdbSha256=digest(pdb),sequenceSha256=row['sha256'],foldJob='ouroboros-wetlab-de2-1009b',foldMethod='ESMFold-v1',residueConfidenceDefinition='Mean of CA B factors in the exported ESMFold PDB') | |
| shutil.copyfile(pdb,PUBLIC/'structures'/f'wetlab-{fid}.pdb') | |
| cases.append(case) | |
| audit=json.loads((AUDIT/'assay_audit.json').read_text()) | |
| for row in audit['rows']: | |
| i=row['sourceRow']-1 | |
| assert sheet.cell_value(i,1)==row['id'] | |
| for col,key in [(3,'tpa'),(4,'mhet'),(5,'total')]:assert sheet.cell_value(i,col)==row[key] | |
| assert abs(row['tpa']+row['mhet']-row['total'])<1e-7 | |
| for row in sequences:shutil.copyfile(AUDIT/(row['id']+'.fasta'),PUBLIC/'structures'/('wetlab-'+row['id']+'.fasta')) | |
| audit['generation']={k:v for k,v in generation.items() if k not in ['referenceSequence','sequence']} | |
| audit['structurePrediction']={'method':'ESMFold-v1','job':'ouroboros-wetlab-de2-1009b','manifestSha256':digest(AUDIT/'fold_results/manifest.json'),'date':'2026-10-09','experimentalStructure':False} | |
| save(PUBLIC/'data/wetlab.json',audit) | |
| save(PUBLIC/'data/petase-wetlab-structures.json',cases) | |
| save(PUBLIC/'data/petase.json',[c for c in cases if c['id'] in ['de2','IsPETase']]) | |
| provenance=json.loads((PUBLIC/'data/provenance.json').read_text()) | |
| provenance['petase']='de2 from the LoRA 3-epoch generation archive; featured by reported wet-lab product concentration. Three provided WT reference sequences are included. Earlier confidence-ranked candidates remain in petase-archive.json.' | |
| provenance['wetlab']={'report':audit['source'],'sequenceMatches':[{'id':r['id'],'sha256':r['sha256'],'generationMatches':r.get('exactMatches',[])} for r in sequences],'structurePrediction':audit['structurePrediction']} | |
| save(PUBLIC/'data/provenance.json',provenance) | |
| print(json.dumps([{'id':r['id'],'length':r['length'],'plddt':r['plddt']} for r in cases],indent=2)) | |
| if __name__=='__main__':main() | |