Magic commands (5 minutes)


In Jupyter, “magic” refers to additional commands added by Jupyter to the kernel environment that aren’t normally part of that kernel’s language.1 I’m going to start with a slightly exotic magic command because I think you’ll find it useful.

In a new cell in the Python notebook we just worked with, execute this command:2

%jsroot on


As a general rule, magic commands begin with the percent sign “%”.3

Draw the canvas again:


Move the cursor over the new plot.


Ah, that’s more like it! The plot is not interactive in the same way as in X-Windows ROOT, but you can get a lot done. Play around a bit, looking at tooltips and right-clicking. Note the faint icons below the lower left-hand corner of the plot.

If you execute %lsmagic you’ll see a list of available magic commands. There’s probably more here than you can absorb right now.4 Here are examples of the magic commands I find to be the most useful:

%mkdir subdirectory
%cp ~seligman/root-class/jsroot-test.ipynb subdirectory
%ls subdirectory
%less c1.C
%man root
%cd subdirectory

The above commands are “line magics,” which are executed line-by-line within a cell. There are also “cell magics” that affect the contents of the entire cell in which they appear; they must appear as the first line in a cell. They begin with a double “%”. Examples:

  • %%writefile (write the cell to file );

  • %%timeit (execute the cell many times and determine the average execution time);

  • %%sh (execute the cell as a UNIX shell script).


No, nothing to do with Doctor Strange or Gandalf, though you may find yourself muttering “You shall not pass!” as you work with ROOT.


Note that the %jsroot magic command is only available in Python-based notebooks after you’ve executed import ROOT or from ROOT import... In ROOT C++ notebooks it’s built-in.

“JSROOT” is short for “Javascript ROOT”; it’s an evolving project to bring more interactivity of ROOT graphics into web browsers.


Well… not really. There’s an option (%automagic on|off) that allows you to omit the leading %. In this tutorial I’ll always include the % prefix to make it clear when a command is “magic”.


Here are more details about magic commands.