dvRing = (elem,outerRad,innerRad,options) => {
if (typeof(options) === "undefined") {options = {}}
if (typeof(options.fillColor) === "undefined") {options.fillColor = "steelblue"}
if (typeof(options.id) === "undefined") {options.id = "id" + Math.random()*100000}
let mask = elem.select("defs").node() ? elem.select("defs") : elem.append("defs").append("mask").attr("id","h_"+options.id);
mask.append("rect").attr("width", outerRad*2).attr("height", outerRad*2).attr("x", -outerRad).attr("y", -outerRad).attr("fill","white");
mask.append("circle").attr("r",innerRad).attr("fill","black");
let ring = elem.selectAll(".ring").node() ? elem.select(".ring") : elem.append("circle").classed("ring", true);
ring.attr("id", options.id)
.attr("r", outerRad)
.attr("mask", "url(#h_" + options.id + ")")
.attr("fill", options.fillColor)
.classed("ring",true);
return ring;
}