anchor.diff:                  (fun() ->
                       {TinMicro, R} = timer:tc(fun() -> F end),
                       TinSec = TinMicro div 1000000,
  -                    ?INFO("Time ~s:~B ~s: ~B sec", [?FILE, ?LINE, ??F, TinSec]),
  +                    ?DEBUG("Time ~s:~B ~s: ~B sec",
  +                                                [?FILE, ?LINE, ??F, TinSec]),
                       R
                   end)()).
   
  
positive.code:     NCI.
  
  compute_from_graph(G, MaxVertices)->
      ?DEBUG("Starting NCI Calculation"),
      ?LOGDURATION(prop_labels(G)),
      NCI = calc_nci(G),
      % !!! warning, communities mangles G
  
negative.code:     lists:foldl(
          fun(V, D) ->
              {V, C} = digraph:vertex(G, V),
              dict_append(C, V, D)
          end, dict:new(), digraph:vertices(G)).
  
  comm_interactions(G) ->
      lists:foldl(
          fun(E, D) ->
              {E, V1, V2, _} = digraph:edge(G, E),
              {V1, C1} = digraph:vertex(G, V1),
              {V2, C2} = digraph:vertex(G, V2),
              Vs = vsort(V1, V2),
              case {C1, C2} of
                  {C, C} ->
                      dict_append(C, Vs, D);
                  {C1, C2} ->
                      dict_append(C1, Vs, D),
                      dict_append(C2, Vs, D)
              end
          end, dict:new(), digraph:edges(G)).
  
  vsort(V1, V2) when V1 > V2 ->
      {V1, V2};
  vsort(V1, V2) ->
      {V2, V1}.
  
  % use set to remove duplicates?  Then convert to dict?
  dict_append(K, V, D) ->
      dict:update(K, fun(Old) -> [V | Old] end, [V], D).
  
  % create a graph of connected communities.  Each vertex is a community.
  community_graph(G) ->
  