Belle II Software  release-05-01-25
filemetadata.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 import os
5 import tempfile
6 import subprocess
7 import json
8 import basf2
9 from basf2.version import version
10 
11 basf2.set_random_seed("something important")
12 
13 testFile = tempfile.NamedTemporaryFile(prefix='b2filemetadata_')
14 
15 # Generate a small test file
16 main = basf2.Path()
17 main.add_module('EventInfoSetter', evtNumList=[9, 1], runList=[1, 15], expList=[7, 7])
18 main.add_module('RootOutput', outputFileName=testFile.name, updateFileCatalog=False)
19 basf2.process(main)
20 
21 # Check the file meta data (via DataStore)
22 from ROOT import Belle2
23 metadata = Belle2.PyStoreObj('FileMetaData', 1)
24 
25 # print (metadata.getLfn()) #?
26 assert 10 == metadata.getNEvents()
27 
28 assert 7 == metadata.getExperimentLow()
29 assert 1 == metadata.getRunLow()
30 assert 1 == metadata.getEventLow()
31 assert 7 == metadata.getExperimentHigh()
32 assert 15 == metadata.getRunHigh()
33 assert 1 == metadata.getEventHigh() # highest evt. no in highest run
34 assert metadata.containsEvent(7, 1, 1)
35 assert metadata.containsEvent(7, 1, 9)
36 assert metadata.containsEvent(7, 15, 1)
37 assert metadata.containsEvent(7, 1, 10) # does not exist, but would be plausible
38 assert metadata.containsEvent(7, 3, 6) # same
39 assert not metadata.containsEvent(7, 0, 10) # does not exist, but would be plausible
40 assert not metadata.containsEvent(7, 16, 6) # same
41 assert not metadata.containsEvent(0, 15, 6)
42 
43 assert 0 == metadata.getNParents()
44 
45 # print (metadata.getDate())
46 # assert socket.gethostname() == metadata.getSite()
47 # print (metadata.getUser()) #different env variables, not checked
48 assert "something important" == metadata.getRandomSeed()
49 
50 assert version == metadata.getRelease()
51 assert metadata.getSteering().startswith('#!/usr/bin/env python3')
52 assert metadata.getSteering().strip().endswith('dummystring')
53 assert 10 == metadata.getMcEvents()
54 
55 
56 os.system('touch Belle2FileCatalog.xml')
57 assert 0 == os.system('b2file-metadata-add --lfn /logical/file/name ' + testFile.name)
58 
59 assert 0 == os.system('b2file-metadata-show ' + testFile.name)
60 
61 # Check JSON output (contains steering file, so we cannotuse .out)
62 metadata_output = subprocess.check_output(['b2file-metadata-show', '--json', testFile.name])
63 m = json.loads(metadata_output.decode('utf-8'))
64 assert 7 == m['experimentLow']
65 assert 1 == m['runLow']
66 assert 1 == m['eventLow']
67 assert 7 == m['experimentHigh']
68 assert 15 == m['runHigh']
69 assert 1 == m['eventHigh']
70 assert 'something important' == m['randomSeed']
71 assert 10 == m['nEvents']
72 assert isinstance(m['nEvents'], int)
73 assert '/logical/file/name' == m['LFN']
74 
75 # steering file is in metadata, so we check for existence of this string:
76 # dummystring
Belle2::PyStoreObj
a (simplified) python wrapper for StoreObjPtr.
Definition: PyStoreObj.h:69
basf2.process
def process(path, max_event=0)
Definition: __init__.py:25
basf2.version
Definition: version.py:1