Phage Cocktail Host-Range Optimizer

∞ generated and posted on 2020.10.22 ∞

What combination of phages will most broadly impact your favorite bacterial species?

Please cite as:

Stephen T. Abedon
Phage Cocktail Optimizer

Click here for calculator or see immediately below for further explanation and discussion.

The idea behind this page is that you have data on the host range of a number of phages and this information could/should be included in phage cocktail design, but now what? Well, one answer is that you could figure out by eye or by 'hand', or using Excel, what combination of phages provides the broadest overall spectrum of activity… Or you could use this app!

A 'positive' (1) is a phage that has a given bacterium within its host range, however host range might be defined. A 'negative' (0) refers to a phage whose host range does not overlap the bacterium in question. It is up to you to figure out what sort of result should constitute a 1 versus a 0. Sorry, this app deals with binary results only.

Often host range is determined using either spot tests or efficiency of plating (EOP) determinations.

Keep in mind when doing spot tests that only clear(ish) spots should be counted as positives. It is fine to have phage-resistant bacterial colonies growing within the spot. It is not OK, however, to include spots that are only a bit less turbid than the untreated lawn as positives, and certainly do not include spots that display only isolated plaques, no matter how many plaques you might be able to count (if you can count 'em, then there are not enough of 'em to call a 'spot' a positive).

That is, should a spot have been initiated using, e.g., 104 to 106 plaque-forming units, then your still being able to see plaques – unless those plaques are nearly microscopic ('pin prick plaques') – would be an indication of an espesically low EOP… Do the math!

If you are using instead EOP determinations, then you will need to have some sort of minimum EOP cutoff, e.g., perhaps 10-1? Lower? I really can't tell you, but only that somehow positive values, whatever they are, will need to be counted as 1s and negatives as 0s.

Thus, your goal will be to generate one one-dimensional array (i.e., a row) for each potential target bacterial strain tested, where that array consists of ones and zeros, with each digit, whether positive or negative, referring to a single tested phage type.

An example could be 110111000000, which would represent one tested bacterial strain and 14 different tested phages. The length of this array thus will be that of the numbers of phages tested, i.e., in the example, 14 phages

Note: Keep phage data order, as represented by 1s and 0s, consistent from row-to-row, that is, phage 1, then phage 2, then phage 3 should always be phage 1 then 2 then 3, and never instead phage 1 then 3 then 2 when going from row to row.

The number of rows, then, will be the number bacteria tested, though what order rows are provided in shouldn't matter, just so long as you know what bacterial strain is associated with what row. Thus, rows represent the data for a single bacterium and columns represent the data for a single phage.

Don't include in these analyses non-target hosts, e.g., E. coli negatives should not be included when you are targeting P. aeruginosa. The goal of a phage cocktail after all is to 'hit' target bacteria and not 'hit' non-target bacteria.

Note that it is possible to optimize not just for phage cocktail breadth of spectrum of activity but also for phage cocktail 'depth' of spectrum of activity, that is, the number of phages impacting each targeted bacterium (depth) versus the number of bacteria impacted by a phage cocktail (breadth). By default this is 1 or more phages/bacterium (≥ 0), meaning that optimization will be for breadth only. Number of phages impacting each bacterium also can be set to greater than 1, e.g., ≥ 2 or ≥ 3, however, thus optimizing for depth of spectrum of activity as well. Depth of spectrum of activity is important toward minimizing bacterial evolution of phage resistance, which by definition will require at least two phages negatively impacting each targeted bacterial strain, though whether included phages will actually reduce the potential for bacterial evolution of phage resistance for every bacterial strain targeted, meaning minimal potential for cross resistance, will still need to be determined experimentally.

A caveat is that depth of activity should be defined in terms of different phage cross-resistance groups since if a bacterium can easily mutate to simultaneous resistance to two different phages, then those two phages together will not have a substantial impact on the potential for a bacterium to mutate to phage resistance. For how to deal with an occurrence of cross resistance to different phages making up a phage cocktail, see

The following is a test array to copy and paste in if you just want to try the app out, and this should be identical to the placeholder found in the text area, below:


Note, regardless, that only numbers, and line breaks, should be entered into the various input boxes found below. Also, you can't really paste directly from Excel but instead have to paste first into Word and then remove the tab (^t) characters via a global search and replace. Lastly, be careful when you copy and paste from Word as you are liable to carry over a break line at the end of the list, which I haven't yet figured out how to deal with. :-/

Above is the length of your rows of 1s and 0s.
The more phages, up to 50, the slower the output,
so best to first winnow down your candidate phages by eye!

Above is the number of your rows of 1s and 0s.

1 means pos result, e.g., non-turbid spot (some colonies OK).
0 means neg result, e.g., turbid spot or individual plaques.
010 means first phage is neg, second is pos, third is neg…
Start a new row to enter data from an additional host.
Make sure that each row is separated by a break line.
For now, keep phage #s below 101 and host #s below 501.

Above is the number of phage types in the cocktail.
The larger your cocktail size, the slower the output.
Note: too many phages per can be agonizingly slow…

Above is the number of phages impacting each bacterium.
For cocktail breadth you want at least 1 phage/bacterium.
For cocktail depth you want at least 2 phages/bacterium.

Of many possible combinations, show only the top (above) number.