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 [ ]: