Belle II Software  release-06-01-15
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 
35 assert 7 == metadata.getExperimentLow()
36 assert 1 == metadata.getRunLow()
37 assert 1 == metadata.getEventLow()
38 assert 7 == metadata.getExperimentHigh()
39 assert 15 == metadata.getRunHigh()
40 assert 1 == metadata.getEventHigh() # highest evt. no in highest run
41 assert metadata.containsEvent(7, 1, 1)
42 assert metadata.containsEvent(7, 1, 9)
43 assert metadata.containsEvent(7, 15, 1)
44 assert metadata.containsEvent(7, 1, 10) # does not exist, but would be plausible
45 assert metadata.containsEvent(7, 3, 6) # same
46 assert not metadata.containsEvent(7, 0, 10) # does not exist, but would be plausible
47 assert not metadata.containsEvent(7, 16, 6) # same
48 assert not metadata.containsEvent(0, 15, 6)
49 
50 assert 0 == metadata.getNParents()
51 
52 # print (metadata.getDate())
53 # assert socket.gethostname() == metadata.getSite()
54 # print (metadata.getUser()) #different env variables, not checked
55 assert "something important" == metadata.getRandomSeed()
56 
57 assert get_version() == metadata.getRelease()
58 assert metadata.getSteering().startswith('#!/usr/bin/env python3')
59 assert metadata.getSteering().strip().endswith('dummystring')
60 assert 10 == metadata.getMcEvents()
61 
62 
63 os.system('touch Belle2FileCatalog.xml')
64 assert 0 == os.system('b2file-metadata-add --lfn /logical/file/name ' + testFile.name)
65 
66 assert 0 == os.system('b2file-metadata-show ' + testFile.name)
67 
68 # Check JSON output (contains steering file, so we cannotuse .out)
69 metadata_output = subprocess.check_output(['b2file-metadata-show', '--json', testFile.name])
70 m = json.loads(metadata_output.decode('utf-8'))
71 assert 7 == m['experimentLow']
72 assert 1 == m['runLow']
73 assert 1 == m['eventLow']
74 assert 7 == m['experimentHigh']
75 assert 15 == m['runHigh']
76 assert 1 == m['eventHigh']
77 assert 'something important' == m['randomSeed']
78 assert 10 == m['nEvents']
79 assert isinstance(m['nEvents'], int)
80 assert '/logical/file/name' == m['LFN']
81 
82 # steering file is in metadata, so we check for existence of this string:
83 # dummystring
a (simplified) python wrapper for StoreObjPtr.
Definition: PyStoreObj.h:67