#!/usr/bin/env python
# coding: utf-8
# # Introduction
#
# QA plots for the calorimeter response to single particle inputs
# In[1]:
# imports to write dynamic markdown contents
import os
from IPython.display import display, Markdown, Latex
from IPython.display import HTML
# In[2]:
# turn off/on code for the result HTML page
display(Markdown('*For the result HTML page:* '))
HTML('''
''')
# In[3]:
# initialization
display(Markdown('pyROOT env check:'))
import ROOT
OFFLINE_MAIN = os.getenv("OFFLINE_MAIN")
if OFFLINE_MAIN is not None:
display(Markdown(f"via sPHENIX software distribution at `{OFFLINE_MAIN}`"))
# In[4]:
import subprocess
try:
git_url = \
subprocess.run(['git','remote','get-url','origin'], stdout=subprocess.PIPE)\
.stdout.decode('utf-8').strip()\
.replace('git@github.com:','https://github.com/')
display(Markdown(f"View the source code repository at {git_url}"))
except: # catch *all* exceptions
# well do nothing
pass
# In[5]:
display(Markdown('Some further details about the QA run, if executed under the Jenkins CI:'))
checkrun_repo_commit = os.getenv("checkrun_repo_commit")
if checkrun_repo_commit is not None:
display(Markdown(f"* The commit being checked is {checkrun_repo_commit}"))
ghprbPullLink = os.getenv("ghprbPullLink")
if ghprbPullLink is not None:
display(Markdown(f"* Link to the pull request: {ghprbPullLink}"))
BUILD_URL = os.getenv("BUILD_URL")
if BUILD_URL is not None:
display(Markdown(f"* Link to the build: {BUILD_URL}"))
RUN_ARTIFACTS_DISPLAY_URL = os.getenv("RUN_ARTIFACTS_DISPLAY_URL")
if RUN_ARTIFACTS_DISPLAY_URL is not None:
display(Markdown(f"* Download the QA ROOT files: {RUN_ARTIFACTS_DISPLAY_URL}"))
JENKINS_URL = os.getenv("JENKINS_URL")
if JENKINS_URL is not None:
display(Markdown(f"Automatically generated by [sPHENIX Jenkins continuous integration]({JENKINS_URL}) [](https://www.sphenix.bnl.gov/web/) [](https://jenkins.io/)"))
#
# # Initialization
# In[6]:
get_ipython().run_cell_magic('cpp', '-d', '\n#include "QA_Draw_Utility.C"\n\n#include \n\n#include \n#include \n#include \n#include \n#include \n#include \n')
# In[7]:
get_ipython().run_cell_magic('cpp', '', '\nSetsPhenixStyle();\nTVirtualFitter::SetDefaultFitter("Minuit2");\n\n// test sPHENIX lib load\n// gSystem->Load("libg4eval.so");\n\n// test libs\n// gSystem->ListLibraries();\n')
# In[ ]:
# ## Inputs and file checks
# In[8]:
qa_file_name_new = os.getenv("qa_file_name_new")
if qa_file_name_new is None:
qa_file_name_new = "G4sPHENIX_pi+_pT30_Sum15_qa.root"
display(Markdown(f"`qa_file_name_new` env not set. use the default `qa_file_name_new={qa_file_name_new}`"))
qa_file_name_ref = os.getenv("qa_file_name_ref")
if qa_file_name_ref is None:
qa_file_name_ref = "reference/G4sPHENIX_pi+_pT30_Sum15_qa.root"
display(Markdown(f"`qa_file_name_ref` env not set. use the default `qa_file_name_ref={qa_file_name_ref}`"))
elif qa_file_name_ref == 'None':
qa_file_name_ref = None
display(Markdown(f"`qa_file_name_ref` = None and we are set to not to use the reference histograms"))
# In[9]:
# qa_file_new = ROOT.TFile.Open(qa_file_name_new);
# assert qa_file_new.IsOpen()
# qa_file_new.ls()
display(Markdown(f"Openning QA file at `{qa_file_name_new}`"))
ROOT.gInterpreter.ProcessLine(f"TFile *qa_file_new = new TFile(\"{qa_file_name_new}\");")
if qa_file_name_ref is not None:
# qa_file_ref = ROOT.TFile.Open(qa_file_name_ref);
# assert qa_file_ref.IsOpen()
display(Markdown(f"Openning QA reference file at `{qa_file_name_ref}`"))
ROOT.gInterpreter.ProcessLine(f"TFile *qa_file_ref = new TFile(\"{qa_file_name_ref}\");")
else:
ROOT.gInterpreter.ProcessLine(f"TFile *qa_file_ref = nullptr;")
# In[10]:
get_ipython().run_cell_magic('cpp', '', '\nif (qa_file_new == nullptr) \n{\n cout <<"Error, can not open QA root file"<ls();\n\n//TFile *qa_file_ref = NULL;\n//if (qa_file_name_ref)\n//{\n// qa_file_ref = new TFile(qa_file_name_ref);\n// \n// if (qa_file_ref == nullptr) \n// {\n// cout <<"Error, can not open QA root file"<Divide(4, 2);\n int idx = 1;\n TPad *p;\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_CEMC_G4Hit_XY = (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_XY", "TH2F");\n assert(h_QAG4Sim_CEMC_G4Hit_XY);\n h_QAG4Sim_CEMC_G4Hit_XY->GetYaxis()->SetTitleOffset(1.5);\n h_QAG4Sim_CEMC_G4Hit_XY->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_CEMC_G4Hit_RZ = (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_RZ", "TH2F");\n assert(h_QAG4Sim_CEMC_G4Hit_RZ);\n h_QAG4Sim_CEMC_G4Hit_RZ->GetYaxis()->SetTitleOffset(1.5);\n h_QAG4Sim_CEMC_G4Hit_RZ->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection->ProjectionX(\n "qa_file_new_h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection_px");\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection);\n\n proj_ref = h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection->ProjectionX(\n "qa_file_ref_h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection_px");\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection->ProjectionY(\n "qa_file_new_h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection_py");\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection);\n\n proj_ref = h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection->ProjectionY(\n "qa_file_ref_h_QAG4Sim_CEMC_G4Hit_LateralTruthProjection_py");\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_HitTime", "TH1F");\n assert(h_new);\n\n h_new->Rebin(5);\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_HitTime", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(5);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized energy per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_FractionTruthEnergy", "TH1F");\n assert(h_new);\n\n h_new->Rebin(20);\n //h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_FractionTruthEnergy", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(20);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_VSF", "TH1F");\n assert(h_new);\n\n h_new->Rebin(2);\n //h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_VSF", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(2);\n //h_ref->Sumw2();\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_FractionEMVisibleEnergy", "TH1F");\n assert(h_new);\n\n h_new->Rebin(4);\n //h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_G4Hit_FractionEMVisibleEnergy", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(4);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n c1->Draw();\n// PutInputFileName(c1, .04, qa_file_name_new, qa_file_name_ref);\n // SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n \n}\n')
# ## CEMC tower and clusters
#
# Check on towers and clusters
# In[13]:
get_ipython().run_line_magic('jsroot', 'on')
# In[14]:
get_ipython().run_cell_magic('cpp', '', '\n\n{\n \n TCanvas *c1 = new TCanvas("QA_Draw_CEMC_TowerCluster", "QA_Draw_CEMC_TowerCluster", 950, 600);\n c1->Divide(4, 2);\n int idx = 1;\n TPad *p;\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_Tower_1x1", "TH1F");\n assert(h_new);\n\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_Tower_1x1", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized tower count per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_Tower_3x3", "TH1F");\n assert(h_new);\n\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_Tower_3x3", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized tower count per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_Tower_1x1_max", "TH1F");\n assert(h_new);\n\n h_new->Rebin(40);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_Tower_1x1_max", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(40);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_Tower_4x4_max", "TH1F");\n assert(h_new);\n\n h_new->Rebin(40);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_Tower_4x4_max", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(40);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_CEMC_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_Cluster_LateralTruthProjection);\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection -> SetDirectory(nullptr);\n \n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection->GetYaxis()->SetTitleOffset(\n 1.5);\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection->GetXaxis()->SetRangeUser(-8,\n 8);\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection->GetYaxis()->SetRangeUser(-8,\n 8);\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_CEMC_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_Cluster_LateralTruthProjection);\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection -> SetDirectory(nullptr);\n\n TH1D *proj_new =\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection->ProjectionX(\n "qa_file_new_h_QAG4Sim_CEMC_Cluster_LateralTruthProjection_px");\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_CEMC_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_Cluster_LateralTruthProjection);\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection -> SetDirectory(nullptr);\n\n proj_ref = h_QAG4Sim_CEMC_Cluster_LateralTruthProjection->ProjectionX(\n "qa_file_ref_h_QAG4Sim_CEMC_Cluster_LateralTruthProjection_px");\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitleOffset(1.);\n proj_new->GetXaxis()->SetTitleOffset(1.);\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_CEMC_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_Cluster_LateralTruthProjection);\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection -> SetDirectory(nullptr);\n\n TH1D *proj_new =\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection->ProjectionY(\n "qa_file_new_h_QAG4Sim_CEMC_Cluster_LateralTruthProjection_py");\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_CEMC_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_CEMC_Cluster_LateralTruthProjection);\n h_QAG4Sim_CEMC_Cluster_LateralTruthProjection -> SetDirectory(nullptr);\n\n proj_ref = h_QAG4Sim_CEMC_Cluster_LateralTruthProjection->ProjectionY(\n "qa_file_ref_h_QAG4Sim_CEMC_Cluster_LateralTruthProjection_py");\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitleOffset(1.);\n proj_new->GetXaxis()->SetTitleOffset(1.);\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CEMC_Cluster_BestMatchERatio", "TH1F");\n assert(h_new);\n\n h_new->Rebin(2);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CEMC_Cluster_BestMatchERatio", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(2);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n c1->Draw();\n// PutInputFileName(c1, .04, qa_file_name_new, qa_file_name_ref);\n // SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n}\n')
# # Inner HCal
#
# Inner HCal checks
# ## HCalIn G4 hits
#
# Low level Geant4 simulation check for the Inner HCal
# In[15]:
get_ipython().run_line_magic('jsroot', 'off')
# In[16]:
get_ipython().run_cell_magic('cpp', '', '\n{\n \n TCanvas *c1 = new TCanvas("QA_Draw_HCALIN_G4Hit", "QA_Draw_HCALIN_G4Hit",\n 1800, 900);\n c1->Divide(4, 2);\n int idx = 1;\n TPad *p;\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_HCALIN_G4Hit_XY = (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_XY", "TH2F");\n assert(h_QAG4Sim_HCALIN_G4Hit_XY);\n h_QAG4Sim_HCALIN_G4Hit_XY->GetYaxis()->SetTitleOffset(1.5);\n h_QAG4Sim_HCALIN_G4Hit_XY->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_HCALIN_G4Hit_RZ = (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_RZ", "TH2F");\n assert(h_QAG4Sim_HCALIN_G4Hit_RZ);\n h_QAG4Sim_HCALIN_G4Hit_RZ->GetYaxis()->SetTitleOffset(1.5);\n h_QAG4Sim_HCALIN_G4Hit_RZ->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection->ProjectionX(\n "qa_file_new_h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection_px");\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection);\n\n proj_ref = h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection->ProjectionX(\n "qa_file_ref_h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection_px");\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n // proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection->ProjectionY(\n "qa_file_new_h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection_py");\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection);\n\n proj_ref = h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection->ProjectionY(\n "qa_file_ref_h_QAG4Sim_HCALIN_G4Hit_LateralTruthProjection_py");\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n // proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_HitTime", "TH1F");\n assert(h_new);\n\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_HitTime", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized energy per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_FractionTruthEnergy", "TH1F");\n assert(h_new);\n\n h_new->Rebin(20);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_FractionTruthEnergy", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(20);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_VSF", "TH1F");\n assert(h_new);\n\n h_new->Rebin(6);\n // h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_VSF", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(6);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n h_new->GetXaxis()->SetRangeUser(-0, .2);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_FractionEMVisibleEnergy", "TH1F");\n assert(h_new);\n\n h_new->Rebin(4);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_G4Hit_FractionEMVisibleEnergy", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(4);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n// PutInputFileName(c1, .04, qa_file_name_new, qa_file_name_ref);\n// SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n \n c1->Draw();\n}\n')
# ## HCal In tower and clusters
#
# Check on towers and clusters
# In[17]:
get_ipython().run_line_magic('jsroot', 'on')
# In[18]:
get_ipython().run_cell_magic('cpp', '', '{\n \n \n TCanvas *c1 = new TCanvas("QA_Draw_HCALIN_TowerCluster",\n "QA_Draw_HCALIN_TowerCluster", 950, 600);\n c1->Divide(4, 2);\n int idx = 1;\n TPad *p;\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Tower_1x1", "TH1F");\n assert(h_new);\n\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Tower_1x1", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized tower count per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Tower_3x3", "TH1F");\n assert(h_new);\n\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Tower_3x3", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / h_ref->GetSum());\n }\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized tower count per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Tower_1x1_max", "TH1F");\n assert(h_new);\n\n h_new->Rebin(40);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Tower_1x1_max", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(40);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Tower_4x4_max", "TH1F");\n assert(h_new);\n\n h_new->Rebin(40);\n //h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Tower_4x4_max", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(40);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection);\n h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection->GetYaxis()->SetTitleOffset(\n 1.5);\n // h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection->GetXaxis()->SetRangeUser(-5,\n // 5);\n // h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection->GetYaxis()->SetRangeUser(-5,\n // 5);\n h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection->ProjectionX(\n "qa_file_new_h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection_px");\n proj_new->Rebin(4);\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection);\n\n proj_ref =\n h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection->ProjectionX(\n "qa_file_ref_h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection_px");\n proj_ref->Rebin(4);\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitleOffset(1.);\n proj_new->GetXaxis()->SetTitleOffset(1.);\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n // proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection->ProjectionY(\n "qa_file_new_h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection_py");\n\n proj_new->Rebin(4);\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection);\n\n proj_ref =\n h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection->ProjectionY(\n "qa_file_ref_h_QAG4Sim_HCALIN_Cluster_LateralTruthProjection_py");\n proj_ref->Rebin(4);\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitleOffset(1.);\n proj_new->GetXaxis()->SetTitleOffset(1.);\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n // proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Cluster_BestMatchERatio", "TH1F");\n assert(h_new);\n\n h_new->Rebin(2);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALIN_Cluster_BestMatchERatio", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(2);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n// PutInputFileName(c1, .04, qa_file_name_new, qa_file_name_ref);\n// SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n \n c1->Draw();\n \n}\n')
# # Outer HCal
#
# Outer HCal checks
# ## HCalOut G4 hits
#
# Low level Geant4 simulation check for the Outer HCal
# In[19]:
get_ipython().run_line_magic('jsroot', 'off')
# In[20]:
get_ipython().run_cell_magic('cpp', '', '{\n \n TCanvas *c1 = new TCanvas("QA_Draw_HCALOUT_G4Hit", "QA_Draw_HCALOUT_G4Hit",\n 1800, 900);\n c1->Divide(4, 2);\n int idx = 1;\n TPad *p;\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_HCALOUT_G4Hit_XY = (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_XY", "TH2F");\n assert(h_QAG4Sim_HCALOUT_G4Hit_XY);\n h_QAG4Sim_HCALOUT_G4Hit_XY->GetYaxis()->SetTitleOffset(1.5);\n h_QAG4Sim_HCALOUT_G4Hit_XY->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_HCALOUT_G4Hit_RZ = (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_RZ", "TH2F");\n assert(h_QAG4Sim_HCALOUT_G4Hit_RZ);\n h_QAG4Sim_HCALOUT_G4Hit_RZ->GetYaxis()->SetTitleOffset(1.5);\n h_QAG4Sim_HCALOUT_G4Hit_RZ->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection->ProjectionX(\n "qa_file_new_h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection_px");\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection);\n\n proj_ref =\n h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection->ProjectionX(\n "qa_file_ref_h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection_px");\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n // proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection->ProjectionY(\n "qa_file_new_h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection_py");\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection);\n\n proj_ref =\n h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection->ProjectionY(\n "qa_file_ref_h_QAG4Sim_HCALOUT_G4Hit_LateralTruthProjection_py");\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n // proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_HitTime", "TH1F");\n assert(h_new);\n\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_HitTime", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized energy per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref, false, false); // not to use this histogram in KSTests\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_FractionTruthEnergy", "TH1F");\n assert(h_new);\n\n h_new->Rebin(20);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_FractionTruthEnergy", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(20);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_VSF", "TH1F");\n assert(h_new);\n\n h_new->Rebin(4);\n // h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_VSF", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(4);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_FractionEMVisibleEnergy", "TH1F");\n assert(h_new);\n\n h_new->Rebin(4);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_G4Hit_FractionEMVisibleEnergy", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(4);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n// PutInputFileName(c1, .04, qa_file_name_new, qa_file_name_ref);\n// SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n c1->Draw();\n}\n')
# ## HCal Out tower and clusters
#
# Check on towers and clusters
# In[21]:
get_ipython().run_line_magic('jsroot', 'on')
# In[22]:
get_ipython().run_cell_magic('cpp', '', '{\n \n\n TCanvas *c1 = new TCanvas("QA_Draw_HCALOUT_TowerCluster",\n "QA_Draw_HCALOUT_TowerCluster", 950, 600);\n c1->Divide(4, 2);\n int idx = 1;\n TPad *p;\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Tower_1x1", "TH1F");\n assert(h_new);\n\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Tower_1x1", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized tower count per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Tower_3x3", "TH1F");\n assert(h_new);\n\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Tower_3x3", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Normalized tower count per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Tower_1x1_max", "TH1F");\n assert(h_new);\n\n h_new->Rebin(40);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Tower_1x1_max", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(40);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogx();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Tower_4x4_max", "TH1F");\n assert(h_new);\n\n h_new->Rebin(40);\n// h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Tower_4x4_max", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(40);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection);\n h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection->GetYaxis()->SetTitleOffset(\n 1.5);\n // h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection->GetXaxis()->SetRangeUser(-5,\n // 5);\n // h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection->GetYaxis()->SetRangeUser(-5,\n // 5);\n h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection->Draw("COLZ");\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection->ProjectionX(\n "qa_file_new_h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection_px");\n proj_new->Rebin(4);\n\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection);\n\n proj_ref =\n h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection->ProjectionX(\n "qa_file_ref_h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection_px");\n proj_ref->Rebin(4);\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitleOffset(1.);\n proj_new->GetXaxis()->SetTitleOffset(1.);\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n // proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection);\n\n TH1D *proj_new =\n h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection->ProjectionY(\n "qa_file_new_h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection_py");\n\n proj_new->Rebin(4);\n proj_new->Scale(1. / proj_new->GetSum());\n\n TH1D *proj_ref = NULL;\n if (qa_file_ref)\n {\n TH2F *h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection", "TH2F");\n assert(h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection);\n\n proj_ref =\n h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection->ProjectionY(\n "qa_file_ref_h_QAG4Sim_HCALOUT_Cluster_LateralTruthProjection_py");\n proj_ref->Rebin(4);\n proj_ref->Scale(1. / proj_ref->GetSum());\n }\n\n proj_new->GetYaxis()->SetTitleOffset(1.);\n proj_new->GetXaxis()->SetTitleOffset(1.);\n proj_new->GetYaxis()->SetTitle("Normalized energy distribution");\n // proj_new->GetXaxis()->SetRangeUser(-10, 10);\n\n DrawReference(proj_new, proj_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Cluster_BestMatchERatio", "TH1F");\n assert(h_new);\n\n h_new->Rebin(2);\n //h_new->Sumw2();\n h_new->Scale(1. / h_new->GetSum());\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_HCALOUT_Cluster_BestMatchERatio", "TH1F");\n assert(h_ref);\n\n h_ref->Rebin(2);\n h_ref->Scale(1. / h_ref->GetSum());\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Probability per bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n// PutInputFileName(c1, .04, qa_file_name_new, qa_file_name_ref);\n// SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n c1->Draw();\n \n}\n')
# # Calorimeter Stack
# ## Cluster checks
#
# property for the sum of three clusters one in each layer of the calorimeter
# In[23]:
get_ipython().run_line_magic('jsroot', 'on')
# In[24]:
get_ipython().run_cell_magic('cpp', '', '{\n \n // obtain normalization\n double Nevent_new = 1;\n double Nevent_ref = 1;\n\n if (qa_file_new)\n {\n TH1D *h_norm = (TH1D *) qa_file_new->GetObjectChecked(\n TString("h_QAG4Sim_CalorimeterSum_Normalization"), "TH1D");\n assert(h_norm);\n\n Nevent_new = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Event"));\n }\n if (qa_file_ref)\n {\n TH1D *h_norm = (TH1D *) qa_file_ref->GetObjectChecked(\n TString("h_QAG4Sim_CalorimeterSum_Normalization"), "TH1D");\n assert(h_norm);\n\n Nevent_ref = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Event"));\n }\n\n TCanvas *c1 = new TCanvas("QA_Draw_Calorimeter_Sum_Cluster",\n "QA_Draw_Calorimeter_Sum_Cluster", 950, 600);\n c1->Divide(3, 2);\n int idx = 1;\n TPad *p;\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN", "TH2F");\n assert(h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN);\n h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN->GetYaxis()->SetTitleOffset(\n 1.5);\n h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN->Draw("COLZ");\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n {\n TH2F *h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN_HCALOUT =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN_HCALOUT", "TH2F");\n assert(h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN_HCALOUT);\n h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN_HCALOUT->GetYaxis()->SetTitleOffset(\n 1.5);\n h_QAG4Sim_CalorimeterSum_Cluster_CEMC_HCALIN_HCALOUT->Draw("COLZ");\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n // empty pannel\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_Ratio_CEMC_HCALIN", "TH1F");\n assert(h_new);\n\n// h_new->Sumw2();\n h_new->Scale(1. / Nevent_new);\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_Ratio_CEMC_HCALIN", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / Nevent_ref);\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Count / event / bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_Ratio_CEMC_HCALIN_HCALOUT", "TH1F");\n assert(h_new);\n\n// h_new->Sumw2();\n h_new->Scale(1. / Nevent_new);\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_Ratio_CEMC_HCALIN_HCALOUT",\n "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / Nevent_ref);\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Count / event / bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_EP", "TH1F");\n assert(h_new);\n\n// h_new->Sumw2();\n h_new->Scale(1. / Nevent_new);\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_EP", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / Nevent_ref);\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Count / event / bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n// PutInputFileName(c1, .04, qa_file_name_new, qa_file_name_ref);\n// SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n c1->Draw();\n}\n')
# ## Track projection matching
#
# *TODO: This QA module was broken since the change of the track projection module. Need to be Fixed*
# In[25]:
get_ipython().run_cell_magic('cpp', '', '\nif (false)\n{\n \n // obtain normalization\n double Nevent_new = 1;\n double Nevent_ref = 1;\n\n // obtain normalization\n double Ntrack_new = 0;\n double Ntrack_ref = 0;\n\n if (qa_file_new)\n {\n TH1D *h_norm = (TH1D *) qa_file_new->GetObjectChecked(\n TString("h_QAG4Sim_CalorimeterSum_Normalization"), "TH1D");\n assert(h_norm);\n\n Nevent_new = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Event"));\n Ntrack_new = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Track"));\n }\n if (qa_file_ref)\n {\n TH1D *h_norm = (TH1D *) qa_file_ref->GetObjectChecked(\n TString("h_QAG4Sim_CalorimeterSum_Normalization"), "TH1D");\n assert(h_norm);\n\n Nevent_ref = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Event"));\n Ntrack_ref = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Track"));\n }\n\n vector subsystems;\n subsystems.push_back("CEMC");\n subsystems.push_back("HCALIN");\n subsystems.push_back("HCALOUT");\n\n TCanvas *c1 = new TCanvas("QA_Draw_Calorimeter_Sum_TrackProj",\n "QA_Draw_Calorimeter_Sum_TrackProj", 1100, 1100);\n c1->Divide(3, 3);\n int idx = 1;\n TPad *p;\n\n for (int i = 0; i < subsystems.size(); ++i)\n {\n const TString subsystem(subsystems[i].c_str());\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n TH2F *h_QAG4Sim_CalorimeterSum_TrackProj =\n (TH2F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_" + subsystem + "_TrackProj", "TH2F");\n assert(h_QAG4Sim_CalorimeterSum_TrackProj);\n h_QAG4Sim_CalorimeterSum_TrackProj->GetYaxis()->SetTitleOffset(1.5);\n h_QAG4Sim_CalorimeterSum_TrackProj->Draw("COLZ");\n\n TH2F *h_QAG4Sim_CalorimeterSum_TrackProj_Ref = NULL;\n if (qa_file_ref)\n {\n h_QAG4Sim_CalorimeterSum_TrackProj_Ref =\n (TH2F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_" + subsystem + "_TrackProj",\n "TH2F");\n assert(h_QAG4Sim_CalorimeterSum_TrackProj);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n // x projections\n {\n TH1 *h_new = h_QAG4Sim_CalorimeterSum_TrackProj->ProjectionX(h_QAG4Sim_CalorimeterSum_TrackProj->GetName() + TString("_px"));\n\n h_new->Scale(1. / Ntrack_new);\n\n TH1 *h_ref = NULL;\n if (h_QAG4Sim_CalorimeterSum_TrackProj_Ref)\n {\n h_ref = h_QAG4Sim_CalorimeterSum_TrackProj_Ref->ProjectionX(h_QAG4Sim_CalorimeterSum_TrackProj->GetName() + TString("_px_ref"));\n\n h_ref->Scale(1. / Ntrack_ref);\n }\n\n h_new->GetXaxis()->SetTitleOffset(1.05);\n h_new->GetYaxis()->SetTitle("Energy / track / bin");\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogz();\n\n // y projections\n {\n TH1 *h_new = h_QAG4Sim_CalorimeterSum_TrackProj->ProjectionY(h_QAG4Sim_CalorimeterSum_TrackProj->GetName() + TString("_py"));\n\n h_new->Scale(1. / Ntrack_new);\n\n TH1 *h_ref = NULL;\n if (h_QAG4Sim_CalorimeterSum_TrackProj_Ref)\n {\n h_ref = h_QAG4Sim_CalorimeterSum_TrackProj_Ref->ProjectionY(h_QAG4Sim_CalorimeterSum_TrackProj->GetName() + TString("_py_ref"));\n\n h_ref->Scale(1. / Ntrack_ref);\n }\n\n h_new->GetXaxis()->SetTitleOffset(1.05);\n h_new->GetYaxis()->SetTitle("Energy / track / bin");\n\n DrawReference(h_new, h_ref);\n }\n }\n\n// PutInputFileName(c1, .03, qa_file_name_new, qa_file_name_ref);\n\n// SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n c1->Draw();\n}\n')
# ## Track projection $E/p$
#
# $E/p$ matching
#
# In[26]:
get_ipython().run_cell_magic('cpp', '', '{\n // obtain normalization\n double Nevent_new = 1;\n double Nevent_ref = 1;\n\n // obtain normalization\n double Ntrack_new = 0;\n double Ntrack_ref = 0;\n\n if (qa_file_new)\n {\n TH1D *h_norm = (TH1D *) qa_file_new->GetObjectChecked(\n TString("h_QAG4Sim_CalorimeterSum_Normalization"), "TH1D");\n assert(h_norm);\n\n Nevent_new = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Event"));\n Ntrack_new = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Track"));\n }\n if (qa_file_ref)\n {\n TH1D *h_norm = (TH1D *) qa_file_ref->GetObjectChecked(\n TString("h_QAG4Sim_CalorimeterSum_Normalization"), "TH1D");\n assert(h_norm);\n\n Nevent_ref = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Event"));\n Ntrack_ref = h_norm->GetBinContent(h_norm->GetXaxis()->FindBin("Track"));\n }\n\n TCanvas *c1 = new TCanvas("QA_Draw_Calorimeter_Sum_TrackProjEP",\n "QA_Draw_Calorimeter_Sum_TrackProjEP", 900, 300);\n c1->Divide(3, 1);\n int idx = 1;\n TPad *p;\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n\n if (Ntrack_new > 0)\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_TrackProj_3x3Tower_EP", "TH1F");\n assert(h_new);\n\n// h_new->Sumw2();\n h_new->Scale(1. / Ntrack_new);\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_TrackProj_3x3Tower_EP", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / Ntrack_ref);\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Count / track / bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n\n if (Ntrack_new > 0)\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_TrackProj_5x5Tower_EP", "TH1F");\n assert(h_new);\n\n// h_new->Sumw2();\n h_new->Scale(1. / Ntrack_new);\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_TrackProj_5x5Tower_EP", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / Ntrack_ref);\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Count / track / bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n\n p = (TPad *) c1->cd(idx++);\n c1->Update();\n p->SetLogy();\n\n if (Nevent_new > 0)\n {\n TH1F *h_new = (TH1F *) qa_file_new->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_EP", "TH1F");\n if (h_new)\n {\n// h_new->Sumw2();\n h_new->Scale(1. / Nevent_new);\n\n TH1F *h_ref = NULL;\n if (qa_file_ref)\n {\n h_ref = (TH1F *) qa_file_ref->GetObjectChecked(\n "h_QAG4Sim_CalorimeterSum_Cluster_EP", "TH1F");\n assert(h_ref);\n\n h_ref->Scale(1. / Nevent_ref);\n }\n\n h_new->GetYaxis()->SetTitleOffset(1.5);\n h_new->GetYaxis()->SetTitle("Count / event / bin");\n // h_new->GetXaxis()->SetRangeUser(-0, .1);\n\n DrawReference(h_new, h_ref);\n }\n }\n\n// PutInputFileName(c1, 0.07, qa_file_name_new, qa_file_name_ref);\n// SaveCanvas(c1, TString(qa_file_name_new) + TString(c1->GetName()), true);\n c1->Draw();\n}\n')
# # Summary statistics
# In[27]:
get_ipython().run_cell_magic('cpp', '', '\nKSTestSummary::getInstance()->make_summary_txt("QA-calorimeter.txt");\n')
# In[28]:
get_ipython().run_cell_magic('cpp', '', '\nKSTestSummary::getInstance()->make_summary_TCanvas() -> Draw();\n')