CMS 3D CMS Logo

mps_merge.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 #
3 # produce cfg file for merging run
4 #
5 # Usage:
6 #
7 # mps_merge.pl [-c] inCfg mergeCfg mergeDir njobs
8 
9 from __future__ import print_function
10 from builtins import range
11 import Alignment.MillePedeAlignmentAlgorithm.mpslib.Mpslibclass as mpslib
12 import re
13 import os
14 import argparse
15 
16 lib = mpslib.jobdatabase()
17 
18 
20 parser = argparse.ArgumentParser(
21  description='Produce Config for Pede-job from Mille-config.')
22 
23 # optional arguments
24 parser.add_argument('-c', '--checkok', action='store_true',
25  help='check which jobs are OK and write just them to the config')
26 parser.add_argument('-w', '--checkweight', action='store_true',
27  help='check for weight assignments in mps.db and add them to binarylist')
28 parser.add_argument("-a", "--append", dest="append", metavar="SNIPPET",
29  help="config snippet to be appended to the output config")
30 
31 # positional arguments
32 parser.add_argument('inCfg', action='store',
33  help='path to cfg-file, that is used as base')
34 parser.add_argument('mergeCfg', action='store',
35  help='path and name of the config that is produced')
36 parser.add_argument('mergeDir', action='store',
37  help='path to the merge directory')
38 parser.add_argument('nJobs', action='store', type=int,
39  help='number of jobs')
40 
41 # parse arguments
42 args = parser.parse_args()
43 inCfg = args.inCfg
44 mergeCfg = args.mergeCfg
45 mergeDir = args.mergeDir
46 nJobs = args.nJobs
47 checkok = args.checkok
48 checkweight = args.checkweight
49 
50 if checkok or checkweight:
51  lib.read_db()
52 
53 
55 
56 # create pede dir
57 if not os.path.isdir(mergeDir):
58  os.system('mkdir '+mergeDir)
59 
60 # open base config
61 with open(inCfg, 'r') as INFILE: body = INFILE.read()
62 
63 
64 # set mode to "pede"
65 match = re.search('setupAlgoMode\s*?\=\s*?[\"\'].*?[\"\']', body)
66 if match:
67  body = re.sub('setupAlgoMode\s*?\=\s*?[\"\'].*?[\"\']',
68  'setupAlgoMode = \"pede\"',
69  body)
70 else:
71  print('Error in mps_merge: No setupAlgoMode found in baseconfig.')
72 
73 
74 # build list of binary files
75 binaryList = ''
76 firstentry = True
77 for i in range(nJobs):
78  separator = ',\n '
79  if firstentry:
80  separator = '\n '
81  if checkok and lib.JOBSTATUS[i]!='OK':
82  continue
83  firstentry = False
84 
85  newName = 'milleBinary%03d.dat' % (i+1)
86  if checkweight and (lib.JOBSP2[i]!='' and lib.JOBSP2[i]!='1.0'):
87  weight = lib.JOBSP2[i]
88  print('Adding %s to list of binary files using weight %s' % (newName,weight))
89  binaryList = '%s%s\'%s -- %s\'' % (binaryList, separator, newName, weight)
90  else:
91  print('Adding %s to list of binary files' % newName)
92  binaryList = '%s%s\'%s\'' % (binaryList, separator, newName)
93 
94 
95 # replace 'placeholder_binaryList' with binaryList
96 match = re.search('[\"\']placeholder_binaryList[\"\']', body)
97 if match:
98  body = re.sub('[\"\']placeholder_binaryList[\"\']',
99  binaryList,
100  body)
101 else:
102  print('Error in mps_merge: No \'placeholder_binaryList\' found in baseconfig.')
103 
104 
105 # build list of tree files
106 treeList =''
107 firstentry = True
108 for i in range(nJobs):
109  separator = ',\n '
110  if firstentry:
111  separator = '\n '
112  if checkok and lib.JOBSTATUS[i]!='OK':
113  continue
114  firstentry = False
115 
116  newName = 'treeFile%03d.root' % (i+1)
117  print('Adding %s to list of tree files.' % newName)
118  treeList = '%s%s\'%s\'' % (treeList, separator, newName)
119 
120 
121 # replace 'placeholder_treeList' with binaryList
122 match = re.search('[\"\']placeholder_treeList[\"\']', body)
123 if match:
124  body = re.sub('[\"\']placeholder_treeList[\"\']',
125  treeList,
126  body)
127 else:
128  print('Error in mps_merge: No \'placeholder_treeList\' found in baseconfig.')
129 
130 if args.append is not None:
131  with open(args.append) as snippet:
132  body += snippet.read()
133 
134 with open(mergeCfg, 'w') as OUTFILE:
135  OUTFILE.write(body)
136 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47