12from ROOT
import Belle2, TFile
15from b2test_utils
import safe_process, clean_working_directory
20from datetime
import datetime
22b2.set_random_seed(
"something random")
24testFile =
'ntuplemetadata.root'
25inputFile1 =
'test1.root'
26inputFile2 =
'test2.root'
27dataDescription1 = {
"adding_custom_key":
"works"}
28dataDescription2 = {
"with_multiple":
"trees"}
31def get_metadata(name="output.root"):
32 """Get the metadata out of a root file"""
34 t = out.Get(
"persistent")
40 main = b2.create_path()
42 main.add_module(
"EventInfoSetter", evtNumList=evtNumList, runList=runList, expList=expList)
43 main.add_module(
"RootOutput", outputFileName=filename)
47 return os.path.abspath(filename)
50with clean_working_directory()
as tmpdir:
65 main.add_module(
'RootInput', inputFileNames=[inputFile1, inputFile2])
66 main.add_module(
'VariablesToNtuple',
68 treeName=
'ntupleTree',
69 dataDescription=dataDescription1
71 main.add_module(
'VariablesToNtuple',
73 treeName=
'anotherNtupleTree',
74 dataDescription=dataDescription2
78 metadata = get_metadata(testFile)
80 assert os.path.abspath(testFile) == tmpdir +
'/' + metadata.getLfn()
81 assert 40 == metadata.getNEvents()
82 assert 40 == metadata.getNFullEvents()
84 assert 7 == metadata.getExperimentLow()
85 assert 1 == metadata.getRunLow()
86 assert 1 == metadata.getEventLow()
87 assert 9 == metadata.getExperimentHigh()
88 assert 19 == metadata.getRunHigh()
89 assert 11 == metadata.getEventHigh()
90 assert metadata.containsEvent(7, 1, 1)
91 assert metadata.containsEvent(7, 1, 9)
92 assert metadata.containsEvent(7, 15, 1)
93 assert metadata.containsEvent(7, 16, 6)
94 assert metadata.containsEvent(9, 16, 12)
95 assert metadata.containsEvent(9, 18, 19)
96 assert metadata.containsEvent(9, 19, 11)
97 assert not metadata.containsEvent(7, 0, 10)
98 assert not metadata.containsEvent(10, 16, 6)
99 assert not metadata.containsEvent(0, 15, 6)
101 assert 2 == metadata.getNParents()
102 assert os.path.abspath(inputFile1) == metadata.getParent(0)
103 assert os.path.abspath(inputFile2) == metadata.getParent(1)
105 assert datetime.today().strftime(
'%Y-%m-%d') == metadata.getDate()[:10]
106 assert socket.gethostname() == metadata.getSite()
108 assert "something random" == metadata.getRandomSeed()
110 assert get_version() == metadata.getRelease()
111 assert metadata.getSteering().startswith(
'#!/usr/bin/env python3')
112 assert metadata.getSteering().strip().endswith(
'dummystring')
113 assert 40 == metadata.getMcEvents()
115 assert metadata.getDataDescription()[
"isNtupleMetaData"]
116 assert "works" == metadata.getDataDescription()[
"adding_custom_key"]
117 assert "trees" == metadata.getDataDescription()[
"with_multiple"]
119 os.system(
'touch Belle2FileCatalog.xml')
120 assert 0 == os.system(
'b2file-metadata-add --lfn /logical/file/name ' + testFile)
122 assert 0 == os.system(
'b2file-metadata-show ' + testFile)
125 metadata_output = subprocess.check_output([
'b2file-metadata-show',
'--json', testFile])
126 m = json.loads(metadata_output.decode(
'utf-8'))
127 assert 7 == m[
'experimentLow']
128 assert 1 == m[
'runLow']
129 assert 1 == m[
'eventLow']
130 assert 9 == m[
'experimentHigh']
131 assert 19 == m[
'runHigh']
132 assert 11 == m[
'eventHigh']
133 assert 'something random' == m[
'randomSeed']
134 assert 40 == m[
'nEvents']
135 assert isinstance(m[
'nEvents'], int)
136 assert 40 == m[
'nFullEvents']
137 assert isinstance(m[
'nFullEvents'], int)
138 assert '/logical/file/name' == m[
'LFN']