Skip to content

Instantly share code, notes, and snippets.

@andrzejnovak
Created September 28, 2020 08:24
Show Gist options
  • Save andrzejnovak/fb20f5754763b485166a961dcef385a0 to your computer and use it in GitHub Desktop.
Save andrzejnovak/fb20f5754763b485166a961dcef385a0 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2020-02-03T16:26:31.671786Z",
"start_time": "2020-02-03T16:26:25.264609Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/anovak/mplhep/mplhep/__init__.py:48: MatplotlibDeprecationWarning: \n",
"The createFontList function was deprecated in Matplotlib 3.2 and will be removed two minor releases later. Use FontManager.addfont instead.\n",
" font_list = fm.createFontList(font_files)\n"
]
}
],
"source": [
"import time\n",
"import numpy as np\n",
"import mplhep as hep\n",
"import matplotlib.pyplot as plt\n",
"import uproot\n",
"from coffea import hist\n",
"from coffea.hist import plot\n",
"from coffea.analysis_objects import JaggedCandidateArray\n",
"import coffea.processor as processor\n",
"from matplotlib.offsetbox import AnchoredText"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2020-02-03T16:26:31.687735Z",
"start_time": "2020-02-03T16:26:31.673839Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[[1 2 3] [] [4 5]] [] [[6]]]\n"
]
},
{
"data": {
"text/plain": [
"<JaggedArray [[3 0 2] [] [1]] at 0x7ff8b68a7940>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import awkward\n",
"array = awkward.fromiter([[[1, 2, 3], [], [4, 5]], [], [[6]]])\n",
"print(array)\n",
"array.count()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2020-02-03T16:26:31.894456Z",
"start_time": "2020-02-03T16:26:31.691776Z"
}
},
"outputs": [
{
"ename": "KeyError",
"evalue": "not found: b'allEvents'\n in file: Andrey.root",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-6-27cc732c1084>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;31m#f = uproot.open(fnalfi)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"allEvents/hEventCount\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0;31m#f['otree'].keys()\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/software/miniconda3/envs/def/lib/python3.7/site-packages/uproot/rootio.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 224\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__getitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 225\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 226\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__len__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/software/miniconda3/envs/def/lib/python3.7/site-packages/uproot/rootio.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, name, cycle)\u001b[0m\n\u001b[1;32m 337\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 338\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mb\"/\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 339\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcycle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 340\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 341\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/software/miniconda3/envs/def/lib/python3.7/site-packages/uproot/rootio.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, name, cycle)\u001b[0m\n\u001b[1;32m 359\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mlast\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 360\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mcycle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 361\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0m_KeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"not found: {0}\\n in file: {1}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_context\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msourcepath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 362\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 363\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0m_KeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"not found: {0} with cycle {1}\\n in file: {2}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcycle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_context\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msourcepath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyError\u001b[0m: not found: b'allEvents'\n in file: Andrey.root"
]
}
],
"source": [
"xrd = 'root://xrootd-cms.infn.it//'\n",
"pat = 'root://xrootd-cms.infn.it///store/user/adodonov/EGamma/pancakes-02_Run2018A-ForValUL2018-v2/200129_212244/0000/'\n",
"fi = 'Run2018A_10.root'\n",
"#f = uproot.open(pat+fi)\n",
"f = uproot.open('Andrey.root')\n",
"#f = uproot.open(fnalfi)\n",
"\n",
"f[\"allEvents/hEventCount\"].values[0]\n",
"#f['otree'].keys()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2020-02-03T16:27:41.065566Z",
"start_time": "2020-02-03T16:27:40.587304Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['E',\n",
" 'Et',\n",
" '__array_ufunc__',\n",
" '__awkward_serialize__',\n",
" '__class__',\n",
" '__class__',\n",
" '__delattr__',\n",
" '__delattr__',\n",
" '__dict__',\n",
" '__dir__',\n",
" '__dir__',\n",
" '__doc__',\n",
" '__doc__',\n",
" '__eq__',\n",
" '__eq__',\n",
" '__format__',\n",
" '__format__',\n",
" '__ge__',\n",
" '__ge__',\n",
" '__get__',\n",
" '__getattribute__',\n",
" '__getattribute__',\n",
" '__getitem__',\n",
" '__gt__',\n",
" '__gt__',\n",
" '__hash__',\n",
" '__hash__',\n",
" '__init__',\n",
" '__init__',\n",
" '__init_subclass__',\n",
" '__init_subclass__',\n",
" '__le__',\n",
" '__le__',\n",
" '__lt__',\n",
" '__lt__',\n",
" '__module__',\n",
" '__ne__',\n",
" '__ne__',\n",
" '__new__',\n",
" '__new__',\n",
" '__reduce__',\n",
" '__reduce__',\n",
" '__reduce_ex__',\n",
" '__reduce_ex__',\n",
" '__repr__',\n",
" '__repr__',\n",
" '__self__',\n",
" '__self_class__',\n",
" '__setattr__',\n",
" '__setattr__',\n",
" '__sizeof__',\n",
" '__sizeof__',\n",
" '__str__',\n",
" '__str__',\n",
" '__subclasshook__',\n",
" '__subclasshook__',\n",
" '__thisclass__',\n",
" '__weakref__',\n",
" '_args',\n",
" '_array',\n",
" '_arraymethods',\n",
" '_cache',\n",
" '_delitem',\n",
" '_enable_genjet',\n",
" '_finalize',\n",
" '_generator',\n",
" '_initObjectArray',\n",
" '_keymap',\n",
" '_kwargs',\n",
" '_nbytes',\n",
" '_persistentkey',\n",
" '_persistvirtual',\n",
" '_rotate_axis',\n",
" '_rotate_euler',\n",
" '_setitem',\n",
" '_to_cartesian',\n",
" '_trymemo',\n",
" '_type',\n",
" '_wrapmethods',\n",
" 'area',\n",
" 'awkward',\n",
" 'bRegCorr',\n",
" 'bRegRes',\n",
" 'beta',\n",
" 'boost',\n",
" 'boostp3',\n",
" 'btagCMVA',\n",
" 'btagCSVV2',\n",
" 'btagDeepB',\n",
" 'btagDeepC',\n",
" 'btagDeepFlavB',\n",
" 'btagDeepFlavC',\n",
" 'chEmEF',\n",
" 'chHEF',\n",
" 'cleanmask',\n",
" 'cottheta',\n",
" 'delta_phi',\n",
" 'delta_r',\n",
" 'delta_r2',\n",
" 'dot',\n",
" 'energy',\n",
" 'eta',\n",
" 'eta',\n",
" 'gamma',\n",
" 'genJetIdx',\n",
" 'hadronFlavour',\n",
" 'islightlike',\n",
" 'isspacelike',\n",
" 'istimelike',\n",
" 'jercCHF',\n",
" 'jercCHPUF',\n",
" 'jetId',\n",
" 'mag',\n",
" 'mag2',\n",
" 'mass',\n",
" 'mass',\n",
" 'mass2',\n",
" 'matched_electrons',\n",
" 'matched_muons',\n",
" 'maybemixin',\n",
" 'mixin',\n",
" 'mt',\n",
" 'mt2',\n",
" 'muEF',\n",
" 'muonSubtrFactor',\n",
" 'nConstituents',\n",
" 'nElectrons',\n",
" 'nMuons',\n",
" 'neEmEF',\n",
" 'neHEF',\n",
" 'p',\n",
" 'p2',\n",
" 'p3',\n",
" 'partonFlavour',\n",
" 'perp',\n",
" 'perp2',\n",
" 'phi',\n",
" 'phi',\n",
" 'pt',\n",
" 'pt',\n",
" 'pt2',\n",
" 'puId',\n",
" 'qgl',\n",
" 'rapidity',\n",
" 'rawFactor',\n",
" 'rotate_axis',\n",
" 'rotate_euler',\n",
" 'rotatex',\n",
" 'rotatey',\n",
" 'rotatez',\n",
" 'sum',\n",
" 't',\n",
" 'theta',\n",
" 'unit',\n",
" 'x',\n",
" 'y',\n",
" 'z']"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from coffea.nanoaod import NanoEvents\n",
"events = NanoEvents.from_file('Andrey.root')\n",
"dir(events.Jet)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2020-02-03T16:26:20.978536Z",
"start_time": "2020-02-03T16:26:20.960755Z"
}
},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'processor' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-2-a411275915bb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mclass\u001b[0m \u001b[0mNanoEventsProcessor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprocessor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mProcessorABC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_columns\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;31m# Define axes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'processor' is not defined"
]
}
],
"source": [
"class NanoEventsProcessor(processor.ProcessorABC):\n",
" def __init__(self, columns=[]):\n",
" self._columns = columns\n",
" \n",
" # Define axes\n",
" # Should read axes from NanoAOD config\n",
" dataset_axis = hist.Cat(\"dataset\", \"Primary dataset\")\n",
" mass_axis = hist.Bin(\"mass\", r\"Jet $m$ [GeV]\", 100, 0, 50)\n",
" pt_axis = hist.Bin(\"pt\", r\"Jet $p_{T}$ [GeV]\", 100, 0, 300)\n",
" eta_axis = hist.Bin(\"eta\", r\"$\\eta$\", 60, -3, 3)\n",
" phi_axis = hist.Bin(\"phi\", r\"$\\phi$\", 60, -3, 3)\n",
" \n",
" # Define similar axes dynamically\n",
" disc_list = [\"btagCMVA\", \"btagCSVV2\", 'btagDeepB', 'btagDeepC', 'btagDeepFlavB', 'btagDeepFlavC',]\n",
" btag_axes = []\n",
" for d in disc_list:\n",
" btag_axes.append(hist.Bin(d, d, 50, 0, 1)) \n",
"\n",
" # Define histograms from axes\n",
" _hist_dict = {\n",
" 'mass': hist.Hist(\"Counts\", dataset_axis, mass_axis),\n",
" 'pt': hist.Hist(\"Counts\", dataset_axis, pt_axis),\n",
" 'eta': hist.Hist(\"Counts\", dataset_axis, eta_axis),\n",
" 'phi': hist.Hist(\"Counts\", dataset_axis, phi_axis),\n",
" #'cutflow': processor.defaultdict_accumulator(int),\n",
" }\n",
"\n",
" # Generate some histograms dynamically\n",
" for disc, axis in zip(disc_list, btag_axes):\n",
" _hist_dict[disc] = hist.Hist(\"Counts\", dataset_axis, axis)\n",
" \n",
" self._accumulator = processor.dict_accumulator(_hist_dict)\n",
"\n",
" @property\n",
" def columns(self):\n",
" return self._columns\n",
"\n",
" @property\n",
" def accumulator(self):\n",
" return self._accumulator\n",
"\n",
" def process(self, events):\n",
" output = self.accumulator.identity()\n",
"\n",
" dataset = events.metadata['dataset']\n",
" \n",
" # Trigger level\n",
" triggers = [\n",
" \"HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ\",\n",
" \"HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ\",\n",
" \"HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ\", \n",
" ]\n",
" trig_arrs = [events.HLT[_trig.strip(\"HLT_\")] for _trig in triggers]\n",
" req_trig = np.logical_or.reduce(np.vstack(trig_arrs), axis=0).sum()\n",
"\n",
" # Event level\n",
" req_muon = (events.Muon.counts >= 1)\n",
" req_ele = (events.Electron.counts >= 1)\n",
" req_jets = (events.Jet.counts >= 2)\n",
" \n",
" event_level = req_muon & req_ele & req_jets\n",
" \n",
" # Per jet\n",
" jet_eta = (abs(events.Jet.eta) <= 2.5)\n",
" \n",
" jet_level = jet_eta.sum() >=2\n",
" \n",
" total_cut = event_level & jet_level\n",
" \n",
" # Selected\n",
" selev = events[total_cut] \n",
" \n",
" # output['pt'].fill(dataset=dataset, pt=selev.Jet.pt.flatten())\n",
" # Fill histograms dynamically \n",
" for histname, h in output.items():\n",
" # Iterate over histname and object\n",
" if histname.startswith('cutflow'): continue\n",
" # Get valid fields perhistogram to fill\n",
" fields = {k: selev.Jet[k].flatten() for k in h.fields if k in dir(selev.Jet)}\n",
" h.fill(dataset=dataset, **fields)\n",
"\n",
" return output\n",
"\n",
" def postprocess(self, accumulator):\n",
" return accumulator"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2020-02-03T16:26:21.315919Z",
"start_time": "2020-02-03T16:26:21.308973Z"
}
},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'processor' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-3-9312c54a647b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m }\n\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m output = processor.run_uproot_job(fileset,\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0mtreename\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Events'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mprocessor_instance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mNanoEventsProcessor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'processor' is not defined"
]
}
],
"source": [
"# from pyinstrument import Profiler\n",
"# tstart = time.time() \n",
"\n",
"# profiler = Profiler()\n",
"# profiler.start()\n",
"\n",
"fileset = {\n",
" # Found at /afs/cern.ch/user/a/adodonov/public/forAndrey/Andrey*.root\n",
" 'ttbar': [\n",
" 'Andrey.root',\n",
" 'Andrey1.root',\n",
" 'Andrey2.root',\n",
" 'Andrey3.root',\n",
" ],\n",
" 'Data (jk its also ttbar)': [\n",
" \n",
" ]\n",
"}\n",
"\n",
"output = processor.run_uproot_job(fileset,\n",
" treename='Events',\n",
" processor_instance=NanoEventsProcessor(),\n",
" #executor=processor.iterative_executor,\n",
" executor=processor.futures_executor,\n",
" executor_args={'workers': 4, 'nano': True},\n",
" )\n",
"\n",
"# profiler.stop()\n",
"# print(profiler.output_text(unicode=True, color=True))\n",
"\n",
"# elapsed = time.time() - tstart\n",
"#output"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2020-01-28T12:54:41.123079Z",
"start_time": "2020-01-28T12:54:41.118951Z"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2020-01-28T12:57:43.184679Z",
"start_time": "2020-01-28T12:57:41.376746Z"
},
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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Dx+uO98ilXT44YdX6nORIVXJ8tFHH5GXl8e1115LYWEhe+21F1u2bCnzJSHesbt06ULHjh154YUXaNOmDa1ataJ3797lHmv33XdnyZIlpbZt3LiRFSu2Pv1yxRVX8H//93/ceeedHH/88TRv3pwxY8bw7rvvVusczIzBgwczePBgFi9ezMsvv8wdd9zBs88+y9dff02bNm3Yc8894z5rGhlulgWSEn8l/RSbRZJDsTmg2JxeiawjPS5ZBw2XoTq0nOKbw1e8eu8DcWdvcfc1VLAutLuPZmsPdZ03a9YsVq9ezR/+8IdSQy5OOukkioqK2LJlS9L/5yIiyfPWW2/RvHlzRowYUbJt6tSplaprZiX/1lu1alXh0DGAHj168Pjjj3PDDTeU3Il/6qmnSj3f+cYbb3DKKafQv3//SrenMudw5ZVXMnPmTF566SXatm3L2WefTaNGjfjjH//IqlWr6NGjB7feeivt27enbdu2AGzevJnLL7+cTp06ceih5YWSuiOZ8VfSS7FZpHZTbFZsjpbIOtLxn4SP4u6vV685kiyLFy8Gggf841m2bBm77bZbTTZJRBKwzz77sGrVKv7617/Sq1cv5s6dy0MPPUSDBg144YUXKlwnE7Y+i2VmXHvttRV+9pprruHggw/mmGOOYejQoSxZsoTbbruNXXfdtVR7nnzySfbcc0923XVXXnjhhZLJOx566CHOP//8kkD/3HPP8bvf/a5S59C5c2f+/ve/M2TIEHr37s2SJUsoKCigR48etGzZkuOPP57c3FyOPvpoLr30Upo0acJ//vMf/vOf//D660HIMTO233573njjDQ488EAOPPDAalz5zKP4W3coNovUborNis3REul7f5VgaFnsRGEevrYQTOAllRA7AUB5EwJUVWT6/xdeeCHuM1rlPSMmIpnhuOOOY8SIETz00EM89thjHHrooUyaNIlXXnmFW2+9lQ8//LDU7KCxDj/8cFq2bImZVTh0DIJnOt944w2uvPJKzj//fDp37sxjjz3GP//5z5LP3HPPPQwdOpRhw4bRunVrTjrpJObPn88f/vAH7rzzToYOHcphhx3Gcccdx9VXX8369eu5/PLLt3kOgwYNYsmSJYwdO5bx48fTqlUrfvvb35Ys12FmTJ48mcsvv5yRI0fyww8/0K1bN1566aWSmULr16/PFVdcwf3338/K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eikQTJQUCdaVNXz48EpPsJSNLrnkEvLz89m0aVO6m6L4Ww2KzSLZRbG5bsug2AzuXqkXsDfwE8GMmuOBv4c/VwA/AntVdl+Z+iJYp9OrapdddvG//OUvpbZdfPHFvuOOO/qWLVuqvN+quPbaa719+/Y1ekyRmjL8+c/8tIffLfXa/4bJZV4dr3rBO171Qtyy/W+YXKr+8Oc/S6gN7du397Fjx5batnnzZu/WrZtfd9117u7+yy+/+ODBg71Vq1beoEED7969u7/55pvu7t6tWzeP/D/nvvvu882bN/sVV1zhbdq08ZycHN9nn338mWeeKff4jz32mJ966qkl73v27FnSHsA///xzd3cvKCjw3Xff3b/44osy+3jooYf8yCOP9I8//rikLYCvXr3ap02b5j169PCGDRt627Zt/aGHHorbjm21O7oto0eP9k6dOnmDBg38gAMO8Lfffrvkc//61798n3328SZNmnjPnj196tSpcY/XokWLknaOGDGiTLvbt2/vd911lx9yyCHetGlTP+KII/zTTz8tqX/XXXd5u3btPCcnxzt06OAPPPBASVn79u19woQJfsABB/i1117r7u6nnHKKT5gwodz/DtsSFVeqE5vqfPzdxvkrNovUAorNis3ZFJvdvfI90u4+Nwzmo4HdgTyCJTgeAX7l7l9Vdl91UXFxMcuXL6d3796ltvfq1Ysff/yRZcuWVXnfCxcuxMx49dVXS7ZNmzaNI488kubNm9O+fXtuuummkjszZ511FrfccguLFi3CzEqGPxQUFLDffvvRqFEj9txzT2655ZbIlxQRSYJ69epx0kkn8d57wdIeY8aM4fXXX+ftt99m8eLFHHzwwVx88cUAzJgxg/bt2zNp0iQuuOACJk+ezEMPPcRzzz3H0qVL6d+/P0OGDCn3WBMnTuT444+vsD2jR4/mpptu4o033uBXv/pVuZ878MADeeONN9hll11wd5o2bcqAAQPo06cP3377LXfeeSfnn38+y5cvL1O3su1esGAB+fn53HPPPSxZsoSjjz6ac889F4C33nqLCy64gHvvvZdvv/2WgQMH0rdvX77//vsy+4n0KHz++ecMGzasTLsB7rrrLu69914WLFhAly5d+N3vfsf69euZPXs2l19+OaNGjWL58uVce+21/OUvfynVS3HXXXcxbtw4brjhBgCOO+44Hn/88Qqvc6op/ladYrOIKDYrNqdMZbJtoDNwZsy2M4D7gGOqm81nyotq3PVet26df/DBB75q1apS2y+55BLPycnxdevWVWm/7u4LFixwwF955RV3d586darXr1/fTzrpJJ84caJfc801vt122/n555/v7u6ffvqpn3766d66dWufNGmSr1ixwv/973874EOHDvUJEyb4+eef74BPnDixyu0SyXSRO9qpEO+ut7v7gw8+6Pvss4+7uy9fvtyXLl3q7u5r16714cOHl+qNat++vU+aNMnd3VeuXOlff/21u7tv2LDBH3nkkXL/f7RlyxZv3LhxqTvDsXe9L7vsMgf8ueeeK/ccIne93d3feOMN32WXXUrKdtttN7/44ov9+++/d3f3pUuX+oYNG8rsY1vtJrzr/eWXX3q9evX80Ucf9V9++cXXr1/vy5Ytc3f3s88+2//617+W2u9BBx3kjzzySNx2E3UnPbbd7du399tvv73k/S+//OItWrTwt99+21evXu3z5s1zd/dNmzb5yy+/7IAvWLCgpG5hYWGpY73zzjvetGnTKvdcUs273tkSf7dxDRSbReoQxWbF5toemyOvCmftNrN6wM3AlcBnwL+ic3Dgz8D5ZvYv4OywYVmpQYMG5Obmlto2btw47r33XoYOHUqDBg3K1DEzFixYUDKhQGVde+21HHnkkTz77LMlC4q3adOGv/3tbwwbNoyuXbvSqVMn3nvvPY477jgAXnvtNfbee28efvhhAM444wzMLDOeLxCpQ5YtW0bbtm1L3l933XXMmDGDhg0b0qRJk3Lrbb/99txzzz1MmzaN+vXrVzi5yIoVK1i7dm2Fd7KLioo444wzGDlyJCeeeCL16iUyJUZwN/uee+6hY8eO7L333uTn5zN48OAqt7tz5848//zz3HfffZx77rkcccQRXHTRRRx33HF8++239OnTp9Tn99prLxYvXpxQmyP23nvvkt8bNmxIu3btWLJkCYceeiiPPvooL7/8Mps2bWKvvfYqU3e33XYr9X6fffZhzZo1rFy5klatWlWpPVWh+Jscis0iAorNis2psa3/egOBq4BbgFLjotz9CYIlLy4HzgTOSkH7aqXFixdz6qmnMmjQII499ljuvPPOpO17y5Yt/Pe//+XUU0/l559/Zs2aNaxZs4YTTzyRLVu2MG/evLj1unTpwty5c7nwwgv5+OOP2bJlC/fffz9/+tOfktY2kWy3ZcsWnnvuOQ477DAAzjnnHMyM119/nXfeeSfu0noR11xzDXPmzOGll17i3XffZdiw6q1oNGHCBB588EEWLFiQ8OzR69ev5+eff2b06NGsWLGCO+64gxEjRvCvf/2rzGcr2+7vv/+e9u3bM3nyZJYuXcrpp5/OCSecwNy5c9l9991ZsGBBqc/Pnz+fPfbYI6F2R0T/f/CXX35h4cKFdOjQgfvuu4/nn3+ep59+mvfff5/77ruvTN1Ev9SkkOJvkik2i2QnxWbF5lTZVqv+Ajzq7te7+8rYQnff5O53A2OAoaloYG3zxBNP0LVrV15//XUefPBBXnzxRRo1alRSHgmua9asASgVcLds2VLebkt8//33rF+/nvPPP59mzZqVvDp27AjA119/Hbfe0KFD+fvf/86LL77IQQcdROvWrbn22mv57rvvknDWItlt8+bNzJ07l0GDBrF8+XIuueQSAJYsWUKjRo3YtGkTb731Frfddhtr1qzh559/LqlbXFxc8tmGDRsC8MEHH5QEvXj/Rlu1akXjxo358ssvy21TkyZN2GGHHfjHP/7BVVddxdKlS7d5HmvXrmXjxo0AHHXUUYwZM4a1a9ey0047sWXLlri9d5Vt9+eff85hhx3Gu+++i7vTokULzIycnBz++Mc/MnbsWF599VWKi4t54IEH+PLLLznxxBPLbWvkusW2G+Dee+/lf//7HytWrOCiiy6iffv25ObmsmTJEho0aEC9evX47LPPSv47VfT/wS+++IImTZrQsmXLbV2+ZFP8jZGfn1/mVdl1uxWbRbKPYrNiMwSjAGJjR9JUNO6bYJbQAdsaH07wvNaK6o4zT/eLcLz8kCFDyryef/75bY63nzBhggN+zDHHlDy7ECtyjHivyLMAsaKfw9q4caNvt912PmLECH/nnXfKvL799lt3L39m0C1btvicOXP8H//4h++2225+6KGHbvO8RGqrVD+HFf3vd/fdd/fTTz/dlyxZUvKZN954w3/1q19548aN/YgjjvBXX33Vu3bt6gMHDnR396uuusqbNWvmo0eP9pkzZ/pBBx3kjRo18oMPPtiLior8N7/5jR9xxBFxj9+3b99SzymVNzPoli1bvE+fPt6/f/8y+4h+DmvVqlXetWtXb9asma9Zs8Yff/xx32uvvTwnJ8d32203v+KKK3zTpk1l9rGtdkfasmXLFr/qqqu8devWJTOIjh8/vmQ/Y8eO9c6dO3vjxo39kEMOKXdmUHf3gQMHetOmTX3KlCll2t2+fXsfM2aMd+/e3Zs1a+a//e1vff78+e7u/s0333ivXr28UaNG3qVLFx8/frz/+c9/9nbt2pX8N408FxcxevRoP/HEE8ttS7Tnn3++TOygis9hZVv83cY5VmvWbsVmkcyi2KzYXJOxOZ6qxubY17aC14/AWdvcCZwNfFvdxqT7VZ1gvX79em/VqpWfeOKJvnHjxnI/Fx1YAX/qqadK3v/yyy9x68ROaNKjR4+SyUui99u/f/+SCQJig/WAAQN8yJAhperccsst3qxZs6qcrkitkMpgnW6PPvpouUtsSPKka4mNbIu/2zhHxWaROkSxWaorU5a/qnCyMeAT4Fhg3DY+dzTw4TY+U6f997//ZcWKFfTs2bPUUhgRRx55JI0aNeLwww8vtb1Hjx4JT2gyYsQI+vbti7vTu3dv5s+fz9133023bt1o3bo1EEywsmzZMqZMmUKPHj3o2LEjt956K82bN6dHjx589dVX3H///SUTnojURU8OPSzdTUiZ/v37c+ONN5Y8x/TNN9+w/fbbp7tZdcqcOXP49NNP07XEhuJvEig2i2QexWapjjTH5tIqyrKB/sAWIL+CzwwCNgNnVDerT/eLatz1fvLJJxMeGlbe9lixd73d3SdPnuyHHnqoN2nSxPfYYw+/6KKLSi3vMWfOHD/ggAO8YcOGPm3aNP/ll1/8b3/7m++xxx6ek5Pjbdu29QsvvNB/+umnKp2viKTfa6+95ueee6536tTJjznmmJJeL0mOoUOH+uuvv16tfVD1Humsir/buBaKzSJSayg2p1Y6Y3Psy4J9lc/MHiKYyOQj4HFgAbAB6Aj8HjgS+Je7l517vZYxsyBib+Oa1LSFCxey55578sorr3DMMcekuzkiIlJJkWWQ3N2qUDdr4m9FFJtFRCSZqhObo21raDfufp6Z/R9wI/B3IPqAcwmW6HiiOo2Qiq1bty7dTRARkRqm+JvZFJtFRLLbNhNpAHd/FXjVzBoQ3AlvCHzl7qtT2TiBb775hvvvvx+AnXbaKc2tERGRmqT4m5kUm0VEpFKJdIS7rwc+T1FbJI4xY8bw2GOPcfHFF9OtW7d0N0ekdhl7QvBz0IvpbYdINSn+ZhbFZpFqUGyWOmKbz0hnk0x9DktEqkjBWtIsWc9hZTPFZpE6RrFZ0qzGnpHORvn5+WW25eXlkZeXl4bWiIhIbVBUVERRUVG6myEiIiI1QD3SUXTXW6SO0V1vSTP1SFefYrNIHaPYLGmWrNhcLymtERHJMh06dGDy5MksXLgQMyuZwfeoo47i4YcfTnPrREREso9is9QkDe0WERGRjKfHrkREJFGpfOxKQ7ujZOvwsU2bNsVdD3P77benQYMGaWiRyDZMugqWzSy9bdmnZT+34efgZ06T+Ptpc0DU713h+NsqdfgDDzyQTz75pMz2mTNncsEFF9CrVy+mTZvG//73Pzp37szdd9/NkUceCcCECRO48cYbWbRoEa1atWLIkCEMHz4cM+Ooo46if//+TJgwgT333JNHH320Uu2RzKWh3dWn2FyaYrNkLMVmqSU0tDtDDR8+nLPOOivldeLZvHkzd911F/vuuy9NmjShW7duPPLII9v88vGf//yHZs2alXldeuml1W6TSF00Y8YM2rdvz6RJk1iwYAEAv/zyC/vvvz8A99xzD5dddhlff/01v//978nLy+P777+nuLiYM888k2uuuYbly5dTWFjIiBEjmDlz6xePO+64g5EjR1JYWJiWcxOpixSbReo+xWapaTU+tNvMzgLGxilaAHQCrgLygcbAM8DF7r4hrNsDeADYB/gEGOLuX4RlTYCHgL7Aj8Bd7l7yMISZDQauAHYGpgDnuntxCk4xbe6++26uvvpqLrvsMg4++GDefvtthgwZQnFxMRdffHG59ebPn8+ee+7J+PHjS23fddddU91kkaqp5N3pdE1o8qc//Ynjjz8egGHDhjFx4kQmT57MaaedxqxZs+jcuTMAe+yxBzk5OaxcubKk7oABAzjiiCNqtL0ikjqKzZI1FJsly9R4Iu3u44Bx0dvMbALwBjAQGAqcCKwCngauB4aZWTPgFeByggT7fGCKmXVy903AP4FWwP7AnkCRmX3l7q+aWS/gTuB3wFxgFPBgeLxa5eeff6a4uDhuIL3rrrs499xzue224H9k/fr1Y/vtt2fEiBH87W9/KxnGEGv+/Pnss88+HH744Sltu0i22HvvvUt+NzP23ntvlixZQk5ODi+//DL5+fn8/PPP7L333tSvX79U3d12262mmysi1aTYLJL5FJsl2dI+tNvMfgvkAI8AQ4A73f0zd18MXAecHX60H/CVuxe6+4/ASKA+cHTYGz0AuNLdl7n7ewTJcqTuOcAYd5/q7ssJkvF+Zta8hk4zKVasWMHRRx/Nl19+WaasuLiY5cuX07t371Lbe/XqxY8//siyZcvK3e+8efPo0KEDEDyTJSLVM2/evJLf3Z0vv/ySDh068Oyzz3LbbbcxduxYpk+fzoQJE9huu9L3M+vVS/v/lkUkAYrNIrWDYrMkW1pn7TazRsBdQF93dzPrDHwc9ZEZQJuwN7pUmbtvMbNPwu2LCM5lVkzd48LfOxMM547UnWtmm4D2QMysCJCbm1vpc8jPz487k2hEhw4d6N27N6tWreKNN95gxx135C9/+QuXXHJJuXeh41m8eDG//e1v6dKlC4ceemiZ8gYNGvDBBx+UDEuJeOedd8jJyaFly5bl7nv+/Pls2rSJvffem3nz5rHnnntyySWXcN555+l/HCIVKC4uLvV7w4YNAXj00Uf53e9+xyGHHMK9997LTz/9RN++ffnXv/5FTk4O2223HfPmzWPUqFEUFxfz3XffZd1ESrVZQUEBBQUF6W6GVINis0jdpdgsNSXdy18NA14Ke58BWgLRzy2vCn/uHKcsUl5S5qX/2iNl8fYbW17K9OnTEziFbRs3bhynn346o0aN4quvvuLKK6+kUaNGnH/++ZWqP3v2bPr06UPfvn158MEHyww3gSBYx94AGDduHPfeey9Dhw4td4bPjRs3smjRIoqLi7nxxhtp3749RUVFXHDBBWzatImLLroo8RMWyQJnnHEG55xzDvfccw+9e/emU6dOfPDBBwDcdNNNjBgxghkzZtC1a1emTJlCs2bNOPPMM3n55ZfZd9992XXXXTnvvPO4+uqr+ctf/sJvfvObNJ+RVNa2bqBGSyQpk5ql2CxS9yg2S41y97S8CIZzfw+0j9q2FPh11PudAQdaEAzlLozZx4vARcCvgI2Ey3mFZf2Aj8Pf3wP+GFP3Z6BbzDYPLknV3XDDDX7mmWeWvG/fvr0PHDjQt2zZUrLtzDPP9J49e5ZbJ9q7777rLVu29GHDhpXaR0W+/vprP+WUUxzw4447zteuXVvuZ3/55Rd//PHHfd68eaW2//nPf/ZddtmlUscTyVhj+gYvkTSJiitpi7e1/aXYvJVis9QJis2SZsmKzekcG3QsQaK7KGrbXOCgqPfdge8IepNLlZlZPaAbMAf4BthMMNFYdN058fYbDiHPARYm51Qq1qlTp1K9Eh06dKjwuaiI7777jqOPPpqrr76aESNGVKpn44knnqBr1668/vrrPPjgg7z44os0atSo3M83bNiQ008/nY4dO5bafuKJJ7J8+XK+//77bR5TJGMNerHGZwUVkdpBsVkkTRSbpY5IZyJ9BvBSzLbRwKVmtq+ZtQVuBEaHdw6eATqZ2TlmtgPBMllbgFfc/WdgIjDSzFqb2aEEE5eNjtrvYDM7zMxaA7cDT7n7KjJYkyZN2G+//XjppZdKPe9RnokTJ3LGGWfQo0cP5syZU6nnqL7++msmT57Mli1bSm2vV68eZkaTJk2qdQ4iIiJ1iWKziIhAmhJpM2sMnAS8E1P0KEHSOxmYDnxEkEzjwZrPfYBzgcXA8UAfD5a+ArgQ+An4AngMuM7dXwnrvk0wU/f4sHwdcF5qzi55mjRpwuuvv852223HUUcdxfLly8v97IYNG7jwwgs58cQTmTRpEjvttFOljvH9999z/PHH88orr5Ta/sILL3DAAQfQuHHjap2DiIhIXaLYLCIikKbJxtx9LdAsznYHbg5f8eq9D8SdUtvd11DButDuPpqtPdS1RrNmzXjhhRc488wzOfzww3n55ZfZc889y3zuv//9LytWrKBnz568+uqrZcqPPPJIGjVqxMyZM/n222857rhgQvODDjqIo48+moEDBzJs2DB22203Jk+ezPjx45k8eXLKz09ERKQy4k3wlpeXR15eXo23RbFZRKR2KCoqoqioKCX7Tves3VIJOTk5TJgwgb/97W/8v//3/3j//fdp165dqc9Enuu67rrr4u5jwYIFdOjQgbvuuot//etfkQlcMDOeeuoprr76am6//XZWr17NgQceyGuvvcZRRx2V0vMSERGprExbckyxWUQk88W74VpYWJiUfSuRTrGFCxcmZT/16tXj3nvvpU2bNsyfP79MsD7ttNM47bTTtrmfcePGMW7cuFLbWrZsyahRoxg1alRS2ioiIpLJFJtFRKS6lEjHkUnDx6KZGddccw2bNm3a9odFRKRGpXL4mGQuxWYRkeykRDqOTBs+Fmu77fSfTUQk06Ry+JhkPsVmEZHsks7lr0RERERERERqHYtMbCFgZg6gayIiIslgZgC4u6W5KbWWYrOIiCRTsmKzeqRFRERERERE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\n",
"text/plain": [
"<Figure size 1152x504 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.style.use([hep.style.ROOT, {'font.size': 16}])\n",
"\n",
"for i in range(0, int(round(len(output.keys()))), 2):\n",
" fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 7))\n",
" h1 = output[list(output.keys())[i]]\n",
" h2 = output[list(output.keys())[i+1]]\n",
" plot.plot1d(h1, ax=ax1, legend_opts={'loc':1});\n",
" plot.plot1d(h2, ax=ax2, legend_opts={'loc':1});\n",
" \n",
" for ax in [ax1, ax2]:\n",
" at = AnchoredText(r\"$1\\mu, 1e$\"+\"\\n\"+\n",
" \"2+ jets\"+\"\\n\"+\n",
" r\"$|\\eta| < 2.5$\",\n",
" loc=2, frameon=False)\n",
" ax.add_artist(at)\n",
" \n",
" hep.mpl_magic(ax1)\n",
" hep.mpl_magic(ax2)\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment