about summary refs log tree commit diff
path: root/gn2/wqflask/static/new/javascript/lod_chart.js
diff options
context:
space:
mode:
authorAlexander_Kabui2024-01-02 13:21:07 +0300
committerAlexander_Kabui2024-01-02 13:21:07 +0300
commit70c4201b332e0e2c0d958428086512f291469b87 (patch)
treeaea4fac8782c110fc233c589c3f0f7bd34bada6c /gn2/wqflask/static/new/javascript/lod_chart.js
parent5092eb42f062b1695c4e39619f0bd74a876cfac2 (diff)
parent965ce5114d585624d5edb082c710b83d83a3be40 (diff)
downloadgenenetwork2-70c4201b332e0e2c0d958428086512f291469b87.tar.gz
merge changes
Diffstat (limited to 'gn2/wqflask/static/new/javascript/lod_chart.js')
-rw-r--r--gn2/wqflask/static/new/javascript/lod_chart.js473
1 files changed, 473 insertions, 0 deletions
diff --git a/gn2/wqflask/static/new/javascript/lod_chart.js b/gn2/wqflask/static/new/javascript/lod_chart.js
new file mode 100644
index 00000000..014bf59b
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/lod_chart.js
@@ -0,0 +1,473 @@
+// Generated by CoffeeScript 1.9.2
+var lodchart;
+
+lodchart = function() {
+  var additive, additive_ylab, additive_ylim, additive_yscale, additive_yticks, additivelinecolor, axispos, chart, chrGap, chrSelect, darkrect, height, lightrect, linewidth, lodcurve, lodlinecolor, lodvarname, manhattanPlot, mappingScale, margin, markerSelect, nyticks, pad4heatmap, pointcolor, pointsAtMarkers, pointsize, pointstroke, rotate_ylab, significantcolor, suggestivecolor, title, titlepos, width, xlab, xscale, ylab, ylim, yscale, yticks;
+  width = 800;
+  height = 500;
+  margin = {
+    left: 60,
+    top: 40,
+    right: 40,
+    bottom: 40,
+    inner: 5
+  };
+  axispos = {
+    xtitle: 25,
+    ytitle: 30,
+    xlabel: 5,
+    ylabel: 5
+  };
+  titlepos = 20;
+  manhattanPlot = false;
+  ylim = null;
+  additive_ylim = null;
+  nyticks = 5;
+  yticks = null;
+  additive_yticks = null;
+  chrGap = 8;
+  darkrect = "#F1F1F9";
+  lightrect = "#FBFBFF";
+  lodlinecolor = "darkslateblue";
+  additivelinecolor_plus = "red";
+  additivelinecolor_negative = "green";
+  linewidth = 2;
+  suggestivecolor = "gainsboro";
+  significantcolor = "#EBC7C7";
+  pointcolor = "#E9CFEC";
+  pointsize = 0;
+  pointstroke = "black";
+  title = "";
+  xlab = "Chromosome";
+  ylab = "LRS score";
+  additive_ylab = "Additive Effect";
+  rotate_ylab = null;
+  yscale = d3.scale.linear();
+  additive_yscale = d3.scale.linear();
+  xscale = null;
+  pad4heatmap = false;
+  lodcurve = null;
+  lodvarname = null;
+  markerSelect = null;
+  chrSelect = null;
+  pointsAtMarkers = true;
+  chart = function(selection) {
+    return selection.each(function(data) {
+      var additive_yaxis, additivecurve, chr, curves, g, gEnter, hiddenpoints, j, k, len, len1, lodvarnum, markerpoints, markertip, redraw_plot, ref, ref1, rotate_additive_ylab, suggestive_bar, svg, titlegrp, x, xaxis, yaxis;
+      if (manhattanPlot === true) {
+        pointcolor = "darkslateblue";
+        pointsize = 2;
+      }
+      lodvarname = lodvarname != null ? lodvarname : data.lodnames[0];
+      data[lodvarname] = (function() {
+        var j, len, ref, results;
+        ref = data[lodvarname];
+        results = [];
+        for (j = 0, len = ref.length; j < len; j++) {
+          x = ref[j];
+          results.push(Math.abs(x));
+        }
+        return results;
+      })();
+      ylim = ylim != null ? ylim : [0, d3.max(data[lodvarname])];
+
+      if ('additive' in data) {
+        data['additive'] = (function() {
+          var j, len, ref, results;
+          ref = data['additive'];
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            x = ref[j];
+            results.push(x);
+          }
+          return results;
+        })();
+        additive_ylim = additive_ylim != null ? additive_ylim : [0, d3.max(data['additive'])];
+      }
+      lodvarnum = data.lodnames.indexOf(lodvarname);
+      svg = d3.select(this).selectAll("svg").data([data]);
+      gEnter = svg.enter().append("svg").append("g");
+      svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
+      g = svg.select("g");
+      g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", width).attr("fill", darkrect).attr("stroke", "none");
+      yscale.domain(ylim).range([height + margin.top, margin.top + margin.inner]);
+      yticks = yticks != null ? yticks : yscale.ticks(nyticks);
+      if ('additive' in data) {
+        additive_yscale.domain(additive_ylim).range([height + margin.top, margin.top + margin.inner + height / 2]);
+        additive_yticks = additive_yticks != null ? additive_yticks : additive_yscale.ticks(nyticks);
+      }
+      reorgLodData(data, lodvarname);
+      data = chrscales(data, width, chrGap, margin.left, pad4heatmap, mappingScale);
+      xscale = data.xscale;
+      chrSelect = g.append("g").attr("class", "chrRect").selectAll("empty").data(data.chrnames).enter().append("rect").attr("id", function(d) {
+        return "chrrect" + d[0];
+      }).attr("x", function(d, i) {
+        if (i === 0 && pad4heatmap) {
+          return data.chrStart[i];
+        }
+        return data.chrStart[i] - chrGap / 2;
+      }).attr("width", function(d, i) {
+        if ((i === 0 || i + 1 === data.chrnames.length) && pad4heatmap) {
+          return data.chrEnd[i] - data.chrStart[i] + chrGap / 2;
+        }
+        return data.chrEnd[i] - data.chrStart[i] + chrGap;
+      }).attr("y", margin.top).attr("height", height).attr("fill", function(d, i) {
+        if (i % 2) {
+          return darkrect;
+        }
+        return lightrect;
+      }).attr("stroke", "none").on("click", function(d) {
+        console.log("d is:", d);
+        return redraw_plot(d);
+      });
+      xaxis = g.append("g").attr("class", "x axis");
+      xaxis.selectAll("empty").data(data.chrnames).enter().append("text").text(function(d) {
+        return d[0];
+      }).attr("x", function(d, i) {
+        return (data.chrStart[i] + data.chrEnd[i]) / 2;
+      }).attr("y", margin.top + height + axispos.xlabel).attr("dominant-baseline", "hanging").attr("text-anchor", "middle").attr("cursor", "pointer").on("click", function(d) {
+        return redraw_plot(d);
+      });
+      xaxis.append("text").attr("class", "title").attr("y", margin.top + height + axispos.xtitle).attr("x", margin.left + width / 2).attr("fill", "slateblue").text(xlab);
+      redraw_plot = function(chr_ob) {
+        var chr_plot;
+        $('#topchart').remove();
+        $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
+        return chr_plot = new Chr_Lod_Chart(600, 1200, chr_ob, manhattanPlot, mappingScale);
+      };
+      rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
+      yaxis = g.append("g").attr("class", "y axis");
+      yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
+        return yscale(d);
+      }).attr("y2", function(d) {
+        return yscale(d);
+      }).attr("x1", margin.left).attr("x2", margin.left + 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+      yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
+        return yscale(d);
+      }).attr("x", margin.left - axispos.ylabel).attr("fill", "blue").attr("dominant-baseline", "middle").attr("text-anchor", "end").text(function(d) {
+        return formatAxis(yticks)(d);
+      });
+      yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "").attr("text-anchor", "middle").attr("fill", "slateblue");
+      if ('additive' in data) {
+        rotate_additive_ylab = rotate_additive_ylab != null ? rotate_additive_ylab : additive_ylab.length > 1;
+        additive_yaxis = g.append("g").attr("class", "y axis");
+        additive_yaxis.selectAll("empty").data(additive_yticks).enter().append("line").attr("y1", function(d) {
+          return additive_yscale(d);
+        }).attr("y2", function(d) {
+          return additive_yscale(d);
+        }).attr("x1", margin.left + width).attr("x2", margin.left + width - 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+        additive_yaxis.selectAll("empty").data(additive_yticks).enter().append("text").attr("y", function(d) {
+          return additive_yscale(d);
+        }).attr("x", function(d) {
+          return margin.left + width + axispos.ylabel + 20;
+        }).attr("fill", "green").attr("dominant-baseline", "middle").attr("text-anchor", "end").text(function(d) {
+          return formatAxis(additive_yticks)(d);
+        });
+        additive_yaxis.append("text").attr("class", "title").attr("y", margin.top + 1.5 * height).attr("x", margin.left + width + axispos.ytitle).text(additive_ylab).attr("transform", rotate_additive_ylab ? "rotate(270," + (margin.left + width + axispos.ytitle) + ", " + (margin.top + height * 1.5) + ")" : "").attr("text-anchor", "middle").attr("fill", "green");
+      }
+      if ('suggestive' in data) {
+        suggestive_bar = g.append("g").attr("class", "suggestive");
+        suggestive_bar.selectAll("empty").data([data.suggestive]).enter().append("line").attr("y1", function(d) {
+          return yscale(d);
+        }).attr("y2", function(d) {
+          return yscale(d);
+        }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", suggestivecolor).attr("stroke-width", 5).style("pointer-events", "none");
+        suggestive_bar = g.append("g").attr("class", "significant");
+        suggestive_bar.selectAll("empty").data([data.significant]).enter().append("line").attr("y1", function(d) {
+          return yscale(d);
+        }).attr("y2", function(d) {
+          return yscale(d);
+        }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", significantcolor).attr("stroke-width", 5).style("pointer-events", "none");
+      }
+      if (manhattanPlot === false) {
+        lodcurve = function(chr, lodcolumn) {
+          return d3.svg.line().x(function(d) {
+            return xscale[chr](d);
+          }).y(function(d, i) {
+            return yscale(data.lodByChr[chr][i][lodcolumn]);
+          });
+        };
+        if ('additive' in data) {
+          additivecurve = function(chr, lodcolumn) {
+            if (data.additiveByChr[chr][0] < 0) {
+              pos_neg = "negative"
+            }
+            else {
+              pos_neg = "positive"
+            }
+            return [pos_neg, d3.svg.line().x(function(d) {
+              return xscale[chr](d);
+            }).y(function(d, i) {
+              return additive_yscale(Math.abs(data.additiveByChr[chr][i]));
+            })];
+          };
+        }
+        curves = g.append("g").attr("id", "curves");
+        ref = data.chrnames;
+        for (j = 0, len = ref.length; j < len; j++) {
+          chr = ref[j];
+          if (chr.indexOf(data['chr'])) {
+            curves.append("path").datum(data.posByChr[chr[0]]).attr("d", lodcurve(chr[0], lodvarnum)).attr("stroke", lodlinecolor).attr("fill", "none").attr("stroke-width", linewidth).style("pointer-events", "none");
+          }
+        }
+        if ('additive' in data) {
+          ref1 = data.chrnames;
+          for (k = 0, len1 = ref1.length; k < len1; k++) {
+            chr = ref1[k];
+            if (chr.indexOf(data['chr'])) {
+              if (additivecurve(chr[0], lodvarnum)[0] == "negative") {
+                curves.append("path").datum(data.posByChr[chr[0]]).attr("d", additivecurve(chr[0], lodvarnum)[1]).attr("stroke", additivelinecolor_negative).attr("fill", "none").attr("stroke-width", 1).style("pointer-events", "none");
+              }
+              else {
+                curves.append("path").datum(data.posByChr[chr[0]]).attr("d", additivecurve(chr[0], lodvarnum)[1]).attr("stroke", additivelinecolor_plus).attr("fill", "none").attr("stroke-width", 1).style("pointer-events", "none");
+              }
+            }
+          }
+        }
+      }
+      console.log("before pointsize");
+      if (pointsize > 0) {
+        console.log("pointsize > 0 !!!");
+      }
+      markerpoints = g.append("g").attr("id", "markerpoints_visible");
+      markerpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+        return xscale[d.chr](d.pos);
+      }).attr("cy", function(d) {
+        return yscale(d.lod);
+      }).attr("r", pointsize).attr("fill", pointcolor).attr("stroke", pointstroke).attr("pointer-events", "hidden");
+      titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
+      g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", function() {
+        if (pad4heatmap) {
+          return data.chrEnd.slice(-1)[0] - margin.left;
+        }
+        return data.chrEnd.slice(-1)[0] - margin.left + chrGap / 2;
+      }).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+      if (pointsAtMarkers) {
+        hiddenpoints = g.append("g").attr("id", "markerpoints_hidden");
+        markertip = d3.tip().attr('class', 'd3-tip').html(function(d) {
+          return [d.name, " LRS = " + (d3.format('.2f')(d.lod))];
+        }).direction("e").offset([0, 10]);
+        svg.call(markertip);
+        return markerSelect = hiddenpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+          return xscale[d.chr](d.pos);
+        }).attr("cy", function(d) {
+          return yscale(d.lod);
+        }).attr("id", function(d) {
+          return d.name;
+        }).attr("r", d3.max([pointsize * 2, 3])).attr("opacity", 0).attr("fill", pointcolor).attr("stroke", pointstroke).attr("stroke-width", "1").on("mouseover.paneltip", function(d) {
+          d3.select(this).attr("opacity", 1);
+          return markertip.show(d);
+        }).on("mouseout.paneltip", function() {
+          return d3.select(this).attr("opacity", 0).call(markertip.hide);
+        });
+      }
+    });
+  };
+  chart.width = function(value) {
+    if (!arguments.length) {
+      return width;
+    }
+    width = value;
+    return chart;
+  };
+  chart.height = function(value) {
+    if (!arguments.length) {
+      return height;
+    }
+    height = value;
+    return chart;
+  };
+  chart.margin = function(value) {
+    if (!arguments.length) {
+      return margin;
+    }
+    margin = value;
+    return chart;
+  };
+  chart.titlepos = function(value) {
+    if (!arguments.length) {
+      return titlepos;
+    }
+    titlepos;
+    return chart;
+  };
+  chart.axispos = function(value) {
+    if (!arguments.length) {
+      return axispos;
+    }
+    axispos = value;
+    return chart;
+  };
+  chart.manhattanPlot = function(value) {
+    if (!arguments.length) {
+      return manhattanPlot;
+    }
+    manhattanPlot = value;
+    return chart;
+  };
+  chart.mappingScale = function(value) {
+    if (!arguments.length) {
+      return mappingScale;
+    }
+    mappingScale = value;
+    return chart;
+  };
+  chart.ylim = function(value) {
+    if (!arguments.length) {
+      return ylim;
+    }
+    ylim = value;
+    return chart;
+  };
+  chart.additive_ylim = function(value) {
+    if (!arguments.length) {
+      return additive_ylim;
+    }
+    additive_ylim = value;
+    return chart;
+  };
+  chart.nyticks = function(value) {
+    if (!arguments.length) {
+      return nyticks;
+    }
+    nyticks = value;
+    return chart;
+  };
+  chart.yticks = function(value) {
+    if (!arguments.length) {
+      return yticks;
+    }
+    yticks = value;
+    return chart;
+  };
+  chart.chrGap = function(value) {
+    if (!arguments.length) {
+      return chrGap;
+    }
+    chrGap = value;
+    return chart;
+  };
+  chart.darkrect = function(value) {
+    if (!arguments.length) {
+      return darkrect;
+    }
+    darkrect = value;
+    return chart;
+  };
+  chart.lightrect = function(value) {
+    if (!arguments.length) {
+      return lightrect;
+    }
+    lightrect = value;
+    return chart;
+  };
+  chart.linecolor = function(value) {
+    var linecolor;
+    if (!arguments.length) {
+      return linecolor;
+    }
+    linecolor = value;
+    return chart;
+  };
+  chart.linewidth = function(value) {
+    if (!arguments.length) {
+      return linewidth;
+    }
+    linewidth = value;
+    return chart;
+  };
+  chart.pointcolor = function(value) {
+    if (!arguments.length) {
+      return pointcolor;
+    }
+    pointcolor = value;
+    return chart;
+  };
+  chart.pointsize = function(value) {
+    if (!arguments.length) {
+      return pointsize;
+    }
+    pointsize = value;
+    return chart;
+  };
+  chart.pointstroke = function(value) {
+    if (!arguments.length) {
+      return pointstroke;
+    }
+    pointstroke = value;
+    return chart;
+  };
+  chart.title = function(value) {
+    if (!arguments.length) {
+      return title;
+    }
+    title = value;
+    return chart;
+  };
+  chart.xlab = function(value) {
+    if (!arguments.length) {
+      return xlab;
+    }
+    xlab = value;
+    return chart;
+  };
+  chart.ylab = function(value) {
+    if (!arguments.length) {
+      return ylab;
+    }
+    ylab = value;
+    return chart;
+  };
+  chart.rotate_ylab = function(value) {
+    if (!arguments.length) {
+      return rotate_ylab;
+    }
+    rotate_ylab = value;
+    return chart;
+  };
+  chart.lodvarname = function(value) {
+    if (!arguments.length) {
+      return lodvarname;
+    }
+    lodvarname = value;
+    return chart;
+  };
+  chart.pad4heatmap = function(value) {
+    if (!arguments.length) {
+      return pad4heatmap;
+    }
+    pad4heatmap = value;
+    return chart;
+  };
+  chart.pointsAtMarkers = function(value) {
+    if (!arguments.length) {
+      return pointsAtMarkers;
+    }
+    pointsAtMarkers = value;
+    return chart;
+  };
+  chart.yscale = function() {
+    return yscale;
+  };
+  chart.additive_yscale = function() {
+    return additive_yscale;
+  };
+  chart.xscale = function() {
+    return xscale;
+  };
+  if (manhattanPlot === false) {
+    chart.lodcurve = function() {
+      return lodcurve;
+    };
+  }
+  chart.additivecurve = function() {
+    return additivecurve;
+  };
+  chart.markerSelect = function() {
+    return markerSelect;
+  };
+  chart.chrSelect = function() {
+    return chrSelect;
+  };
+  return chart;
+};
\ No newline at end of file