In [40]:
from om import base, settings
from om.components import *
from om.data import *
from om.util import *

import pandas as pd
import numpy as np
import math,cobra

ome = base.Session()
model = cobra.io.load_matlab_model(settings.data_directory+'/models/iJO1366.mat')

ged = GeneExpressionData
dged = DifferentialGeneExpressionData
cpge = ChIPPeakGeneExpression

In [41]:
leftpos = 1862770-2000
rightpos = 1862770
df = pd.DataFrame(index=range(leftpos,rightpos))

In [48]:
leftpos = 1862770-3000
rightpos = 1862770-1000
df = pd.DataFrame(index=range(leftpos,rightpos))
data_set_ids = [57,58,59]
for data_set_id in data_set_ids:
    df[str(data_set_id)+'_+'] = pd.DataFrame.from_dict({x['leftpos']:x['value'] for x in query_genome_data([data_set_id], 
                                                                                                             leftpos=leftpos, 
                                                                                                             rightpos=rightpos,
                                                                                                             strand=['+'])},
                                                                                                             orient='index')
    
    df[str(data_set_id)+'_-'] = pd.DataFrame.from_dict({x['leftpos']:x['value'] for x in query_genome_data([data_set_id],
                                                                                                             leftpos=leftpos,
                                                                                                             rightpos=rightpos,
                                                                                                             strand=['-'])},
                                                                                                             orient='index')
df = df.fillna(0.)
df = df/df.max()
df.T.to_csv(path_or_buf='genome_data.tsv', index_label='name')

In [48]:


In [49]:
%%html

<div id="d3-example"></div>

<style>

svg {
  font: 11px "Helvetica Neue", Helvetica, Arial, sans-serif;
}

.axis path,
.axis line {
  fill: none;
  stroke: #000;
  shape-rendering: crispEdges;
}

.axis--y path {
  display: none;
}

.genome_data {
  fill: none;
  stroke: #aaa;
  stroke-linejoin: round;
  stroke-linecap: round;
  stroke-width: 1.5px;
}

.data_track--hover {
  stroke: #000;
}

.focus text {
  text-anchor: middle;
  text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff;
}

.voronoi path {
  fill: none;
  pointer-events: all;
}

.voronoi--show path {
  stroke: red;
  stroke-opacity: .2;
}

#form {
  position: absolute;
  top: 20px;
  right: 30px;
}

</style>



In [50]:
%%javascript

require.config({paths: {d3: "https://mpld3.github.io/js/d3.v3.min"}});

require(["d3"], function(d3) {

var positions;

var margin = {top: 20, right: 30, bottom: 30, left: 40},
    width = 960 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom;

var x = d3.scale.linear()
    .range([0, width]);
    
var y = d3.scale.linear()
    .range([height, 0]);

var color = d3.scale.category20();

var voronoi = d3.geom.voronoi()
    .x(function(d) { return x(d.position); })
    .y(function(d) { return y(d.value); })
    .clipExtent([[-margin.left, -margin.top], [width + margin.right, height + margin.bottom]]);

var line = d3.svg.line()
    .interpolate("basis")
    .x(function(d) { return x(d.position); })
    .y(function(d) { return y(d.value); });

var svg = d3.select("#d3-example").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

d3.csv("genome_data.tsv", type, function(error, genome_data) {
  //x.domain(d3.extent(positions));
  console.log(genome_data);
  x.domain([1862770-3000,1862770-1000]);
  y.domain([0, d3.max(genome_data, function(c) { return d3.max(c.values, function(d) { return d.value; }); })]).nice();
  
  svg.append("g")
      .attr("class", "axis axis--x")
      .attr("transform", "translate(0," + height + ")")
      .call(d3.svg.axis()
        .scale(x)
        .orient("bottom"));

  svg.append("g")
      .attr("class", "axis axis--y")
      .call(d3.svg.axis()
        .scale(y)
        .orient("left")
        .ticks(10, "%"))
    .append("text")
      .attr("x", 4)
      .attr("dy", ".32em")
      .style("font-weight", "bold");

  svg.append("g")
      .attr("class", "genome_data")
    .selectAll("path")
      .data(genome_data)
    .enter().append("path")
      .attr("d", function(d) { d.line = this; return line(d.values);});

  var focus = svg.append("g")
      .attr("transform", "translate(-100,-100)")
      .attr("class", "focus");

  focus.append("circle")
      .attr("r", 3.5);

  focus.append("text")
      .attr("y", -10);

  var voronoiGroup = svg.append("g")
      .attr("class", "voronoi");

  voronoiGroup.selectAll("path")
      .data(voronoi(d3.nest()
          .key(function(d) { return x(d.position) + "," + y(d.value); })
          .rollup(function(v) { return v[0]; })
          .entries(d3.merge(genome_data.map(function(d) { return d.values; })))
          .map(function(d) { return d.values; })))
    .enter().append("path")
      .attr("d", function(d) { return "M" + d.join("L") + "Z"; })
      .datum(function(d) { return d.point; })
      .on("mouseover", mouseover)
      .on("mouseout", mouseout);

  d3.select("#show-voronoi")
      .property("disabled", false)
      .on("change", function() { voronoiGroup.classed("voronoi--show", this.checked); });

  function mouseover(d) {
    d3.select(d.data_track.line).classed("data_track--hover", true);
    d.data_track.line.parentNode.appendChild(d.data_track.line);
    focus.attr("transform", "translate(" + x(d.position) + "," + y(d.value) + ")");
    focus.select("text").text(d.data_track.name);
  }

  function mouseout(d) {
    d3.select(d.data_track.line).classed("data_track--hover", false);
    focus.attr("transform", "translate(-100,-100)");
  }
});

function type(d, i) {
  if (!i) positions = Object.keys(d).filter(Number);
  var data_track = {
    name: d.name,
    values: null
  };
  data_track.values = positions.map(function(m) {
    return {
      data_track: data_track,
      position: m,
      value: d[m]
    };
  });
  return data_track;
}});



In [ ]: