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