In [1]:
from om import base, settings
from om.data import *
from om.components import *
from IPython.display import HTML
from matplotlib import pylab as plt
from math import log
import pandas as pd
from __future__ import print_function # For py 2.7 compat
from IPython.html import widgets # Widget definitions
from IPython.display import display # Used to display widgets in the notebook
from IPython.utils.traitlets import Unicode
ome = base.Session()
genome_data = omics_database.genome_data
%matplotlib inline
In [2]:
chip_peak_sets = ome.query(ChIPPeakAnalysis).join(AnalysisComposition, ChIPPeakAnalysis.id == AnalysisComposition.analysis_id).\
join(ChIPExperiment, ChIPExperiment.id == AnalysisComposition.data_set_id).\
join(Strain).\
join(InVivoEnvironment, InVivoEnvironment.id == ChIPExperiment.environment_id).\
filter(and_(not_(Strain.name.in_(['Crp8myc','delta-crp','Ar3','delAr1delAr2','delAr1'])),
ChIPExperiment.antibody == 'anti-crp',
InVivoEnvironment.supplements == '')).all()
overlap_df = pd.DataFrame(index=[x.strain.name+'_'+x.environment.carbon_source for x in chip_peak_sets],\
columns=[x.strain.name+'_'+x.environment.carbon_source for x in chip_peak_sets])
for peak_set_1 in chip_peak_sets:
chip_peaks_1 = ome.query(ChIPPeakData).filter(ChIPPeakData.data_set_id == peak_set_1.id).all()
#overlap_df.loc[peak_set_1.strain.name+'_'+peak_set_1.environment.carbon_source,'total'] = len(chip_peaks_1)
for peak_set_2 in chip_peak_sets:
overlap_cnt = 0
chip_peaks_2 = ome.query(ChIPPeakData).filter(ChIPPeakData.data_set_id == peak_set_2.id).all()
for peak_1 in chip_peaks_1:
for peak_2 in chip_peaks_2:
if abs(peak_1.eventpos - peak_2.eventpos) < 10:
overlap_cnt+=1
#print peak_set_1.name+'\t'+peak_set_2.name+'\t'+str(overlap_cnt)
overlap_df.loc[peak_set_1.strain.name+'_'+peak_set_1.environment.carbon_source,peak_set_2.strain.name+'_'+peak_set_2.environment.carbon_source] = overlap_cnt
In [3]:
sets = []
overlaps = []
for i,x in enumerate(overlap_df.index):
for j,y in enumerate(overlap_df.index):
if i == j:
sets.append({'label':x, 'size':overlap_df.ix[x][y]})
elif j <= i:
overlaps.append({'sets':[i,j], 'size': overlap_df.ix[x][y]})
In [4]:
class DataWidget(widgets.DOMWidget):
_view_name = Unicode('DataTransferView', sync=True)
python_data = Unicode(sync=True)
In [8]:
%%javascript
require.config({paths: {d3: "https://mpld3.github.io/js/d3.v3.min", venn: "https://steve-federowicz.github.io/om/examples/lib/venn"}});
require(["widgets/js/widget","d3","venn"], function(WidgetManager,d3, venn){
// Define the DatePickerView
var DataTransferView = IPython.DOMWidgetView.extend({
render: function(){
this.$el;
},
update: function() {
// Set the value of the date control and then call base.
//this.$date.val(this.model.get('value')); // ISO format "YYYY-MM-DDTHH:mm:ss.sssZ" is required
var data = JSON.parse(this.model.get('python_data'));
var sets = data.sets;
var overlaps = data.overlaps;
//console.log(overlaps);
// get positions for each set
sets = venn.venn().venn(sets, overlaps);
//window.venn = venn.venn();
console.log("Wooo");
// draw the diagram in the 'simple_example' div
venn.venn().drawD3Diagram(d3.select(this.$el, sets,650,650);
//return DataTransferView.__super__.update.apply(this);
}
});
// Register the DatePickerView with the widget manager.
WidgetManager.register_widget_view('DataTransferView', DataTransferView);
});
In [9]:
my_widget = DataWidget()
display(my_widget)
In [10]:
my_widget.python_data = json.dumps({"sets":sets, "overlaps":overlaps})
In [7]:
In [ ]: