Commit 32e84378 authored by Hubert Degaudenzi's avatar Hubert Degaudenzi
Browse files

latest modification

parents e8c907ba 2e9813bb
......@@ -3,3 +3,4 @@ logs
*.cachefile
Pandemic/.log
**/*.log
**/*.reg
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
......@@ -662,7 +662,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.7"
"version": "3.8.9"
},
"varInspector": {
"cols": {
......
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Welcome to JupyROOT 6.22/08\n",
" i 0 0.000000 1.986693 \n",
" i 1 0.100000 2.955202 \n",
" i 2 0.200000 3.894183 \n",
" i 3 0.300000 4.794255 \n",
" i 4 0.400000 5.646425 \n",
" i 5 0.500000 6.442177 \n",
" i 6 0.600000 7.173561 \n",
" i 7 0.700000 7.833269 \n",
" i 8 0.800000 8.414710 \n",
" i 9 0.900000 8.912074 \n",
" i 10 1.000000 9.320391 \n",
" i 11 1.100000 9.635582 \n",
" i 12 1.200000 9.854497 \n",
" i 13 1.300000 9.974950 \n",
" i 14 1.400000 9.995736 \n",
" i 15 1.500000 9.916648 \n",
" i 16 1.600000 9.738476 \n",
" i 17 1.700000 9.463001 \n",
" i 18 1.800000 9.092974 \n",
" i 19 1.900000 8.632094 \n"
]
}
],
"source": [
"from ROOT import TCanvas, TGraph\n",
"from ROOT import gROOT\n",
"from math import sin\n",
"from array import array\n",
" \n",
" \n",
"c1 = TCanvas( 'c1', 'A Simple Graph Example', 200, 10, 700, 500 )\n",
" \n",
"c1.SetFillColor( 42 )\n",
"c1.SetGrid()\n",
" \n",
"n = 20\n",
"x, y = array( 'd' ), array( 'd' )\n",
" \n",
"for i in range( n ):\n",
" x.append( 0.1*i )\n",
" y.append( 10*sin( x[i]+0.2 ) )\n",
" print(' i %i %f %f ' % (i,x[i],y[i]))\n",
" \n",
"gr = TGraph( n, x, y )\n",
"gr.SetLineColor( 2 )\n",
"gr.SetLineWidth( 4 )\n",
"gr.SetMarkerColor( 4 )\n",
"gr.SetMarkerStyle( 21 )\n",
"gr.SetTitle( 'a simple graph' )\n",
"gr.GetXaxis().SetTitle( 'X title' )\n",
"gr.GetYaxis().SetTitle( 'Y title' )\n",
"gr.Draw( 'ACP' )\n",
" \n",
"# TCanvas.Update() draws the frame, after which one can change it\n",
"c1.Update()\n",
"c1.GetFrame().SetFillColor( 21 )\n",
"c1.GetFrame().SetBorderSize( 12 )\n",
"c1.Modified()\n",
"c1.Update()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"c1.Draw()"
]
},
{
"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.8.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
......@@ -2,24 +2,16 @@
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"This is a C++ cell\n"
]
}
],
"outputs": [],
"source": [
"cout << \"This is a C++ cell\" << endl;"
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
......@@ -31,7 +23,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
......@@ -41,20 +33,9 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"outputs": [],
"source": [
"f1.Draw();\n",
"canvas_2.Draw();"
......
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Welcome to JupyROOT 6.22/08\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from ROOT import TCanvas, TFile, TProfile, TNtuple, TH1F, TH2F\n",
"from ROOT import gROOT, gBenchmark, gRandom, gSystem\n",
"import ctypes\n",
" \n",
"# Create a new canvas, and customize it.\n",
"c1 = TCanvas( 'c1', 'Dynamic Filling Example', 200, 10, 700, 500 )\n",
"c1.SetFillColor( 42 )\n",
"c1.GetFrame().SetFillColor( 21 )\n",
"c1.GetFrame().SetBorderSize( 6 )\n",
"c1.GetFrame().SetBorderMode( -1 )\n",
" \n",
"# Create a new ROOT binary machine independent file.\n",
"# Note that this file may contain any kind of ROOT objects, histograms,\n",
"# pictures, graphics objects, detector geometries, tracks, events, etc..\n",
"# This file is now becoming the current directory.\n",
" \n",
"# hfile = gROOT.FindObject( 'py-hsimple.root' )\n",
"# if hfile:\n",
"# hfile.Close()\n",
"# hfile = TFile( 'py-hsimple.root', 'RECREATE', 'Demo ROOT file with histograms' )\n",
" \n",
"# Create some histograms, a profile histogram and an ntuple\n",
"hpx = TH1F( 'hpx', 'This is the px distribution', 100, -4, 4 )\n",
"hpxpy = TH2F( 'hpxpy', 'py vs px', 40, -4, 4, 40, -4, 4 )\n",
"hprof = TProfile( 'hprof', 'Profile of pz versus px', 100, -4, 4, 0, 20 )\n",
"ntuple = TNtuple( 'ntuple', 'Demo ntuple', 'px:py:pz:random:i' )\n",
" \n",
"# Set canvas/frame attributes.\n",
"hpx.SetFillColor( 48 )\n",
" \n",
"gBenchmark.Start( 'hsimple' )\n",
" \n",
"# Initialize random number generator.\n",
"gRandom.SetSeed()\n",
"rannor, rndm = gRandom.Rannor, gRandom.Rndm\n",
" \n",
"# For speed, bind and cache the Fill member functions,\n",
"histos = [ 'hpx', 'hpxpy', 'hprof', 'ntuple' ]\n",
"for name in histos:\n",
" exec('%sFill = %s.Fill' % (name,name))\n",
" \n",
"# Fill histograms randomly.\n",
"px_ref, py_ref = ctypes.c_double(), ctypes.c_double()\n",
"kUPDATE = 1000\n",
"for i in range( 25000 ):\n",
" # Generate random values. Use ctypes to pass doubles by reference\n",
" rannor( px_ref, py_ref )\n",
" # Retrieve the generated values\n",
" px = px_ref.value\n",
" py = py_ref.value\n",
" \n",
" pz = px*px + py*py\n",
" random = rndm(1)\n",
" \n",
" # Fill histograms.\n",
" hpx.Fill( px )\n",
" hpxpy.Fill( px, py )\n",
" hprof.Fill( px, pz )\n",
" ntuple.Fill( px, py, pz, random, i )\n",
" \n",
" # Update display every kUPDATE events.\n",
" if i and i%kUPDATE == 0:\n",
" if i == kUPDATE:\n",
" hpx.Draw()\n",
" \n",
" c1.Modified()\n",
" c1.Update()\n",
" \n",
" if gSystem.ProcessEvents(): # allow user interrupt\n",
" break\n",
" \n",
"# Destroy member functions cache.\n",
"for name in histos:\n",
" exec('del %sFill' % name)\n",
"del histos\n",
" \n",
"gBenchmark.Show( 'hsimple' )\n",
" \n",
"# Save all objects in this file.\n",
"hpx.SetFillColor( 0 )\n",
"# hfile.Write()\n",
"hpx.SetFillColor( 48 )\n",
"c1.Modified()\n",
"c1.Update()\n",
" \n",
"c1.Draw()"
]
},
{
"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.8.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# hSimple\n",
"\n",
"This program creates:\n",
"* A one-dimensional histogram\n",
"* A two-dimensional histogram\n",
"* A profile histogram\n",
"* A memory-resident ntuple\n",
"\n",
"These objects are filled with some random numbers and saved on a file called `hsimple.root` in `$PWD`.\n",
"\n",
"---"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Welcome to JupyROOT 6.22/08\n"
]
}
],
"source": [
"import ROOT"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'/usr/lib64/python3.8/site-packages/ROOT/__init__.py'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ROOT.__file__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a new machine-independent ROOT binary file. Note that this file may contain any kind of ROOT objects, histograms, pictures, graphics objects, detector geometries, tracks, events, etc.\n",
"\n",
"This file will become the current directory."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"filename = \"files/hsimple.root\"\n",
"hfile = ROOT.TFile(filename,\"RECREATE\",\"Demo ROOT file with histograms\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create two histograms, a profile histogram and an ntuple."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"hpx = ROOT.TH1F(\"hpx\",\"This is the px distribution\",64,-4,4)\n",
"hpxpy = ROOT.TH2F(\"hpxpy\",\"py vs px\",64,-4,4,64,-4,4)\n",
"hprof = ROOT.TProfile(\"hprof\",\"Profile of pz versus px\",64,-4,4,0,20)\n",
"ntuple = ROOT.TNtuple(\"ntuple\",\"Demo ntuple\",\"px:py:pz:random:i\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a new canvas."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"c1 = ROOT.TCanvas(\"c1\",\"Filling Example\",800,600)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fill histograms randomly and benchmark it."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "Failed to get attribute Double from ROOT",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-7-40bdead345d5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mROOT\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTRandom3\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----> 5\u001b[0;31m \u001b[0mrD\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mROOT\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDouble\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 6\u001b[0m \u001b[0mpx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpy\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrD\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrD\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrD\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[1;32m 7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m50000\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/usr/lib64/python3.8/site-packages/ROOT/_facade.py\u001b[0m in \u001b[0;36m_fallback_getattr\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 163\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Failed to get attribute {} from ROOT\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\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[0m\u001b[1;32m 164\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 165\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_finalSetup\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;31mAttributeError\u001b[0m: Failed to get attribute Double from ROOT"
]
}
],
"source": [
"benchmarkName = \"hsimple\"\n",
"ROOT.gBenchmark.Start(benchmarkName)\n",
"\n",
"r = ROOT.TRandom3()\n",
"rD = ROOT.Double()\n",
"px, py, pz = rD(0.), rD(0.), rD(0.)\n",
"for i in range(50000):\n",
" r.Rannor(px,py)\n",
" pz = px*px + py*py\n",
" rnd = r.Rndm()\n",
" hpx.Fill(px)\n",
" hpxpy.Fill(px,py)\n",
" hprof.Fill(px,pz)\n",
" ntuple.Fill(px,py,pz,rnd,i)\n",
"\n",
"ROOT.gBenchmark.Show(benchmarkName)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Save all objects in the `hsimple.root` file."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"input_line_50:2:21: error: expected ';' after expression\n",
" hpx.SetFillColor(0)\n",
" ^\n",
" ;\n",
"input_line_50:3:25: error: use of undeclared identifier 'hfile'\n",
"print(\"Bytes written:\", hfile.Write())\n",
" ^\n"
]
}
],
"source": [
"hpx.SetFillColor(0)\n",
"print(\"Bytes written:\", hfile.Write())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Draw the histogram and the canvas."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"input_line_51:2:19: error: unexpected namespace name 'ROOT': expected expression\n",
" hpx.SetFillColor(ROOT.kBlue-10)\n",
" ^\n"
]
}
],
"source": [
"hpx.SetFillColor(ROOT.kBlue-10)\n",
"hpx.SetLineColor(ROOT.kBlue)\n",
"hpx.Draw()\n",
"c1.Draw()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"IncrementalExecutor::executeFunction: symbol '_ZN5cling7runtime8internal9EvaluateTIvEET_PNS1_15DynamicExprInfoEPN5clang11DeclContextE' unresolved while linking [cling interface function]!\n",
"You are probably missing the definition of void cling::runtime::internal::EvaluateT<void>(cling::runtime::internal::DynamicExprInfo*, clang::DeclContext*)\n",
"Maybe you need to load the corresponding shared library?\n"
]
}
],
"source": [
"%jsroot on\n",
"c1.Draw()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Close the file and list its contents."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"IncrementalExecutor::executeFunction: symbol '_ZN5cling7runtime8internal9EvaluateTIvEET_PNS1_15DynamicExprInfoEPN5clang11DeclContextE' unresolved while linking [cling interface function]!\n",
"You are probably missing the definition of void cling::runtime::internal::EvaluateT<void>(cling::runtime::internal::DynamicExprInfo*, clang::DeclContext*)\n",
"Maybe you need to load the corresponding shared library?\n"
]
}
],
"source": [
"hfile.Close();"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [