% a copy from prolog/bio_db.pl as we don't want to load the module file
% do not edit this file. edit the original and copy-paste here

/** bio_db_organism( ?Org ).

Colloquial name for organisms supported by bio_db.

Human is considered the default organism and returned first.

==
?- bio_db_organism( Org ).
==

@author nicos angelopoulos
@version  0:2 2019/4/8
@version  0:3 2022/12/29,  changed to colloquials and added chicken, were hs and mouse.

*/

bio_db_organism(human).      % defaulty
bio_db_organism(chicken).    % 2022/12/21
bio_db_organism(mouse).
bio_db_organism(multi).      % 2023/09/16
bio_db_organism(pig).        % 2023/05/31

/* bio_db_organism( ?KnownAs, ?Canon ).
   bio_db_organism( ?Known, ?Token, ?Canon ).

Canon is the canonical, colloquial, representation of Known which is either 
a known bio_db organism/1, an alias to one or a organism token.
Token is the token used in bio_db predicate, file and directory names for this organism.

==
?- bio_db_organism(Known,Org),write(Known:Org),nl,fail.
hs:human
gallus:chicken
gallus_gallus:chicken
gg6a:chicken
human:human
chicken:chicken
mouse:mouse
pig:pig
galg:chicken
homs:human
musm:mouse
suss:pig
false.

?- bio_db_organism( human, Org ).
Org = hs.

?- bio_db_organism( KnownAs, hs ).
KnownAs = human ;
KnownAs = hs ;
false.
==

@author nicos angelopoulos
@version  0.2 2019/5/2
@version  0.3 2022/12/25, added /3 version, and added many aliases
@version  0.4 2023/05/31, added organism sus scrofa with alias pig and token suss.

*/
bio_db_organism( Alias, Org ) :-
     bio_db_organism( Alias, _Token, Org ).

bio_db_organism( Alias, Token, Org ) :-
    ( ground(Alias) -> Backtrack = false; Backtrack = true ),
    bio_db_organism_alias( Alias, Org ),
    ( Backtrack == false -> !; true ),
    bio_db_organism_token( Org, Token ).
bio_db_organism( Org, Token, Canon ) :-
    ( ground(Org) -> Backtrack = false; Backtrack = true ),
    bio_db_organism( Org ),
    bio_db_organism_token( Org, Token ),
    ( Backtrack == false -> !; true ),
    Canon = Org.
bio_db_organism( TokenIs, Token, Canon ) :-
    ( ground(TokenIs) -> Backtrack = false; Backtrack = true ),
    bio_db_organism_token( Canon, TokenIs ),
    ( Backtrack == false -> !; true ),
    Token = TokenIs.


bio_db_organism_known( A, T, O ) :-
     bio_db_organism( A, T, O ),
     !.
bio_db_organism_known( A, T, O ) :-
     throw( un_known(bio_db_organism(A,T,O)) ).

bio_db_organism_token(chicken, galg).
bio_db_organism_token(human,   homs).
bio_db_organism_token(mouse,   musm).
bio_db_organism_token(multi,   mult).
bio_db_organism_token(pig,     suss).

/** bio_db_organism_alias( ?Alias, -Org ).

Alias is a known and supported alternative name for the canonical Org name for an 
organism.

==
?- bio_db_organism_alias( human, hs ).
true.
==

Note this used to be bio_db_organism/2 which has now (19.05.02) changed.

@author nicos angelopoulos
@version  0:1 2019/5/2
@version  0:2 2022/12/20, gallus also known as chicken and gallus_gallus
*/
bio_db_organism_alias( hs, human ).
bio_db_organism_alias( gallus, chicken ).
bio_db_organism_alias( gallus_gallus, chicken ).
bio_db_organism_alias( gg6a, chicken ).
