Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
tcontext_context_manager.py
Go to the documentation of this file.
1## \file
2## \ingroup tutorial_io
3## \notebook -nodraw
4## This tutorial demonstrates the usage of the TContext class as a Python context
5## manager. This functionality is related with how TFile works, so it is
6## suggested to also take a look at the tfile_context_manager.py tutorial.
7##
8## \macro_code
9## \macro_output
10##
11## \date March 2022
12## \author Vincenzo Eduardo Padulano CERN/UPV
13import os
14import sys
15
16import ROOT
17from ROOT import TDirectory, TFile, gROOT
18
19# Sometimes it is useful to have multiple open files at once. In such cases,
20# the current directory will always be the file that was open last.
21path = str(gROOT.GetTutorialDir()) + '/io/'
22file_1 = TFile(path+"tcontext_1.root", "recreate")
23file_2 = TFile(path+"tcontext_2.root", "recreate")
24print("Current directory: '{}'.\n".format(ROOT.gDirectory.GetName()))
25# Changing directory into another file can be safely done through a TContext
26# context manager.
27with TDirectory.TContext(file_1):
28 # Inside the statement, the current directory is file_1
29 print("Current directory: '{}'.\n".format(ROOT.gDirectory.GetName()))
30 histo_1 = ROOT.TH1F("histo_1", "histo_1", 10, 0, 10)
31 file_1.WriteObject(histo_1, "my_histogram")
32
33# After the context, the current directory is restored back to file_2. Also, the
34# two files are kept open. This means that objects read, written or modified
35# inside the context are still available afterwards.
36print("Current directory: '{}'.\n".format(ROOT.gDirectory.GetName()))
38 print("'{}' and '{}' are open.\n".format(file_1.GetName(), file_2.GetName()))
39
40# TContext and TFile context managers can also be used in conjunction, allowing
41# for safely:
42# - Opening a file, creating, modifying, writing and reading objects in it.
43# - Closing the file, storing it on disk.
44# - Restoring the previous value of gDirectory to the latest file opened before
45# this context, rather than to the global ROOT.gROOT
46# Remember that the TContext must be initialized before the TFile, otherwise the
47# current directory would already be set to the file opened for this context.
48with TDirectory.TContext(), TFile(path+"tcontext_3.root", "recreate") as f:
49 print("Current directory: '{}'.\n".format(ROOT.gDirectory.GetName()))
50 histo_2 = ROOT.TH1F("histo_2", "histo_2", 10, 0, 10)
51 f.WriteObject(histo_2, "another_histogram")
52
53print("Current directory: '{}'.\n".format(ROOT.gDirectory.GetName()))
54
55
56# Cleanup the files created for this tutorial
59
60for i in range(1, 4):
61 os.remove(path+"tcontext_{}.root".format(i))
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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
TDirectory::TContext keeps track and restore the current directory.
Definition TDirectory.h:89
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
Definition TFile.h:131