:- module( bio_db_musm_mgim, [
                bio_db_musm_mgim/0,
                %       + MGI database: fixme: url
                mgim_musm_mgim_chrl/5,
                mgim_musm_mgim_genb/2,
                mgim_musm_mgim_mnme/2,
                mgim_musm_mgim_mrks/2,
                mgim_musm_mgim_ncbi/2,
                mgim_musm_mgim_symb/2,
                mgim_musm_mgim_unip/2,
                mgim_musm_mrks_wdra/2,
                mgim_musm_msyn_mgim/2
                ] ).

:- use_module( library(lib) ).
:- lib(bio_db).

/**  bio_db_musm_mgim.

Documentation predicate for mouse data from MGI database.
DNA fragments are referred to as markers in the database, thus
mgim is the 4 letter code for the database and its unique ids.

==
?- lib( &bio_db(musm(mgim)) ).
?- [pack('bio_db/cell/musm/mgim')].
==

@author nicos angelopoulos
@version  0.1 2018/11/3
@version  0.2 2022/12/25
@version  0.3 2023/10/1

*/
bio_db_musm_mgim.

/**  mgim_musm_mgim_chrl( +Mgim, -Chr, -Start, -End, -Strand ).

MGI marker to chromosomal location.

== 
?- mgim_musm_mgim_mrks(Mgim,'Lmtk3'), 
   mgim_musm_mgim_chrl( Mgim, Chr, Start, End, Strand ).

Mgim = 3039582,
Chr = 7,
Start = 45783738,
End = 45804144,
Strand =  (+).

==

*/
mgim_musm_mgim_chrl( Mgi, Chr, Sta, End, Sgn ) :-
    bio_db:bio_db_serve( mgim_musm_mgim_chrl(Mgi,Chr,Sta,End,Sgn) ).

/**  mgim_musm_mgim_genb( +Mgim, -GenB ).

Map predicate from MGI marker to Gene Bank ids.

==
?- mgim_musm_mgim_mrks( Mgim, 'Lmtk3' ), 
   mgim_musm_mgim_genb( Mgim, GenB ), write( GenB ), nl, fail.

AB288873
AI413247
AK029204
AW046037
BC057032
BC059845
BC083185
BC094377
BE981921
false.
?-  
==
*/
mgim_musm_mgim_genb( X, Y ) :-
    bio_db:bio_db_serve( mgim_musm_mgim_genb(X,Y) ).

/** mgim_musm_mgim_mnme( X, Y ).

Map predicate between MGI marker mrksols and Marker names.

@tbd should this be replaced by mgim_mnme/2 ? 

*/
mgim_musm_mgim_mnme( X, Y ) :-
    bio_db:bio_db_serve( mgim_musm_mgim_mnme(X,Y) ).

/**  mgim_musm_mgim_mrks( +Mgim, -Mrks ).

Map predicate between MGI identifier and MGI Marker Symbols.

MGI uses marker symbols for many different constructs.
This is a super-set of mgim_musm_mgim_symb/2, which constrains to Genes only.

*/
mgim_musm_mgim_mrks( X, Y ) :-
    bio_db:bio_db_serve( mgim_musm_mgim_mrks(X,Y) ).

/**  mgim_musm_mgim_ncbi( +Mgim, -Ncbi ).

Map predicate from MGI marker to NCBI, Entrez ids.

==
?-  mgim_musm_mgim_mrks( Mgim, 'Lmtk3' ),
    mgim_musm_mgim_ncbi( Mgim, Ncbi ).

Ncbi = 381983,
Mgim = 3039582.

==
*/
mgim_musm_mgim_ncbi( X, Y ) :-
    bio_db:bio_db_serve( mgim_musm_mgim_ncbi(X,Y) ).

/**  mgim_musm_mgim_symb( +Mgim, -Mrks ).

Map predicate between MGI marker and (MGI) mrksols.

This is a sub-set of mgim_musm_mgim_mrks/2, as here we contraint to Genes only.

==
?- mgim_musm_mgim_symb( Mgim, 'Lmtk3' ).
Mgim = 3039582.
==
*/
mgim_musm_mgim_symb( X, Y ) :-
    bio_db:bio_db_serve( mgim_musm_mgim_symb(X,Y) ).

/**  mgim_musm_mgim_unip( +Mgim, -Unip ).

Map predicate from MGI markder ids to Uniprot ids.

==
?- mgim_musm_mgim_mrks( Mgim, 'Lmtk3' ),
   mgim_musm_mgim_unip( Mgim, Unip ).

Mgim = 3039582,
Unip = 'Q5XJV6'.
==
*/
mgim_musm_mgim_unip( Sprt, Seqn ) :-
    bio_db:bio_db_serve( mgim_musm_mgim_unip(Sprt,Seqn) ).

/**  mgim_musm_mrks_wdra( +Mrks, -Wdra ).

Map predicate from MGI mrksols to withdrawn names.

==
?- mgim_musm_mrks_wdra( S, W ).
S = 15006,
W = 'H2-Q1' ;
...
==
*/
mgim_musm_mrks_wdra( Mrks, Wdra ) :-
    bio_db:bio_db_serve( mgim_musm_mrks_wdra(Mrks,Wdra) ).

/*  mgim_musm_msyn_mgim( +Syno, -Mgim ).

Map predicate from Synonym to MGI marker ID.

==
?- mgim_musm_mgim_mrks( Mgim, 'Lmtk3' ),
|    mgim_musm_msyn_mgim( Syno, Mgim ).

Mgim = 3039582,
Syno = 'AATYK3' ;
Mgim = 3039582,
Syno = 'Aatyk3'.
==

*/
mgim_musm_msyn_mgim( X, Y ) :-
    bio_db:bio_db_serve( mgim_musm_msyn_mgim(X,Y) ).
