diff --git a/minerva_analysis/client/src/js/views/channelList.js b/minerva_analysis/client/src/js/views/channelList.js index 07f405425..13c5bee82 100644 --- a/minerva_analysis/client/src/js/views/channelList.js +++ b/minerva_analysis/client/src/js/views/channelList.js @@ -90,7 +90,7 @@ class ChannelList { // Update selections self.selections.push(name); - self.sel[dataLayer.getFullChannelName(name)] = self.dataLayer.getImageBitRange(); + self.sel[dataLayer.getFullChannelName(name)] = self.image_channels[name]; // Trigger // this.eventHandler.trigger(ChannelList.events.CHANNEL_SELECT, this.sel); @@ -222,7 +222,7 @@ class ChannelList { let fullName = this.dataLayer.getFullChannelName(column) let sliderMin = this.databaseDescription[fullName]['image_min'] let sliderMax = this.databaseDescription[fullName]['image_max'] - self.image_channels[fullName] = [sliderMin, sliderMax]; + self.image_channels[column] = [sliderMin, sliderMax]; let sliderRange = this.addSlider(sliderMin, sliderMax, column, document.getElementById("channel_list").getBoundingClientRect().width); d3.select('div#channel-slider_' + column).style('display', "none"); @@ -298,7 +298,7 @@ class ChannelList { let channelIdx = imageChannels[fullName]; if (this.sliders.get(col.channel)) { - if (col.start > this.image_channels[fullName][0] || col.end < this.image_channels[fullName][1]){ + if (col.start > this.image_channels[col.channel][0] || col.end < this.image_channels[col.channel][1]){ this.sliders.get(col.channel).value([col.start, col.end]); this.rangeConnector[channelIdx] = [col.start / defaultRange[1], col.end / defaultRange[1]]; } @@ -338,7 +338,7 @@ class ChannelList { let channelIdx = imageChannels[fullName]; let defaultRange = self.dataLayer.imageBitRange; - this.rangeConnector[channelIdx] = [Math.round(Math.exp(vmin)) / defaultRange[1], Math.round(Math.exp(vmax)) / defaultRange[1]]; + this.rangeConnector[channelIdx] = [vmin / defaultRange[1], vmax / defaultRange[1]]; } @@ -468,6 +468,7 @@ class ChannelList { .width(swidth - 75)//.tickFormat(d3.format("s")) .fill('orange') .on('onchange', val => { + val = [Math.round(val[0]), Math.round(val[1])] // d3.select('p#value-range').text(val.map(d3.format('.2%')).join('-')); d3.select('#slider-input' + name + 0).attr('value', val[0]); d3.select('#slider-input' + name + 0).property('value', val[0]); @@ -478,7 +479,7 @@ class ChannelList { let packet_val = [val[0], val[1]] let packet = {name: name, dataRange: packet_val}; this.eventHandler.trigger(ChannelList.events.BRUSH_END, packet); - this.image_channels[this.dataLayer.getFullChannelName(name)] = packet_val; + this.image_channels[name] = packet_val; }) .ticks(5) .default([data_min, data_max]) @@ -572,7 +573,7 @@ class ChannelList { let packetHandleVals = [handleVals[0], handleVals[1]] let packet = {name: name, dataRange: packetHandleVals}; that.eventHandler.trigger(ChannelList.events.BRUSH_END, packet); - that.image_channels[fullName] = packetHandleVals; + that.image_channels[name] = packetHandleVals; } }) @@ -676,14 +677,14 @@ class ChannelList { * on window resize we re-initialize (this should be better handled with an update pattern) */ window.addEventListener("resize", function () { - //reinitialize slider on window change..(had some bug updating with via d3 update) - if (typeof channelList != "undefined" && channelList) { - channelList.sliders.forEach(function (slider, name) { - d3.select('div#channel-slider_' + name).select('svg').remove(); - channelList.addSlider(dataLayer.getImageBitRange(), slider.value(), name, - document.getElementById("channel_list").getBoundingClientRect().width); - }); - } + // //reinitialize slider on window change..(had some bug updating with via d3 update) + // if (typeof channelList != "undefined" && channelList) { + // channelList.sliders.forEach(function (slider, name) { + // d3.select('div#channel-slider_' + name).select('svg').remove(); + // channelList.addSlider(dataLayer.getImageBitRange(), slider.value(), name, + // document.getElementById("channel_list").getBoundingClientRect().width); + // }); + // } }); //static vars: events introduced in this class and used across the app diff --git a/minerva_analysis/client/src/js/views/csvGatingList.js b/minerva_analysis/client/src/js/views/csvGatingList.js index c388370e8..70f16b51a 100644 --- a/minerva_analysis/client/src/js/views/csvGatingList.js +++ b/minerva_analysis/client/src/js/views/csvGatingList.js @@ -776,17 +776,17 @@ window , function () { - //reinitialize slider on window change..(had some bug updating with via d3 update) - if (typeof csv_gatingList != "undefined" && csv_gatingList) { - csv_gatingList.sliders.forEach(function (slider, name) { - d3.select('div#csv_gating-slider_' + name).select('svg').remove(); - //add and hide gating sliders (will be visible when gating is active) - let fullName = csv_gatingList.dataLayer.getFullChannelName(name); - let sliderRange = [csv_gatingList.databaseDescription[fullName].min, csv_gatingList.databaseDescription[fullName].max]; - csv_gatingList.addSlider(sliderRange, slider.value(), name, - document.getElementById("csv_gating_list").getBoundingClientRect().width); - }); - } + // //reinitialize slider on window change..(had some bug updating with via d3 update) + // if (typeof csv_gatingList != "undefined" && csv_gatingList) { + // csv_gatingList.sliders.forEach(function (slider, name) { + // d3.select('div#csv_gating-slider_' + name).select('svg').remove(); + // //add and hide gating sliders (will be visible when gating is active) + // let fullName = csv_gatingList.dataLayer.getFullChannelName(name); + // let sliderRange = [csv_gatingList.databaseDescription[fullName].min, csv_gatingList.databaseDescription[fullName].max]; + // csv_gatingList.addSlider(sliderRange, slider.value(), name, + // document.getElementById("csv_gating_list").getBoundingClientRect().width); + // }); + // } } ); diff --git a/minerva_analysis/server/models/data_model.py b/minerva_analysis/server/models/data_model.py index ab39c6b07..791472a0e 100644 --- a/minerva_analysis/server/models/data_model.py +++ b/minerva_analysis/server/models/data_model.py @@ -676,8 +676,8 @@ def get_datasource_description(datasource_name): dat.append(obj) description[fullName]['image_histogram'] = dat - description[fullName]['image_min'] = np.exp(np.min(img_log)) - description[fullName]['image_max'] = np.exp(np.max(img_log)) + description[fullName]['image_min'] = np.int(np.exp(np.min(img_log))) + description[fullName]['image_max'] = np.int(np.exp(np.max(img_log))) image_layer += 1 else: @@ -701,10 +701,6 @@ def get_channel_gmm(channel_name, datasource_name): image_channelIdx = next( index for (index, d) in enumerate(config[datasource_name]['imageData']) if d["fullname"] == channel_name) - 1 image_data = zarray[image_channelIdx] - yi, xi = np.floor(np.linspace(0, image_data.shape, 200, endpoint=False)).astype(int).T - # Slice one dimension at a time. Should generally use less memory than a meshgrid. - image_data = image_data[yi] - image_data = image_data[:, xi] img_log = np.log(image_data[image_data > 0]) gmm = GaussianMixture(3, max_iter=1000, tol=1e-6) gmm.fit(img_log.reshape((-1, 1))) @@ -719,8 +715,8 @@ def get_channel_gmm(channel_name, datasource_name): vmin = means[i2] + covars[i2] ** 0.5 * -1 vmin = max(vmin, img_log.min(), 0) vmax = min(vmax, img_log.max()) - packet_gmm['vmin'] = np.exp(vmin) - packet_gmm['vmax'] = np.exp(vmax) + packet_gmm['vmin'] = np.int(np.exp(vmin)) + packet_gmm['vmax'] = np.int(np.exp(vmax)) [hist, bin_edges] = np.histogram(img_log.flatten(), bins=50, density=True) midpoints = (bin_edges[1:] + bin_edges[:-1]) / 2