Belle II Software  release-08-01-10
createLookUpTable_mc.py
1 #!/usr/bin/env python3
2 
3 
10 
11 import os
12 import sys
13 from tools import getMaxRunNo_mc, getBelleUrl_mc, readConfigFile_mc, countEventsInUrl, addLine
14 
15 # print debug messages ?
16 debug = False
17 debugCounter = 0
18 
19 if len(sys.argv) == 1:
20  sys.exit('Need one argument: path of config file with job parameters !')
21 
22 # read jobs parameters from config file
23 thresholdEventsNo, expNoList, eventTypeList, dataTypeList, belleLevelList =\
24  readConfigFile_mc()
25 
26 # create output directory for tables if it doesn't exist
27 if not os.path.exists('tables'):
28  os.makedirs('tables')
29 
30 # open table and write in it
31 # table name contains threshold for events number of each job
32 tableName = 'tables/lookUpTable_mc_' + \
33  str(int(thresholdEventsNo / 1000)) + 'k.txt'
34 f = open(tableName, 'w')
35 
36 # write one line for each job we submit
37 # grouping the smallest set of runs that has more than Nthreshold events
38 for expNo in expNoList:
39 
40  absMaxRunNo = getMaxRunNo_mc(expNo)
41  if absMaxRunNo is None:
42  sys.exit('ExpNo ' + str(expNo) + ' not found. Does it exist ?')
43 
44  if debug:
45  print('For expNo ' + str(expNo) + ' max runNo is ' + str(absMaxRunNo))
46 
47  if expNo in range(7, 28):
48  streamNo_dummy = 10
49  elif expNo in range(31, 66):
50  streamNo_dummy = 0
51 
52  for eventType in eventTypeList:
53  for dataType in dataTypeList:
54  for belleLevel in belleLevelList:
55 
56  minRunNo = 1
57  while minRunNo < absMaxRunNo: # stop searching for runs after maxRunNo
58 
59  maxRunNo = minRunNo + 1
60 
61  # create the smallest set of runs that has more than
62  # Nthreshold events
63  for add in range(1, 1000):
64 
65  maxRunNo = minRunNo + add
66 
67  thisUrl = getBelleUrl_mc(expNo, minRunNo, maxRunNo,
68  eventType, dataType,
69  belleLevel, streamNo_dummy)
70 
71  if debug:
72  print('Checking up url: ' + thisUrl)
73 
74  thisUrlCount = countEventsInUrl(thisUrl)
75  if debug:
76  print('Count is up to: ' + str(thisUrlCount))
77 
78  if maxRunNo > absMaxRunNo or thisUrlCount > thresholdEventsNo:
79  break
80 
81  addLine(f, [expNo, eventType,
82  dataType, belleLevel,
83  minRunNo, maxRunNo])
84 
85  debugCounter += 1
86  if debug and debugCounter > 2:
87  f.close()
88  sys.exit('Debug')
89 
90  minRunNo = maxRunNo + 1
91 
92 f.close()