Logo ROOT  
Reference Guide
pyroot005_tfile_context_manager.py File Reference


namespace  pyroot005_tfile_context_manager

Detailed Description

View in nbviewer Open in SWAN

This tutorial demonstrates the usage of the TFile class as a Python context manager.

import os
import ROOT
from ROOT import TFile
# By default, objects of some ROOT types such as `TH1` and its derived types
# are automatically attached to a ROOT.TDirectory when they are created.
# Specifically, at any given point of a ROOT application, the ROOT.gDirectory
# object tells which is the current directory where objects will be attached to.
# The next line will print 'PyROOT' as the name of the current directory.
# That is the global directory created when using ROOT from Python, which is
# the ROOT.gROOT object.
print("Current directory: '{}'.\n".format(ROOT.gDirectory.GetName()))
# We can check to which directory a newly created histogram is attached.
histo_1 = ROOT.TH1F("histo_1", "histo_1", 10, 0, 10)
print("Histogram '{}' is attached to: '{}'.\n".format(histo_1.GetName(), histo_1.GetDirectory().GetName()))
# For quick saving and forgetting of objects into ROOT files, it is possible to
# open a TFile as a Python context manager. In the context, objects can be
# created, modified and finally written to the file. At the end of the context,
# the file will be automatically closed.
with TFile.Open("pyroot005_file_1.root", "recreate") as f:
histo_2 = ROOT.TH1F("histo_2", "histo_2", 10, 0, 10)
# Inside the context, the current directory is the open file
print("Current directory: '{}'.\n".format(ROOT.gDirectory.GetName()))
# And the created histogram is automatically attached to the file
print("Histogram '{}' is attached to: '{}'.\n".format(histo_2.GetName(), histo_2.GetDirectory().GetName()))
# Before exiting the context, objects can be written to the file
f.WriteObject(histo_2, "my_histogram")
# When the TFile.Close method is called, the current directory is automatically
# set again to ROOT.gROOT. Objects that were attached to the file inside the
# context are automatically deleted and made 'None' when the file is closed.
print("Status after the first TFile context manager:")
print(" Current directory: '{}'.".format(ROOT.gDirectory.GetName()))
print(" Accessing 'histo_2' gives: '{}'.\n".format(histo_2))
# Also reading data from a TFile can be done in a context manager. Information
# stored in the objects of the file can be queried and used inside the context.
# After the context, the objects are not usable anymore because the file is
# automatically closed. This means you should use this pattern as a quick way
# to get information or modify objects from a certain file, without needing to
# keep the histograms alive afterwards.
with TFile.Open("pyroot005_file_1.root", "read") as f:
# Retrieve histogram using the name given to f.WriteObject in the previous
# with statement
histo_2_fromfile = f.my_histogram
print("Retrieved '{}' histogram from file '{}'.\n".format(histo_2_fromfile.GetName(), f.GetName()))
# Cleanup the file created for this tutorial
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t format
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
Definition: TFile.cxx:4053
Current directory: 'PyROOT'.
Histogram 'histo_1' is attached to: 'PyROOT'.
Current directory: 'pyroot005_file_1.root'.
Histogram 'histo_2' is attached to: 'pyroot005_file_1.root'.
Status after the first TFile context manager:
Current directory: 'PyROOT'.
Accessing 'histo_2' gives: 'None'.
Retrieved 'histo_2' histogram from file 'pyroot005_file_1.root'.
March 2022
Vincenzo Eduardo Padulano CERN/UPV

Definition in file pyroot005_tfile_context_manager.py.