123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145openCore_kernelletpwm_archive_url="http://cisbp.ccbr.utoronto.ca/data/1.02/DataFiles/Bulk_downloads/EntireDataset/PWMs.zip"lettf_information_archive_url="http://cisbp.ccbr.utoronto.ca/data/1.02/DataFiles/Bulk_downloads/EntireDataset/TF_Information_all_motifs.txt.zip"moduleTF_information=structtypeitem={tf_id:string;family_id:string;tsource_id:string;motif_id:stringoption;msource_id:stringoption;dbid:string;tf_name:string;tf_species:string;tf_status:string;family_name:string;dbds:stringlist;dbd_count:int;cutoff:float;dbid2:stringoption;motif_type:stringoption;msource_identifier:stringoption;msource_type:stringoption;msource_author:stringoption;msource_year:intoption;pmid:stringoption;msource_version:stringoption;tfsource_name:string;tfsource_url:string;tfsource_year:int;tfsource_month:string;tfsource_day:int;}typet=itemlistletoptf=function|"."->None|s->Some(fs)letstringx=xletintx=Int.of_stringxletfloatx=Float.of_stringxletlistfx=String.split~on:','x|>List.map~fletparse_fields=function|[tf_id;family_id;tsource_id;motif_id;msource_id;dbid;tf_name;tf_species;tf_status;family_name;dbds;dbd_count;cutoff;dbid2;motif_type;msource_identifier;msource_type;msource_author;msource_year;pmid;msource_version;tfsource_name;tfsource_url;tfsource_year;tfsource_month;tfsource_day;]->{tf_id;family_id;tsource_id;motif_id=optstringmotif_id;msource_id=optstringmsource_id;dbid;tf_name;tf_species;tf_status;family_name;dbds=liststringdbds;dbd_count=intdbd_count;cutoff=floatcutoff;dbid2=optstringdbid2;motif_type=optstringmotif_type;msource_identifier=optstringmsource_identifier;msource_type=optstringmsource_type;msource_author=optstringmsource_author;msource_year=optintmsource_year;pmid=optstringpmid;msource_version=optstringmsource_version;tfsource_name;tfsource_url;tfsource_year=inttfsource_year;tfsource_month;tfsource_day=inttfsource_day;}|fields->failwithf"incorrect line format: %s"(String.concat~sep:"\t"fields)()letfrom_filefn=In_channel.read_allfn|>String.split~on:'\n'|>Fn.flipList.drop1|>List.filter~f:(String.(<>)"")|>List.map~f:(String.split~on:'\t')|>List.map~f:parse_fieldsendmoduleMotif=structtypet=floatarrayarrayletparse_linel=letf=Float.of_stringinmatchString.splitl~on:'\t'with|[_;a;c;g;t]->[|fa;fc;fg;ft|]|_->failwithf"Cis_bp.Motif.parse_line: unable to parse %s"l()letfrom_filefn=In_channel.read_linesfn|>Fn.flipList.drop1|>List.map~f:parse_line|>Array.of_listletread_all_in_dirdir=Sys.readdirdir|>Array.to_list|>List.filter~f:(Fn.flipFilename.check_suffix".txt")|>List.map~f:(funfn->fn,from_file(Filename.concatdirfn))letpwmm=letbg=Pwm.flat_background()inArray.mapm~f:(funpos->Array.mappos~f:(funp->Float.to_int(p*.100.)))|>Fn.flipPwm.makebgend