ROOT
git-r3/HEAD
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
13
import
os
14
import
sys
15
16
import
ROOT
17
from
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.
21
path = str(gROOT.GetTutorialDir()) +
'/io/'
22
file_1 =
TFile
(path+
"tcontext_1.root"
,
"recreate"
)
23
file_2 =
TFile
(path+
"tcontext_2.root"
,
"recreate"
)
24
print(
"Current directory: '{}'.\n"
.format(ROOT.gDirectory.GetName()))
25
# Changing directory into another file can be safely done through a TContext
26
# context manager.
27
with
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.
36
print(
"Current directory: '{}'.\n"
.format(ROOT.gDirectory.GetName()))
37
if
file_1.IsOpen()
and
file_2.IsOpen():
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.
48
with
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
53
print(
"Current directory: '{}'.\n"
.format(ROOT.gDirectory.GetName()))
54
55
56
# Cleanup the files created for this tutorial
57
file_1.Close();
58
file_2.Close();
59
60
for
i
in
range(1, 4):
61
os.remove(path+
"tcontext_{}.root"
.format(i))
TDirectory::TContext
TDirectory::TContext keeps track and restore the current directory.
Definition
TDirectory.h:89
TFile
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
Definition
TFile.h:130
tutorials
io
tcontext_context_manager.py
ROOTgit-r3/HEAD - Reference Guide Generated on
(GVA Time) using Doxygen 1.16.1