To begin to answer this question it is important to understand some terminology. In Ireland there are seven universities, 13 institutes of technology, colleges of education, independent and further educations centres and other national research institutions such as the Dublin Institute for Advanced Studies. Staff and students of these institutions can gain access to ICHEC general-purpose computing resources (Stokes and Stoney) by submitting a project and are termed users.
Projects differ by size, class, and domain, for example, a small "Discovery" (Class C) project in the chemistry domain with three users or a large multi-year "Grand Challenge" (Class A) project in engineering with 10 users. Further details of the Full National Service can be found here. Also, ICHEC has numerous computational scientists, staff, that support the users during the course of their project.
So in summary there are users, project classes (A,B,C), project domains (Physics, Chemistry, Earth Science, Maths, Astrophysics, Engineering, Life Sciences, Computing) staff, Institutions, and ICHEC. The challenge was to represent these data in a single info-graphic. The protovis diagram above is the result and an explanation of its creation is described below.
But to answer the original question, ICHEC stands at the heart of computational research in Ireland.
var ICHEC2010 = {
nodes:[
{nodeName:"TCD", group:1},
{nodeName:"ICHEC", group:5},
{nodeName:"Martin Peters", group:2},
{nodeName:"Giorgio Carta", group:4, domain:2},
{nodeName:"tcche018c", group:3, domain:2, cl:1}
],
links:[
{source:0, target:10, value:1},
{source:1, target:10, value:1},
{source:2, target:10, value:1},
]
};
There was 510 nodes and 750 edges in total. Each node was given a group variable with the following definitions:
| Institutions | 1 |
| Staff | 2 |
| Project | 3 |
| User | 4 |
| ICHEC | 5 |
| Physics | 1 |
| Chemistry | 2 |
| Earth Science | 3 |
| Maths | 4 |
| Astrophysics | 5 |
| Engineering | 6 |
| Life Sciences | 7 |
| Computing | 8 |
| A | 10 |
| B | 5 |
| C | 1 |
The connections between staff, users, projects, institutes and ICHEC were defined with links as shown in the code above. Each edge or link as a source and target. These numbers are the indices of each in the nodes array. The value of one describes it as a single connection.
var w = 750, // width
h = 650, // height
colors = pv.Colors.category20();
groupColours = pv.colors("red", "orange", "yellow", "green", "blue", "violet");
var instituteColours = {
"TCD" : colors(1),
"UCD" : colors(2),
"DCU" : colors(3),
"UCC" : colors(4),
"Tyndall": colors(5),
"NUIG" : colors(6),
"NUIM" : colors(7),
"DIAS" : colors(8),
"RCSI" : colors(9),
"UL" : colors(10),
"ITS" : colors(11),
"TG" : colors(12),
"DIT" : colors(14),
"ICHEC" : colors(13),
};
var domains = {
"Physics" : colors(1),
"Chemistry" : colors(2),
"Earth Science" : colors(3),
"Maths" : colors(4),
"Astrophysics" : colors(5),
"Engineering" : colors(6),
"Life Sciences" : colors(7),
"Computing" : colors(8)
};
var col = function(g, d, n) {
if (g == 1) { // institutes
return instituteColours[n];
}
if (g == 2) { // staff
return "black";
}
if (g == 3) {
return colors(d);
}
if (g == 4) { // users
return "black";
}
if (g == 5) { // ICHEC
return "grey";
}
return colors(d);
};
nodeSize = function(g, c, ld, s) {
if (g == 5) { // ICHEC
return (ld + 100) * (Math.pow(s, -1.5));
}
if (g == 1) { // institues
return (ld + 8) * (Math.pow(s, -1.5));
}
if (g == 2) { // staff
return (ld + 5) * (Math.pow(s, -1.5));
}
if (g == 3) { // project
return ((5 * c)) * (Math.pow(s, -1.5));
}
return (ld + 2) * (Math.pow(s, -1.5));
};
nodeShape = function(g, c) {
if (g == 5) { // ICHEC
return "circle";
}
if (g == 1) { // institutes
return "diamond";
}
if (g == 2) { // staff
return "triangle";
}
if (g == 4) { // users
return "cross";
}
return "circle";
};
var vis = new pv.Panel()
.width(w)
.height(h)
.fillStyle("white");
var force = vis.add(pv.Layout.Force)
.nodes(ICHEC2010.nodes)
.links(ICHEC2010.links);
force.link.add(pv.Line);
force.node.add(pv.Dot)
.shape(function(d) nodeShape(d.group, d.cl))
.size(function(d) nodeSize(d.group, d.cl, d.linkDegree, this.scale))
.fillStyle(function(d) col(d.group, d.domain, d.nodeName) ?
col(d.group, d.domain, d.nodeName) :
colors(d.domain) )
.strokeStyle(function() this.fillStyle().darker())
.lineWidth(1)
.title(function(d) d.nodeName)
.event("mousedown", pv.Behavior.drag())
.event("drag", force);
vis.add(pv.Label)
.right(100)
.top(function() 40)
.text("Project Domains");
vis.add(pv.Dot)
.data(pv.keys(domains))
.right(90)
.top(function() 50 + this.index * 18)
.fillStyle(function(d) domains[d])
.width(36)
.height(12)
.anchor("right").add(pv.Label)
.textMargin(6)
.textAlign("left");
vis.add(pv.Label)
.right(720)
.top(function() 40)
.text("Institutions");
vis.add(pv.Dot)
.shape("diamond")
.data(pv.keys(instituteColours))
.right(700)
.top(function() 50 + this.index * 18)
.fillStyle(function(d) instituteColours[d])
.width(36)
.height(12)
.anchor("right").add(pv.Label)
.textMargin(6)
.textAlign("left");
vis.render();