Minion channel ID's from Albacore The latest version of Albacore from Oxford Nanopore Technologies calls bases from raw fast5 files. A useful piece of output is the sequence_summary.txt, which is a big tab-delimited file with information on each read. 

One of the columns in there is the channel, which references the channel number from 1 to 512 on the flowcell. 

These channels obviously have a physical layout on the flowcell. What is the layout? I.e. how many channels are there per row and per column, and how do the channel numbers map to the rows and columns?

My best guess is that it's a 16*32 array, but I don't know for sure, and even if I did I wouldn't know whether the channels map across the shorter or the longer axis in order (or maybe they are not in order at all, but that would be silly).
There are actually 2048 usable sequencing wells, hexagonally packed with four wells connected to the same sequencing sensor/channel via a multiplex (mux) selector. The combination of the mux and the channel number determines the physical location of the well. Unfortunately, the association between channel number and physical location is not obvious, and within each channel the muxes are also not in an obvious order, i.e. [3,4,1,2,2,1,4,3] for two adjacent channels.

Here's an "official" text description of the layout as it was for R7; it hasn't changed for the most recent flow cells (R9.5):


Channels 1-64 occur at the top of the chip (the other low channel numbers are at the bottom)
Channels order down the chip: 1-64, 449-512, 385-448, 321-384, 257-320, 193-256, 129-192, 65-128
Muxes run from left to right in the order: 3, 4, 1, 2, 2, 1, 4, 3


To confirm this layout, I pulled the channel/position lookup table definitions out of MinKNOW, and it seems to be the same as this:



Here's the code to produce this image (I haven't adjusted it to have a hexagonal structure):

#!/usr/bin/Rscript
library(rjson);

layout.fname &lt;- "/opt/ONT/MinKNOW/Client/resources/app/resources/channels.json";

data.list &lt;- fromJSON(file=layout.fname);

png("MinION_FC_Layout.png", width=3072, height=1536, pointsize=24);
par(mar=c(4,4,0.5,0.5), lwd=3);
data.mat &lt;- matrix(unlist(data.list), ncol=2, byrow=TRUE);
plot(data.mat, pch=21,
     bg=(colorRampPalette(c("white","grey"))(2048))[1:2048],
     col=c("red","yellow","green","blue"),
     xlab="locX", ylab="locY", cex=2,
     xlim=c(7,76), ylim=c(0,33));
text(x=data.mat, labels=rep(1:512, each=4), cex=0.4);
legend("top",legend=c(1,2,3,4), fill=c("red","yellow","green","blue"),
       inset=0.05, title="MUX");
text(x=6, y=data.mat[data.mat[,1] == 8,2],
     labels = ceiling(which(data.mat[,1] == 8) / 4));
text(x=77, y=data.mat[data.mat[,1] == 75,2],
     labels = ceiling(which(data.mat[,1] == 75) / 4));
arrows(x0=c(8,75), x1=c(39,44), y0=33, length=0.2);
invisible(dev.off());