Source code for qunfold.root2numpy
import numpy as np
[docs]
def TH1_to_numpy(histo, error=False, overflow=True, dtype=np.float64):
"""
Convert a ROOT.TH1 object into a 1D numpy array.
Args:
histo (ROOT.TH1): the input TH1 histogram to convert.
error (bool): if True, it gets the bin error instead of the bin content.
overflow (bool): if True, it considers also the overflow bins.
dtype (type): the data type of the output array.
Returns:
array (numpy.ndarray): the output 1D numpy array.
"""
get_entry = histo.GetBinError if error else histo.GetBinContent
if overflow:
irange = range(0, histo.GetNbinsX() + 2)
else:
irange = range(1, histo.GetNbinsX() + 1)
array = np.array([get_entry(i) for i in irange])
return array.astype(dtype=dtype)
[docs]
def TH2_to_numpy(histo, overflow=True, dtype=np.float64):
"""
Convert a ROOT.TH2 object into a 2D numpy array.
Args:
histo (ROOT.TH2): the input TH2 histogram to convert.
overflow (bool): if True, it considers also the overflow bins.
dtype (type): the data type of the output array.
Returns:
array (numpy.ndarray): the output 2D numpy array.
"""
if overflow:
irange = range(0, histo.GetNbinsX() + 2)
jrange = range(0, histo.GetNbinsY() + 2)
else:
irange = range(1, histo.GetNbinsX() + 1)
jrange = range(1, histo.GetNbinsY() + 1)
array = np.array([[histo.GetBinContent(i, j) for j in jrange] for i in irange])
return array.astype(dtype=dtype)
[docs]
def TVector_to_numpy(vector, dtype=np.float64):
"""
Convert a ROOT.TVector object into a 1D numpy array.
Args:
vector (ROOT.TVector): the input TVector to convert.
dtype (type): the data type of the output array.
Returns:
array (numpy.ndarray): the output 1D numpy array.
"""
num_elements = vector.GetNoElements()
array = np.array([vector[i] for i in range(num_elements)])
return array.astype(dtype=dtype)
[docs]
def TMatrix_to_numpy(matrix, dtype=np.float64):
"""
Convert a ROOT.TMatrix object into a 2D numpy array.
Parameters:
matrix (ROOT.TMatrix): the input TMatrix to convert.
dtype (type): the data type of the output array.
Returns:
array (numpy.ndarray): the output 2D numpy array.
"""
num_rows = matrix.GetNrows()
num_cols = matrix.GetNcols()
array = np.array([[matrix[i][j] for j in range(num_cols)] for i in range(num_rows)])
return array.astype(dtype=dtype)