Skip to content

Instantly share code, notes, and snippets.

@Yu-AnChen
Forked from mikrkilk/omero_figure_channel_names.js
Last active November 27, 2022 00:24
Show Gist options
  • Save Yu-AnChen/6cd7bf94f894255d9ea8ec1e722dcee0 to your computer and use it in GitHub Desktop.
Save Yu-AnChen/6cd7bf94f894255d9ea8ec1e722dcee0 to your computer and use it in GitHub Desktop.
Omero utility scripts
javascript:(function(){
let infotab = document.getElementById('infoTab').children[0].children[2];
let channels = infotab.children[0].children[1].children[0].lastElementChild.textContent.trim().split(', ');
let channelsliders = document.getElementById('channel_sliders').children[0];
for(i=0;i<channels.length;i++) {
let p = document.createTextNode(channels[i]);
let br = document.createElement('br');
channelsliders.children[i].insertBefore(br,channelsliders.children[i].firstChild);
channelsliders.children[i].insertBefore(p,channelsliders.children[i].firstChild);
}
})();
javascript: (function () {
const channel_headers = document.getElementsByClassName('channel-group-headers');
let ic = Object.keys(angular.element(channel_headers).scope().model.indexedChannels).length;
let n_channel_per_cycle = 4;
let channel_colors = ['#0000FF', '#00FF00', '#FFFFFF', '#FF0000'];
console.assert(channel_colors.length === n_channel_per_cycle);
for (i = 0; i < ic / n_channel_per_cycle; i++) {
angular.element(document.getElementsByClassName('btn-add-channel-group')).click();
angular.element(channel_headers).scope().model.channelGroups[i].name = 'Cycle' + (i + 1);
let curr_channels = [...Array(ic).keys()].slice(n_channel_per_cycle * i, n_channel_per_cycle * (i + 1));
angular.element(channel_headers).scope().model.channelGroups[i].channels = curr_channels;
curr_channels.forEach((el, idx) => {
angular.element(channel_headers).scope().model.channels[el].color = channel_colors[idx];
});
}
angular.element(channel_headers).scope().model.channelGroups[ic / n_channel_per_cycle].channels = [];
})();
javascript: (function () {
const channel_headers = document.getElementsByClassName('channel-group-headers');
let n_channels = Object.keys(angular.element(channel_headers).scope().model.indexedChannels).length;
let n_channel_per_cycle = [4, 5, 5, 4, 4, 4, 4, 4, 4, 4];
let channel_colors = ['#0000FF', '#00FF00', '#FFFFFF', '#FF0000', '#00FFFF'];
let _n_channels = n_channel_per_cycle.reduce((a, b) => a+b, 0);
if (n_channels !== _n_channels) {
alert(`Number of channel specified (${_n_channels}) does not match number of channels in the image (${n_channels})`);
return;
}
for (i of n_channel_per_cycle.keys()) {
let start = n_channel_per_cycle.slice(0, i).reduce((a, b) => a + b, 0);
let end = n_channel_per_cycle.slice(0, i+1).reduce((a, b) => a + b, 0);
let curr_channels = [...Array(n_channels).keys()].slice(start, end);
angular.element(document.getElementsByClassName('btn-add-channel-group')).click();
angular.element(channel_headers).scope().model.channelGroups[i].name = 'Cycle ' + (i + 1);
angular.element(channel_headers).scope().model.channelGroups[i].channels = curr_channels;
curr_channels.forEach((el, idx) => {
angular.element(channel_headers).scope().model.channels[el].color = channel_colors[idx];
});
}
let last_group = angular.element(channel_headers).scope().model.channelGroups.length - 1;
angular.element(channel_headers).scope().model.channelGroups[last_group].channels = [];
})();
javascript:(function(){
var imgId = parseInt(document.getElementById('info').children[0].children[3].children[0].children[0].textContent.split(': ')[1]);
var headers = ['Name', 'X', 'Y', 'RadiusX', 'RadiusY', 'Width', 'Height'];
var url = `https://omero.hms.harvard.edu/api/v0/m/images/${imgId}/`;
var urlRoi = `https://omero.hms.harvard.edu/api/v0/m/rois/?image=${imgId}`;
var imgName;
fetch(url)
.then(res => res.json())
.then(resJson =>
imgName = resJson.data.Name
)
.then(() => fetch(urlRoi)
.then(res => res.json())
.then(resJson =>
resJson.data
.map(data => {
data.shapes[0].Name = data.Name || 'undefined';
return data.shapes
})
.reduce((acc, val) => acc.concat(val), [])
.map(shape => headers.map(header => shape[header] || -1))
)
.then(rois => rois.map(e => e.join(",")).join("\n"))
.then(roisStr =>
"data:text/csv;charset=utf-8," +
headers.join(',') + '\n' +
roisStr)
.then(fullStr => encodeURI(fullStr))
.then(uri => {
let link = document.createElement("a");
link.setAttribute("href", uri);
link.setAttribute("download", `${imgName}-${imgId}-rois.csv`);
document.body.appendChild(link);
link.click();
})
)
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment