import json,math,itertools
from pathlib import Path
import pysam,pybigtools
r=Path(__file__).resolve().parent;fa=pysam.FastaFile('/net/users/voy/nmf/data_itcr/cnTFeffects/script1_output/hg38.fa');report={}
for acc in ['ENCFF564PMV','ENCFF183YWR']:
 bw=pybigtools.open(str(r/(acc+'.bigWig')));bed=pysam.TabixFile(str(r/(acc+'.hg38.dynseq.bgz')));checked=0
 for chrom in bed.contigs:
  for lo in [0,bw.chroms()[chrom]//2]:
   rows=list(itertools.islice(bed.fetch(chrom,lo),100))
   if not rows:continue
   start=int(rows[0].split('\t')[1]);end=int(rows[-1].split('\t')[2]);seq=fa.fetch(chrom,start,end).upper()
   records=list(bw.records(chrom,start,end));k=0
   for row in rows:
    c,s,e,base,mag,sign=row.split('\t');s=int(s);e=int(e)
    while records[k][1]<=s:k+=1
    rs,re,v=records[k]
    assert rs<=s<re and e==s+1 and base==seq[s-start]
    assert sign==('+' if v>0 else '-') and math.isclose(float(mag),abs(v),rel_tol=1e-8)
    checked+=1
 report[acc]={'compared_bases':checked,'populated_contigs':list(bed.contigs),'reference_and_score_checks':True}
print(json.dumps(report,indent=2));(r/'validation.json').write_text(json.dumps(report,indent=2)+'\n')
