63from optparse
import OptionParser
64from distutils
import dir_util
65from os.path
import expandvars
66from subprocess
import *
69from time
import gmtime, strftime
73 usage =
"usage: %prog [options] arg"
74 parser = OptionParser(usage)
75 parser.add_option(
"-v",
"--verbose", dest=
"verbose", default=
True, help=
"print this to stdout")
76 parser.add_option(
"-l",
"--list", dest=
"digiFileListFileName", default=
'bmn_run06_Glob_digi_filelist.txt', help=
"take list of digi files from file")
77 parser.add_option(
"-m",
"--maxit", dest=
"maxNumOfIterations", default=1, help=
"maximum number of iterations", type=
"int")
78 parser.add_option(
"-n",
"--nev", dest=
"nEvents", default=10000, help=
"number of events to process", type=
"int")
79 parser.add_option(
"-i",
"--inf", dest=
"addInfo", default=
'', help=
"additional meta-information")
80 parser.add_option(
"-c",
"--corr", dest=
"startAlignCorrFileName", default=
'default', help=
"file name with the starting alignment corrections")
81 (options, args) = parser.parse_args()
83 print "reading %s..." % options.digiFileListFileName
105 print 'options.digiFileListFileName = '+options.digiFileListFileName
106 digiFileNames = [line.rstrip(
'\n')
for line
in open(options.digiFileListFileName)]
116 if options.startAlignCorrFileName !=
'' :
124 if options.addInfo !=
'' :
125 sumAlignCorrFileName = options.digiFileListFileName.replace(
'digi_filelist.txt', options.addInfo+
'_sum_align_it00.root')
127 sumAlignCorrFileName = options.digiFileListFileName.replace(
'digi_filelist.txt',
'sum_align_it00.root')
129 print 'options.startAlignCorrFileName = '+options.startAlignCorrFileName
131 call([
'cp', options.startAlignCorrFileName, sumAlignCorrFileName])
142 sumAlignCorrFileName =
''
143 preAlignCorrFileName =
''
144 newAlignCorrFileName =
''
145 print 'preAlignCorrFileName = '+preAlignCorrFileName
146 print 'newAlignCorrFileName = '+newAlignCorrFileName
147 print 'sumAlignCorrFileName = '+sumAlignCorrFileName
150 if options.addInfo !=
'' :
151 newAlignCorrFileListFileName = options.digiFileListFileName.replace(
'digi', options.addInfo+
'_new_align')
153 newAlignCorrFileListFileName = options.digiFileListFileName.replace(
'digi',
'new_align')
154 print 'newAlignCorrFileListFileName = '+newAlignCorrFileListFileName
156 sumAlignCorrFileListFileName = newAlignCorrFileListFileName.replace(
'new_',
'sum_')
157 print 'sumAlignCorrFileListFileName = '+sumAlignCorrFileListFileName
165 if options.addInfo !=
'' :
166 alignCorrPlotsFileName = options.digiFileListFileName.replace(
'digi_filelist.txt', options.addInfo+
'_corr_plots.root')
168 alignCorrPlotsFileName = options.digiFileListFileName.replace(
'digi_filelist.txt',
'corr_plots.root')
169 print 'alignCorrPlotsFileName = '+alignCorrPlotsFileName
171 newAlignCorrFileNames = []
172 sumAlignCorrFileNames = []
182 for iterNr
in xrange(1, options.maxNumOfIterations+1) :
183 itNr = str(iterNr).rjust(2,
'0')
197 for digiFileName
in digiFileNames :
198 print 'reconstruction starting'
199 print 'digiFileName = '+digiFileName
204 runNumber = re.search(
'digi_([\d]+)', digiFileName).group(1)
205 if options.addInfo !=
'' :
206 bmndstFileName = options.digiFileListFileName.replace(
'digi_filelist.txt', options.addInfo+
'_bmndst_'+runNumber+
'_it'+itNr+
'.root')
208 bmndstFileName = options.digiFileListFileName.replace(
'digi_filelist.txt',
'bmndst_'+runNumber+
'_it'+itNr+
'.root')
209 print 'bmndstFileName = '+bmndstFileName
211 bmndstFileNames.append(bmndstFileName+
'\n')
214 print 'digiFileName = '+digiFileName
215 print 'bmndstFileName = '+bmndstFileName
216 print 'startng event = '+str(0)
217 print 'number of events to process = '+str(options.nEvents)
218 print 'sumAlignCorrFileName = '+sumAlignCorrFileName
219 call([
'root',
'-l',
'-q',
'$VMCWORKDIR/macro/run/run_reco_bmn.C("'+digiFileName+
'", "'+bmndstFileName+
'", '+str(0)+
', '+str(options.nEvents)+
', "'+sumAlignCorrFileName+
'")'])
221 nEventsTotal += options.nEvents
222 print 'reconstruction ended'
229 if options.addInfo !=
'' :
230 bmndstFileListFileName = options.digiFileListFileName.replace(
'digi_filelist', options.addInfo+
'_bmndst_filelist_it'+itNr)
232 bmndstFileListFileName = options.digiFileListFileName.replace(
'digi_filelist',
'bmndst_filelist_it'+itNr)
233 print 'bmndstFileListFileName = '+bmndstFileListFileName
235 with open(bmndstFileListFileName,
'w')
as f :
236 for fname
in bmndstFileNames :
241 newAlignCorrFileName = bmndstFileListFileName.replace(
'bmndst_filelist',
'new_align')
242 newAlignCorrFileName = newAlignCorrFileName.replace(
'.txt',
'.root')
243 print 'newAlignCorrFileName = '+newAlignCorrFileName
246 print 'alignment starting'
247 call([
'root',
'-l',
'-q',
'$VMCWORKDIR/macro/alignment/determine_align_corrections_bmn.C("'+bmndstFileListFileName+
'", "'+newAlignCorrFileName+
'", '+str(nEventsTotal)+
')'])
248 print 'alignment ended'
251 pedeResultFileName = newAlignCorrFileName.replace(
'align',
'align_millepede')
252 pedeResultFileName = pedeResultFileName.replace(
'.root',
'.res')
253 print 'pedeResultFileName = '+newAlignCorrFileName
254 call([
'cp',
'Millepede.res', pedeResultFileName])
257 preAlignCorrFileName = sumAlignCorrFileName
258 sumAlignCorrFileName = newAlignCorrFileName.replace(
'new_',
'sum_')
259 print 'preAlignCorrFileName = '+preAlignCorrFileName
260 print 'newAlignCorrFileName = '+newAlignCorrFileName
261 print 'sumAlignCorrFileName = '+sumAlignCorrFileName
262 if iterNr==1
and options.startAlignCorrFileName==
'' :
263 call([
'cp', newAlignCorrFileName, sumAlignCorrFileName])
264 print 'cp newAlignCorrFileName sumAlignCorrFileName'
266 print 'update_align_corrections_bmn.C starting'
267 call([
'root',
'-l',
'-q',
'$VMCWORKDIR/macro/alignment/update_align_corrections_bmn.C("'+preAlignCorrFileName+
'", "'+newAlignCorrFileName+
'", "'+sumAlignCorrFileName+
'")'])
268 print 'update_align_corrections_bmn.C ended'
270 newAlignCorrFileNames.append(newAlignCorrFileName+
'\n')
271 sumAlignCorrFileNames.append(sumAlignCorrFileName+
'\n')
275 with open(newAlignCorrFileListFileName,
'w')
as f :
276 for fname
in newAlignCorrFileNames :
278 with open(sumAlignCorrFileListFileName,
'w')
as f :
279 for fname
in sumAlignCorrFileNames :
283 call([
'root',
'-l',
'-q',
'$VMCWORKDIR/macro/alignment/plot_align_corrections_bmn.C("'+newAlignCorrFileListFileName+
'")'])
285if __name__ ==
"__main__" :