utils.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import io
  2. import sys
  3. import ROOT
  4. class OutputCapture:
  5. def __init__(self):
  6. self.my_stdout = io.StringIO()
  7. self.my_stderr = io.StringIO()
  8. def get_stdout(self):
  9. self.my_stdout.seek(0)
  10. return self.my_stdout.read()
  11. def get_stderr(self):
  12. self.my_stderr.seek(0)
  13. return self.my_stderr.read()
  14. def __enter__(self):
  15. self.stdout = sys.stdout
  16. self.stderr = sys.stderr
  17. sys.stdout = self.my_stdout
  18. sys.stderr = self.my_stderr
  19. def __exit__(self, *args):
  20. sys.stdout = self.stdout
  21. sys.stderr = self.stderr
  22. self.stdout = None
  23. self.stderr = None
  24. def bin_range(n, end=None):
  25. if end is None:
  26. return range(1, n+1)
  27. else:
  28. return range(n+1, end+1)
  29. def normalize_columns(hist2d):
  30. normHist = ROOT.TH2D(hist2d)
  31. cols, rows = hist2d.GetNbinsX(), hist2d.GetNbinsY()
  32. for col in bin_range(cols):
  33. sum_ = 0;
  34. for row in bin_range(rows):
  35. sum_ += hist2d.GetBinContent(col, row)
  36. if sum_ == 0:
  37. continue
  38. for row in bin_range(rows):
  39. norm = hist2d.GetBinContent(col, row) / sum_
  40. normHist.SetBinContent(col, row, norm)
  41. return normHist