ONTS =\
biological_process_xp_cell\
biological_process_xp_cellular_component\
biological_process_xp_chebi\
biological_process_xp_protein\
biological_process_xp_fly_anatomy\
biological_process_xp_human_anatomy\
biological_process_xp_multi_organism_process\
biological_process_xp_plant_anatomy\
biological_process_xp_self\
biological_process_xp_sequence_molecule\
biological_process_xp_stimulus\
biological_process_xp_uber_anatomy\
biological_process_xp_zebrafish_anatomy\
cellular_component_xp_go\
cellular_component_xp_self\
cellular_component_xp_self_Xpart\
molecular_function_xp_chebi\
molecular_function_xp_protein\
pro2uniprot

#biological_process_xp_multi_organism_process_full
#go_xp_internal
#biological_process_xp_pamgo_new\

RELONTS = relations_process_xp_cell relations_process_xp ro ro_ucdhsc

GO = ../../ontology/editors/gene_ontology_write.obo

all: all_newlinks

all_latest: update all

update: update_go update_obo

update_go:
	cd $(HOME)/cvs/go && cvs update
update_obo:
	cd $(HOME)/cvs/obo && cvs update


all_abduced: $(patsubst %,%-abduced-links.txt,$(ONTS))
all_newlinks: $(patsubst %,%-newlinks.txt,$(ONTS))

all_relstats: $(patsubst %,%.relstats,$(ONTS))

# currently anat only
go-with-xp.owl:
	owltools ../../ontology/editors/gene_ontology_write.obo biological_process_xp_uber_anatomy.obo relations_process_xp.obo biological_process_xp_cell.obo --merge-support-ontologies -o file://`pwd`/$@

oort:
	ontology-release-runner --outdir r/ --prefix http://purl.obolibrary.org/obo/GO_ --enforceEL --reasoner jcel --asserted --simple --re-mireot --allow-overwrite file://`pwd`/go-with-xp.owl http://purl.obolibrary.org/obo/uberon/merged.owl 


go_xp_all.obo:
	obo-simple-merge.pl $(patsubst %,%.obo,$(ONTS)) $(patsubst %,%.obo,$(RELONTS)) > $@

%.owl: %.obo
	obolib-obo2owl -o $@ $<
#	blip io-convert -to owl2 -i $< -u ontol_bridge_to_owl2_and_iao -o $@

%-import-newlinks.txt: %-import.obo
	ulimit -t 300 && blip-reasoner -import_all -i $< -explain genus_differentia -explain genus > $@.tmp && filterreasoner.pl $@.tmp | grep GO > $@

go-newlinks.txt:
	blip-reasoner -r go -explain genus_differentia -explain genus -explain equiv_class >  $@.tmp && filterreasoner.pl $@.tmp > $@ 

%-newlinks.txt: %.obo
	blip-reasoner -r go -i $< -explain genus_differentia -explain genus -explain equiv_class > $@.tmp && filterreasoner.pl $@.tmp | grep GO > $@

%-mismatch-differentium.txt: %.obo $(GO)
	blip-findall -r implied/go -i $< "differentium(X,R,Y),\+restriction(X,R,Y),solutions(R2,(restriction(X,R2,Y);subclass(X,Y),R2=is_a),Rs)" -select "differentium(X,Y,bad(R),consider(Rs))" -label > $@

%-mismatch-genus.txt: %.obo $(GO)
	blip-findall -table_pred ontol_db:bf_parentRT/2 -r go -i $< "genus(X,Y),\+subclassT(X,Y),(bf_parentRT(X,Y)->Related=otherwise_related;Related=not_related),solutions(Z,subclassT(X,Z),Zs)" -select "genus(X,Y,Related,consider,Zs)" -label > $@

%.relstats: %-imports.obo
	blip -import_all -i $< -u query_obo findall -label rel_summary/5 > $@.tmp && mv $@.tmp $@

%-part_ofs.txt: %-imports.obo
	blip-reasoner -import_all -i $< -explain development_rule > $@.tmp && mv $@.tmp $@

%-implied.obo: %-imports.obo
	obo2obo -o -saveimpliedlinks $@ $< >& $*-implied.log

biological_process_xp_%-minimir.obo: biological_process_xp_%.obo
	blip -r go -i $< -r $* -i relations_process_xp.obo ontol-query -mireot GO -to obo > $@.tmp && egrep -v "^(disj|domain|range)" $@.tmp > $@ && rm $@.tmp

biological_process_xp_%-minimir-merged.obo: biological_process_xp_%-minimir.obo
	obo2obo -o $@ $< $(GO)

%-mireot.obo: %.obo
	blip -i $< -r chebi_slim -r cell -r uberon -r go -r protein ontol-query -table_pred ontol_db:subclassT/2 -query "(differentium(X,_,Y);genus(X,Y)),id_idspace(X,'GO'),\+ id_idspace(Y,'GO'),subclassRT(Y,ID),class(ID)" -to obo > $@.tmp && cat $@.tmp > $@
.PRECIOUS: %-mireot.obo

%-supermireot.obo: %.obo
	blip -i $< -r chebi_slim -r cell -r uberon -r go -r protein ontol-query -table_pred ontol_db:bf_parentRT/2 -query "(differentium(X,_,Y);genus(X,Y)),(bf_parentRT(X,ID);bf_parentRT(Y,ID)),class(ID)" -to obo > $@.tmp && cat $@.tmp > $@
.PRECIOUS: %-mireot.obo

%-merged.obo: %-mireot.obo
	obo2obo -allowdangling -o -allowdangling $@ $(GO)  $(patsubst %,%.obo,$(RELONTS)) $< $*.obo
.PRECIOUS: %-merged.obo

%-entailed.txt: %.obo
	blip-findall -r implied/$< "entailed_by(subclass(A,B),genus_differentia),\+entity_obsolete(A,_),\+entity_obsolete(B,_)" -select "subclass(A,B)" -label > $@.tmp && sort -u $@.tmp > $@

%-expanded.obo: %-imports.obo
	obo2obo -o $@.tmp $< >& $*-implied.log && ./expand.pl $@.tmp > $@

%.links: %-imports.obo
	obo2linkfile -o $@.tmp $< >& $*-implied.log && ./expand.pl $@.tmp > $@

%-abduced-links.txt: %-imports.obo
	blip -import_all -i $< -u query_go findall abduce_link/4 > $@.tmp && sort -u $@.tmp > $@

%-misalign.txt: %-imports.obo
	blip  -import_all -i $< -u tabling -table_pred user:xp_align/6 -u query_obo findall "xp_align_nr(A,R,B,XA,XR,XB)" -label > $@.tmp && sort -u $@.tmp > $@

%-autosyn.obo: %-imports.obo
	obol -import_all -u obol_biological_process_xp_self -u obol_biological_process_xp_cellular_component -u obol_cellular_component_xp -u obol_biological_process_xp_chemical  -i $< obol-generate-synonyms  > $@.tmp && mv $@.tmp $@

cell_structures: cell_structure-fly.txt       cell_structure-human.txt     cell_structure-mouse.txt     cell_structure-plant.txt     cell_structure-xenopus.txt   cell_structure-zebrafish.txt 

TP = -table_pred ontol_db:subclassT/2 -table_pred ontol_db:parent_over/3  -table_pred ontol_db:parent_overT/4
cell_structure-human.txt:
	blip $(TP) -import_all -i biological_process_xp_cell-imports.obo -i biological_process_xp_human_anatomy.obo -r fma -u query_go findall cell_structure/2 > $@.tmp && sort -u $@.tmp > $@

cell_structure-mouse.txt:
	blip $(TP) -import_all -i biological_process_xp_cell-imports.obo -i biological_process_xp_mouse_anatomy.obo -r mouse_anatomy -u query_go findall cell_structure/2 > $@.tmp && sort -u $@.tmp > $@

cell_structure-%.txt:
	blip $(TP) -import_all -i biological_process_xp_cell-imports.obo -i biological_process_xp_$*_anatomy.obo -r $*_anatomy -u query_go findall cell_structure/2 > $@.tmp && sort -u $@.tmp > $@

chebi_relslim.obo:
	./mk-chebi-relslim.pl ~/cvs/obo/ontology/chemical/chebi.obo > $@
#	grep -v ^relationship: ~/cvs/obo/ontology/chemical/chebi.obo > $@

all_development.txt:
	go -i biological_process_xp_uber_anatomy.obo -i biological_process_xp_cell.obo -i biological_process_xp_fly_anatomy.obo -i biological_process_xp_plant_anatomy.obo -i biological_process_xp_fungal_anatomy.obo -n %development -showxp

xpart: cellular_component_xp_self_Xpart.obo

%_Xpart.obo: %.obo
	obo-grep.pl -r 'id: .*part\n' $< | obo-grep.pl --neg -r Typedef - > $@

go_withXpart_links.obo: cellular_component_xp_self_Xpart-implied.obo
	grep -v ^intersection_of: $< > $@

%.check: %.obo
	blip  -r go -i $< -u query_go findall -label cc_func_check/7 > $@.tmp && grep -v ^Mapped $@.tmp > $@

%.roleswitch: %.obo
	blip -import_all -i $*-imports.obo -u query_go findall xp_role_switch/6 -label > $@

%.obo.correl: %.obo
	blip -r go -i $< -u query_go findall xp_correlation/6 -label > $@
.PRECIOUS: %.obo.correl

%.correl.avgs: %.correl
	blip -i $< -f tbl -u query_go findall xp_correlation_avg/4 > $@

# saving of biological_process_xp_uber_anatomy not yet fully automated
merge:
	obo-grep.pl -r intersection_of: ~/tmp/bp_xp_u.obo  | obo-filter-tags.pl -t id -t intersection_of - >z.obo && obo-simple-merge.pl z.obo biological_process_xp_uber_anatomy.obo > z

pro2uniprot.txt:
	wget ftp://ftp.pir.georgetown.edu/databases/ontology/pro_obo/PRO_mappings/uniprotmapping.txt -O $@.tmp && ./pro2uniprot.pl $@.tmp > $@

pro2uniprot.obo: pro2uniprot.txt
	tbl2obolinks.pl --is_a $< > $@

# e.g. MAPKKK cascade involved in osmosensory signaling pathway
infer_pathway_context.txt:
	blip-godb -r go -sqlbind seqfeature_db:all-ebi_go -sqlbind curation_db:all-ebi_go -i biological_process_xp_self-unvetted.obo -r ebi_go -u query_go -debug xsql findall "infer_xp_annotation('GO:0007165',part_of,G,C),feature_label(G,GN),class(C,CN)" -select "infer_xp_annotation(G,GN,C,CN)" > $@

#blip-godb -r go -sqlbind curation_db:all-ebi_go -i biological_process_xp_self.obo -i biological_process_xp_self-unvetted.obo -r ebi_go -u query_go -debug xsql findall "infer_xp_annotation('GO:0007165',part_of,G,C)" -label > $@

promote-%.txt:
	blip-findall -table_pred user:class_simplexp_promote/3 -table_pred ontol_db:subclassRT/2 -r goxp/biological_process_xp_cell -r cell -r go -u curation_db  -r go_assoc_local/$* -u query_go "promote_annotation_by_xp(G,C,C2)" -label > $@

# ----------------------------------------
# Templates
# ----------------------------------------

# find all MGI c16 annotations that do not inherit from a template
%-ambiguous.txt:
	blip-findall -r cell -u curation_db -table_pred ontol_db:subclassT/2 -r go -i go_templates.obo -r go_assoc_local/$* "curation_subject_property_value(_,X,R,Y),subclassRT(X,'GO:0008150'),\+((subclassRT(X,Z),parent(Z,primary_cell_participant_role,_))),\+((parentT(X,regulates,Z),parent(Z,primary_cell_participant_role,_)))" -select X-Y -label > $@.tmp && sort -u $@.tmp > $@

# new xp checking

# ----------------------------------------
# XP-checking
# ----------------------------------------

%-g2r.txt: %.obo
	./summarize-genus-relation.pl biological_process_xp_cellular_component.obo > $@

# ----------------------------------------
# Non-disjoint genus terms
# ----------------------------------------

all_relcheck: non_disjoint_genus.txt domain_mm1-cell.txt domain_mm2-cell.txt domain_mm1-uber_anatomy.txt domain_mm2-uber_anatomy.txt domain_mm1-cellular_component.txt domain_mm2-cellular_component.txt

non_disjoint_genus.txt: relations_process_xp.obo
	blip-findall -r go -i $< "property(R1),subclass(R1,R),subclass(R2,R),R1\=R2,property_domain(R1,G1),property_domain(R2,G2),subclassT(X,G1),subclassT(X,G2)" -select "d(G1,G2,X)" -no_pred -use_tabs -label > $@.tmp && sort -u $@.tmp > $@

domain_mm1-%.txt: biological_process_xp_%.obo relations_process_xp.obo
	blip-findall -r go -i relations_process_xp.obo -i $< "property_domain(R,D),genus(X,D),differentium(X,R2,Y),R\=R2,R2\=occurs_in,R2\=part_of" -select "x(X,R2,Y,R)" -label > $@

domain_mm2-%.txt: biological_process_xp_%.obo relations_process_xp.obo
	blip-findall -r go -i relations_process_xp.obo -i $< "property_domain(R,D),differentium(X,R,Y),genus(X,D2),D\=D2" -select "x(X,D,D2)" -label > $@

# ----------------------------------------
# Pre-merge
# ----------------------------------------
biological_process_xp_cellular_component-pre.obo: biological_process_xp_cellular_component.obo
	obo-grep.pl -r 'intersection_of: GO:(0022607|0022411|0016043)' $< > $@

# ----------------------------------------
# Oort
# ----------------------------------------
release-go-cc: newrel
	ontology-release-runner --outdir $@ --reasoner elk --asserted --simple --allow-overwrite $(GO) biological_process_xp_cellular_component.obo relations_process_xp.obo

release-go-cl: newrel
	ontology-release-runner --outdir $@ --reasoner elk --asserted --simple --allow-overwrite $(GO) biological_process_xp_cell.obo http://purl.obolibrary.org/obo/cl-basic.obo relations_process_xp.obo

release-go-anat: newrel
	ontology-release-runner --outdir $@ --reasoner elk --asserted --simple --allow-overwrite $(GO) -b relations_process_xp.obo -b biological_process_xp_cell.obo -b biological_process_xp_uber_anatomy.obo http://purl.obolibrary.org/obo/uberon/composite-metazoan.owl 

newrel:
	touch $@