-language([evaluate,psifcp,compound,colon]).
-export("AP1_PROTEIN","AP1_GENE").
baserate(1).
global([pAP1,athry,ap1,ap1p,ap1_site,p_thr,ser,p_ser,dummy,deg1(0.1)]).


AP1_PROTEIN(env):-
      <<backbone,ap1_motif1,ap1_motif2 . INACTIVE_AP1(athry,ser) .

INACTIVE_AP1(res1,res2):-

      ap1 ! {ap1_motif1,ap1_motif2} | AP1_REGULATORY_DOMAIN(res1,res2) ;
      deg1 ? [] | true .


AP1_REGULATORY_DOMAIN(res1,res2):-

      ap1_motif1 ! {res1} | ap1_motif2 ! {res2} | OCCUPIED_REGULATORY_DOMAIN(res1,res2) .

      OCCUPIED_REGULATORY_DOMAIN(res1,res2):-
            ap1_motif1 ? {res1a} | OPTION1(res1a,res2) ;
            ap1_motif2 ? {res2a} | OPTION2(res1,res2a) .


OPTION2(res1,res2a):-
        res1=?=p_thr & res2a=?=p_ser |  ACTIVE_AP1(res1,res2a);
        res1=?=athry & res2a=?=ser |  INACTIVE_AP1(res1,res2a) ;
        otherwise | OCCUPIED_REGULATORY_DOMAIN(res1,res2a) .

OPTION1(res1a,res2):-
        res1a=?=p_thr & res2=?=p_ser |  ACTIVE_AP1(res1a,res2) ;
        res1a=?=athry & res2=?=ser | INACTIVE_AP1(res1a,res2) ;
        otherwise | OCCUPIED_REGULATORY_DOMAIN(res1a,res2) .

ACTIVE_AP1(res1,res2):-
      ap1_site ! [] | ACTIVE_AP1 ;
      ap1p ! {ap1_motif1,ap1_motif2} | AP1_REGULATORY_DOMAIN(res1,res2) ;
      deg1 ? [] | true
     

      >> .

AP1_GENE(env):-
      pAP1 ? [] | AP1_GENE(env), AP1_PROTEIN(env) .