{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction\n", "\n", "QA plots for the generic distortions reconstruction performance" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:38.402134Z", "iopub.status.busy": "2025-03-25T17:14:38.400918Z", "iopub.status.idle": "2025-03-25T17:14:38.408495Z", "shell.execute_reply": "2025-03-25T17:14:38.407230Z" }, "jupyter": { "source_hidden": true }, "tags": [] }, "outputs": [], "source": [ "# imports to write dynamic markdown contents\n", "import os\n", "from IPython.display import display, Markdown, Latex\n", "from IPython.display import HTML" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:38.413451Z", "iopub.status.busy": "2025-03-25T17:14:38.411828Z", "iopub.status.idle": "2025-03-25T17:14:38.433067Z", "shell.execute_reply": "2025-03-25T17:14:38.432278Z" }, "tags": [] }, "outputs": [ { "data": { "text/markdown": [ "*For the result HTML page:* " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# turn off/on code for the result HTML page\n", "\n", "display(Markdown('*For the result HTML page:* '))\n", " \n", "HTML('''\n", "
''')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:38.478440Z", "iopub.status.busy": "2025-03-25T17:14:38.477238Z", "iopub.status.idle": "2025-03-25T17:14:38.493518Z", "shell.execute_reply": "2025-03-25T17:14:38.492092Z" } }, "outputs": [ { "data": { "text/markdown": [ "[//]: # (This section starts with a 2nd level heading and get embedded in the result QA report at https://github.com/sPHENIX-Collaboration/QA-gallery/tree/QA-tracking-low-occupancy)\n", "\n", "## Tracking Distortions\n", "\n", "Test tracking QA distortions\n", "\n", "The source code of the macro can be found at https://github.com/sPHENIX-Collaboration/macros/tree/QA-tracking-distortions or [comparing it to the master branch](https://github.com/sPHENIX-Collaboration/macros/compare/QA-tracking-distortions?expand=1).\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import os.path\n", "\n", "# readme file of the macros, available if run under JenkinsCI\n", "# https://github.com/sPHENIX-Collaboration/utilities/blob/master/jenkins/built-test/test-tracking-qa.sh \n", "\n", "macro_markdown = 'Fun4All-macros-README.md'\n", "\n", "\n", "if os.path.isfile(macro_markdown) :\n", " with open(macro_markdown, 'r') as file:\n", " display(Markdown(file.read()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `pyROOT` env check" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:38.498185Z", "iopub.status.busy": "2025-03-25T17:14:38.497054Z", "iopub.status.idle": "2025-03-25T17:14:50.637667Z", "shell.execute_reply": "2025-03-25T17:14:50.636351Z" }, "tags": [] }, "outputs": [ { "data": { "text/markdown": [ "via sPHENIX software distribution at `/var/lib/jenkins/workspace/sPHENIX/Build-Master-gcc14/build/new/install.1`" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import ROOT\n", "\n", "OFFLINE_MAIN = os.getenv(\"OFFLINE_MAIN\")\n", "if OFFLINE_MAIN is not None:\n", " display(Markdown(f\"via sPHENIX software distribution at `{OFFLINE_MAIN}`\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting source code" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:50.641652Z", "iopub.status.busy": "2025-03-25T17:14:50.640697Z", "iopub.status.idle": "2025-03-25T17:14:50.770833Z", "shell.execute_reply": "2025-03-25T17:14:50.769808Z" } }, "outputs": [ { "data": { "text/markdown": [ "View the source code repository at https://github.com/sPHENIX-Collaboration/QA-gallery.git" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import subprocess\n", "\n", "try:\n", " git_url = \\\n", " subprocess.run(['git','remote','get-url','origin'], stdout=subprocess.PIPE)\\\n", " .stdout.decode('utf-8').strip()\\\n", " .replace('git@github.com:','https://github.com/')\n", "\n", " display(Markdown(f\"View the source code repository at {git_url}\"))\n", "except: # catch *all* exceptions\n", " # well do nothing\n", " pass" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "## JenkinsCI information (if available)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:50.775840Z", "iopub.status.busy": "2025-03-25T17:14:50.774600Z", "iopub.status.idle": "2025-03-25T17:14:50.913573Z", "shell.execute_reply": "2025-03-25T17:14:50.912499Z" } }, "outputs": [ { "data": { "text/markdown": [ "Some further details about the QA run, if executed under the Jenkins CI:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "* The commit being checked is sPHENIX-Collaboration/coresoftware/cdd9aff0a42f7fc7812a7e49161bae9e18b1bfb3" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "* Link to the pull request: https://github.com/sPHENIX-Collaboration/coresoftware/pull/3493" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "* Link to the build: https://web.sdcc.bnl.gov/jenkins-sphenix/job/sPHENIX/job/test-tracking-distortions-qa/3419/" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "* Git repo for macros: https://github.com/sPHENIX-Collaboration/macros.git , which merges `master` and the QA tracking branch" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "* Download the QA ROOT files: https://web.sdcc.bnl.gov/jenkins-sphenix/job/sPHENIX/job/test-tracking-distortions-qa/3419/display/redirect?page=artifacts" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "Automatically generated by [sPHENIX Jenkins continuous integration](https://web.sdcc.bnl.gov/jenkins-sphenix/) [![sPHENIX](https://raw.githubusercontent.com/sPHENIX-Collaboration/utilities/master/jenkins/material/sphenix-logo-white-bg-72p.png)](https://www.sphenix.bnl.gov/web/)             [![jenkins.io](https://raw.githubusercontent.com/sPHENIX-Collaboration/utilities/master/jenkins/material/jenkins_logo_title-72p.png)](https://jenkins.io/)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(Markdown('Some further details about the QA run, if executed under the Jenkins CI:'))\n", "\n", "checkrun_repo_commit = os.getenv(\"checkrun_repo_commit\")\n", "if checkrun_repo_commit is not None:\n", " display(Markdown(f\"* The commit being checked is {checkrun_repo_commit}\"))\n", " \n", "ghprbPullLink = os.getenv(\"ghprbPullLink\")\n", "if ghprbPullLink is not None:\n", " display(Markdown(f\"* Link to the pull request: {ghprbPullLink}\"))\n", "\n", "BUILD_URL = os.getenv(\"BUILD_URL\")\n", "if BUILD_URL is not None:\n", " display(Markdown(f\"* Link to the build: {BUILD_URL}\"))\n", "\n", "git_url_macros = os.getenv(\"git_url_macros\")\n", "sha_macros = os.getenv(\"sha_macros\")\n", "if git_url_macros is not None:\n", " display(Markdown(f\"* Git repo for macros: {git_url_macros} , which merges `{sha_macros}` and the QA tracking branch\"))\n", "\n", "RUN_ARTIFACTS_DISPLAY_URL = os.getenv(\"RUN_ARTIFACTS_DISPLAY_URL\")\n", "if RUN_ARTIFACTS_DISPLAY_URL is not None:\n", " display(Markdown(f\"* Download the QA ROOT files: {RUN_ARTIFACTS_DISPLAY_URL}\"))\n", "\n", "JENKINS_URL = os.getenv(\"JENKINS_URL\")\n", "if JENKINS_URL is not None:\n", " display(Markdown(f\"Automatically generated by [sPHENIX Jenkins continuous integration]({JENKINS_URL}) [![sPHENIX](https://raw.githubusercontent.com/sPHENIX-Collaboration/utilities/master/jenkins/material/sphenix-logo-white-bg-72p.png)](https://www.sphenix.bnl.gov/web/)             [![jenkins.io](https://raw.githubusercontent.com/sPHENIX-Collaboration/utilities/master/jenkins/material/jenkins_logo_title-72p.png)](https://jenkins.io/)\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Initialization" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:50.917524Z", "iopub.status.busy": "2025-03-25T17:14:50.916945Z", "iopub.status.idle": "2025-03-25T17:14:51.535663Z", "shell.execute_reply": "2025-03-25T17:14:51.534362Z" }, "scrolled": true, "tags": [] }, "outputs": [], "source": [ "%%cpp -d\n", "\n", "#include \"QA_Draw_Utility.C\"\n", "\n", "#include \n", "\n", "#include \n", "#include \n", "#include \n", "#include \n", "#include \n", "#include " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:51.539762Z", "iopub.status.busy": "2025-03-25T17:14:51.538645Z", "iopub.status.idle": "2025-03-25T17:14:52.573271Z", "shell.execute_reply": "2025-03-25T17:14:52.572299Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sPhenixStyle: Applying nominal settings.\n", "sPhenixStyle: ROOT6 mode\n" ] } ], "source": [ "%%cpp\n", "\n", "SetsPhenixStyle();\n", "TVirtualFitter::SetDefaultFitter(\"Minuit2\");" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:52.576228Z", "iopub.status.busy": "2025-03-25T17:14:52.575815Z", "iopub.status.idle": "2025-03-25T17:14:52.736457Z", "shell.execute_reply": "2025-03-25T17:14:52.735411Z" } }, "outputs": [], "source": [ "%jsroot on" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inputs and file checks" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:52.740466Z", "iopub.status.busy": "2025-03-25T17:14:52.739961Z", "iopub.status.idle": "2025-03-25T17:14:52.850055Z", "shell.execute_reply": "2025-03-25T17:14:52.849044Z" } }, "outputs": [], "source": [ "\n", "qa_file_name_new = os.getenv(\"qa_file_name_new\")\n", "if qa_file_name_new is None:\n", " qa_file_name_new = \"G4sPHENIX_test-tracking_Event500_Sum5_qa.root\"\n", " display(Markdown(f\"`qa_file_name_new` env not set. use the default `qa_file_name_new={qa_file_name_new}`\"))\n", "\n", "qa_file_name_ref = os.getenv(\"qa_file_name_ref\")\n", "if qa_file_name_ref is None:\n", " qa_file_name_ref = qa_file_name_new\n", " display(Markdown(f\"`qa_file_name_ref` env not set. use the default same as new file `qa_file_name_ref={qa_file_name_ref}`\"))\n", "elif qa_file_name_ref == 'None':\n", " qa_file_name_ref = qa_file_name_new\n", " display(Markdown(f\"`qa_file_name_ref` env not set. use the default same as new file `qa_file_name_ref={qa_file_name_ref}`\"))\n", " \n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:52.853485Z", "iopub.status.busy": "2025-03-25T17:14:52.853047Z", "iopub.status.idle": "2025-03-25T17:14:53.074943Z", "shell.execute_reply": "2025-03-25T17:14:53.073190Z" } }, "outputs": [ { "data": { "text/markdown": [ "Opening QA file at `G4sPHENIX_test-tracking_Event700_Sum3_qa.root`" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "Opening QA reference file at `reference/G4sPHENIX_test-tracking_Event700_Sum3_qa.root`" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# qa_file_new = ROOT.TFile.Open(qa_file_name_new);\n", "\n", "# assert qa_file_new.IsOpen()\n", "# qa_file_new.ls()\n", "display(Markdown(f\"Opening QA file at `{qa_file_name_new}`\"))\n", "ROOT.gInterpreter.ProcessLine(f\"TFile *qa_file_new = new TFile(\\\"{qa_file_name_new}\\\");\")\n", "ROOT.gInterpreter.ProcessLine(f\"const char * qa_file_name_new = \\\"{qa_file_name_new}\\\";\")\n", "\n", "if qa_file_name_ref is not None:\n", "# qa_file_ref = ROOT.TFile.Open(qa_file_name_ref);\n", "\n", "# assert qa_file_ref.IsOpen()\n", " display(Markdown(f\"Opening QA reference file at `{qa_file_name_ref}`\"))\n", " ROOT.gInterpreter.ProcessLine(f\"TFile *qa_file_ref = new TFile(\\\"{qa_file_name_ref}\\\");\")\n", " ROOT.gInterpreter.ProcessLine(f\"const char * qa_file_name_ref = \\\"{qa_file_name_ref}\\\";\")\n", "else:\n", " ROOT.gInterpreter.ProcessLine(f\"TFile *qa_file_ref = nullptr;\")\n", " ROOT.gInterpreter.ProcessLine(f\"const char * qa_file_name_ref = nullptr;\")\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:53.078330Z", "iopub.status.busy": "2025-03-25T17:14:53.078100Z", "iopub.status.idle": "2025-03-25T17:14:53.210470Z", "shell.execute_reply": "2025-03-25T17:14:53.209515Z" }, "scrolled": true, "tags": [] }, "outputs": [], "source": [ "%%cpp\n", "\n", "if (qa_file_new == nullptr) \n", "{\n", " cout <<\"Error, can not open QA root file\"<IsOpen()) \n", "{\n", " cout <<\"Error, can not open QA root file\"<IsOpen()) \n", "{\n", " cout <<\"Error, can not open ref QA root file\"<: Replacing existing TH1: h_QAG4SimulationDistortions_deltarphi_layer_FitResolution (Potential memory leak).\n", "Warning in : Replacing existing TH1: h_QAG4SimulationDistortions_deltarphi_layer_FitResolution (Potential memory leak).\n", "Warning in : Replacing existing TH1: h_QAG4SimulationDistortions_deltarphi_layer_FitResolution (Potential memory leak).\n" ] }, { "data": { "text/html": [ "\n", "\n", "
\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%cpp\n", " const char *hist_name_prefix = \"QAG4SimulationDistortions\";\n", " TString prefix = TString(\"h_\") + hist_name_prefix + TString(\"_\");\n", " \n", " TCanvas *cv_deltarphi_layer = new TCanvas(TString(\"QA_Draw_rphi_residuals\") + TString(\"_\") + hist_name_prefix,\n", " TString(\"QA_Draw_rphi_residuals\") + TString(\"_\") + hist_name_prefix,\n", " 1200,500);\n", " cv_deltarphi_layer->Divide(2, 1);\n", " \n", " auto h_deltarphi_layer_ref = (TH2F *)qa_file_ref->GetObjectChecked(prefix + \"deltarphi_layer\", \"TH2\");\n", " if( !h_deltarphi_layer_ref )\n", " { \n", " std::cout << \"h_deltarphi_layer_ref not found. doing nothing.\" << std::endl;\n", " return;\n", " }\n", " h_deltarphi_layer_ref->SetDirectory(nullptr);\n", "\n", " auto h_deltarphi_layer_new = (TH2F *)qa_file_new->GetObjectChecked(prefix + \"deltarphi_layer\", \"TH2\");\n", " if( !h_deltarphi_layer_new )\n", " { \n", " std::cout << \"h_deltarphi_layer_new not found. doing nothing.\" << std::endl;\n", " return;\n", " }\n", " \n", " {\n", " auto newScale = FitResolution_hist(h_deltarphi_layer_new, false, 1);\n", " newScale->GetXaxis()->SetTitle(\"layer\");\n", " newScale->GetYaxis()->SetTitle(\"#LT#Delta r#phi#GT (#mum)\");\n", " newScale->Scale(1e4);\n", " newScale->SetMinimum(-100);\n", " newScale->SetMaximum(100);\n", "\n", " auto refScale = FitResolution_hist(h_deltarphi_layer_ref, false, 1);\n", " refScale->Scale(1e4);\n", "\n", " cv_deltarphi_layer->cd(1);\n", " DrawReference(newScale, refScale);\n", " \n", " // Draw line at zero\n", " auto line = HorizontalLine( gPad, 0 );\n", " line->Draw();\n", " }\n", " \n", " {\n", " auto newRMS = FitResolution_hist(h_deltarphi_layer_new, false, 2);\n", " newRMS->GetXaxis()->SetTitle(\"layer\");\n", " newRMS->GetYaxis()->SetTitle(\"RMS(#Delta r#phi) (#mum)\");\n", " newRMS->Scale(1e4);\n", " newRMS->SetMinimum(0);\n", " newRMS->SetMaximum(1200);\n", " \n", " auto refRMS = FitResolution_hist(h_deltarphi_layer_ref, false, 2);\n", " refRMS->Scale(1e4);\n", " \n", " cv_deltarphi_layer->cd(2);\n", " DrawReference(newRMS, refRMS);\n", " }\n", " \n", " \n", " cv_deltarphi_layer->Draw();\n", " " ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "# Delta z residuals (track - cluster) vs layer number" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:53.883391Z", "iopub.status.busy": "2025-03-25T17:14:53.883162Z", "iopub.status.idle": "2025-03-25T17:14:54.129921Z", "shell.execute_reply": "2025-03-25T17:14:54.129191Z" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning in : Replacing existing TH1: h_QAG4SimulationDistortions_deltaz_layer_FitResolution (Potential memory leak).\n", "Warning in : Replacing existing TH1: h_QAG4SimulationDistortions_deltaz_layer_FitResolution (Potential memory leak).\n", "Warning in : Replacing existing TH1: h_QAG4SimulationDistortions_deltaz_layer_FitResolution (Potential memory leak).\n" ] }, { "data": { "text/html": [ "\n", "\n", "
\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%cpp\n", " const char *hist_name_prefix = \"QAG4SimulationDistortions\";\n", " TString prefix = TString(\"h_\") + hist_name_prefix + TString(\"_\");\n", " \n", " TCanvas *cv_deltaz_layer = new TCanvas(TString(\"QA_Draw_z_residuals\") + TString(\"_\") + hist_name_prefix,\n", " TString(\"QA_Draw_z_residuals\") + TString(\"_\") + hist_name_prefix,\n", " 1200,500);\n", " cv_deltaz_layer->Divide(2, 1);\n", " \n", " auto h_deltaz_layer_ref = (TH2F *)qa_file_ref->GetObjectChecked(prefix + \"deltaz_layer\", \"TH2\");\n", " if( !h_deltaz_layer_ref )\n", " { \n", " std::cout << \"h_deltaz_layer_ref not found. doing nothing.\" << std::endl;\n", " return;\n", " }\n", " h_deltaz_layer_ref->SetDirectory(nullptr);\n", "\n", " auto h_deltaz_layer_new = (TH2F *)qa_file_new->GetObjectChecked(prefix + \"deltaz_layer\", \"TH2\");\n", " if( !h_deltaz_layer_new )\n", " { \n", " std::cout << \"h_deltaz_layer_new not found. doing nothing.\" << std::endl;\n", " return;\n", " }\n", " h_deltaz_layer_new->SetDirectory(nullptr);\n", " \n", " {\n", " auto newScale = FitResolution_hist(h_deltaz_layer_new, false, 1);\n", " newScale->GetXaxis()->SetTitle(\"layer\");\n", " newScale->GetYaxis()->SetTitle(\"#LT#Delta z#GT (#mum)\");\n", " newScale->Scale(1e4);\n", " newScale->SetMinimum(-100);\n", " newScale->SetMaximum(100);\n", "\n", " auto refScale = FitResolution_hist(h_deltaz_layer_ref, false, 1);\n", " refScale->Scale(1e4);\n", "\n", " cv_deltaz_layer->cd(1);\n", " DrawReference(newScale, refScale);\n", " \n", " // Draw line at zero\n", " auto line = HorizontalLine( gPad, 0 );\n", " line->Draw();\n", " }\n", " \n", " {\n", " auto newRMS = FitResolution_hist(h_deltaz_layer_new, false, 2);\n", " newRMS->GetXaxis()->SetTitle(\"layer\");\n", " newRMS->GetYaxis()->SetTitle(\"RMS(#Delta z) (#mum)\");\n", " newRMS->Scale(1e4);\n", " newRMS->SetMinimum(0);\n", " newRMS->SetMaximum(2000);\n", " \n", " auto refRMS = FitResolution_hist(h_deltaz_layer_ref, false, 2);\n", " refRMS->Scale(1e4);\n", " \n", " cv_deltaz_layer->cd(2);\n", " DrawReference(newRMS, refRMS);\n", " }\n", " \n", " cv_deltaz_layer->Draw();\n", " " ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:54.132534Z", "iopub.status.busy": "2025-03-25T17:14:54.132295Z", "iopub.status.idle": "2025-03-25T17:14:54.290005Z", "shell.execute_reply": "2025-03-25T17:14:54.289315Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This notebook contains 4 KSTets: combined Chi2/nDoF = 32.0981 / 8, and combined __p-Value = 8.94476e-05__\n" ] } ], "source": [ "%%cpp\n", "\n", "KSTestSummary::getInstance()->make_summary_txt(\"QA-Distortions.txt\");" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2025-03-25T17:14:54.292673Z", "iopub.status.busy": "2025-03-25T17:14:54.292449Z", "iopub.status.idle": "2025-03-25T17:14:54.431510Z", "shell.execute_reply": "2025-03-25T17:14:54.430724Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "
\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%cpp\n", "\n", "KSTestSummary::getInstance()->make_summary_TCanvas() -> Draw();" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python (sPHENIX)", "language": "python", "name": "sphenix-env" }, "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.13.0" } }, "nbformat": 4, "nbformat_minor": 4 }