301
302 parser = argparse.ArgumentParser()
303 parser.add_argument("-d","--dir")
304 parser.add_argument("-t","--tmp")
305 parser.add_argument("-n","--npars",default=3)
306 parser.add_argument("-r","--ref")
307 parser.add_argument("-b","--batch",action='store_true')
308 parser.add_argument("-ns","--nosubmit", action='store_true')
309 parser.add_argument("-rc","--redo-configs", action='store_true')
310 parser.add_argument("-ntm","--ntestsmatrices",default=100)
311 parser.add_argument("-ntc","--ntestscomparisons",default=100)
312 parser.add_argument("--matrixStage",action='store_true')
313 parser.add_argument("--comparisonStage",action='store_true')
314 parser.add_argument("--investigateComb",default="",type=str)
315 parser.add_argument("--investigateSplits",default="",type=str)
316 args = parser.parse_args()
317 print args
318
319 shareDir = os.getcwd()+"/../../share/"+args.dir
320 nominalFile = shareDir+"/"+args.ref
321 templateFile = shareDir+"/"+args.tmp
322 newFilesDir = ""
323 if "/" in templateFile :
324 for item in templateFile.split("/")[:-1] :
325 newFilesDir = newFilesDir+"/"+item
326
327 nPars = args.npars
328
329 print "sharedir",shareDir
330 print "nominal",nominalFile
331 print "template",templateFile
332 print "new configs will go in",newFilesDir
333 print "using",nPars,"parameters, not counting eta intercalibration non-closure."
334
335 doPlots = False
336
337
338 configFileList = []
339 nConfigs = 0
340 if args.redo_configs and not args.investigateSplits :
341 start_time = time.time()
342 fullCombList = computeCombinations(15,3)
343 index = -1
344 print(
"--- %s seconds ---" % (time.time() - start_time))
345 for comb in fullCombList :
346 index = index+1
347 thisname = makeNewConfigFile(templateFile,comb,index,args.npars)
348
349 nConfigs = index+1
350 else :
351 nConfigs = len([os.path.join(newFilesDir, f) for f in os.listdir(newFilesDir) if "index" in f])
352
353
354 outRootDir = os.getcwd()+"/NPRootFiles/"
355 outRootFormat = outRootDir+"matrices_{0}.root"
356 if args.matrixStage and not args.investigateSplits :
357
358
359
360
361
362 useval = int(args.ntestsmatrices)
363 indicesToUse = random.sample(
xrange(0,nConfigs), useval)
364 for index in indicesToUse :
365
366
367 config = templateFile.replace("template","index{0}".format(index))
368
369
370
371 outRootName = outRootFormat.format(index)
372 if doPlots :
373 outPlotName = os.getcwd()+"/NPPlots/matrices_{0}.pdf".format(index)
374 else :
375 outPlotName = "NONE"
376
377 runMatrixCommands(nominalFile,config,outPlotName,outRootName,index,args.batch)
378
379
380 if args.comparisonStage and not args.investigateSplits :
381
382
383
384
385 rootFiles = [os.path.join(outRootDir, f) for f in os.listdir(outRootDir) if "matrices" in f]
386 indicesAvailable = []
387 for file in rootFiles :
388 index = re.findall(
r'\d+', file.split(
"/")[-1].
split(
"_")[-1])
389 indicesAvailable.append(eval(index[0]))
390
391
392
393
394 if args.investigateComb :
395 goodComb = tuple([eval(item) for item in args.investigateComb.split(",")])
396 newList = []
397 for index in range(4) :
398 for new
in random.sample(indicesAvailable,
max(1,int(float(args.ntestscomparisons)/4.0))) :
399 if not new in goodComb :
400 newComb = list(goodComb)
401 newComb[index] = new
402 newList.append(tuple(newComb))
403 pool = tuple(newList)
404
405
406 else :
407
408
409 random.shuffle(indicesAvailable)
410 if len(indicesAvailable) > 15 :
411 indicesAvailable = indicesAvailable[:15]
412
413
414
415
416 pool = tuple(combinations(indicesAvailable,4))
417
418
419 for indices
in random.sample(pool,
min(len(pool),args.ntestscomparisons)) :
420 print "Testing combination",indices
421
422 outFileName = os.getcwd()+"/NPPlots/SR-4D-{0}-{1}-{2}-{3}.png".format(indices[0],indices[1],indices[2],indices[3])
423
424 runComparisonCommands(outFileName,"NONE",outRootFormat.format(indices[0]),outRootFormat.format(indices[1],outRootFormat.format(indices[2])),outRootFormat.format(indices[2]),outRootFormat.format(indices[3]),"{0}-{1}-{2}-{3}".format(indices[0],indices[1],indices[2],indices[3]),args.batch)
425
426
427
428 if args.investigateSplits :
429
430 configIndices = tuple([eval(item) for item in args.investigateSplits.split(",")])
431 print configIndices
432 splitconfigs = [templateFile.replace("template","index{0}".format(index)) for index in configIndices[1:]]
433 print splitconfigs
434 iterables = []
435 for configindex, config in zip(configIndices[1:],splitconfigs) :
436 newIndices = makeSplitConfigs(config,args.redo_configs)
437 newIterables = []
438
439 for index in range(newIndices) :
440 outRootName = (outRootFormat.format(configindex)).
replace(
".root",
"_splitV{0}.root".format(index))
441 newconfig = config.replace(".config","_splitV{0}.config".format(index))
442 newconfig = newconfig.replace("generateConfigs","splitsConfigs")
443 newIterables.append("{0}_splitV{1}".format(configindex,index))
444
445 runMatrixCommands(nominalFile,newconfig,"NONE",outRootName,"{0}-{1}".format(configindex,index),args.batch)
446
447 iterables.append(newIterables)
448
449
450 isdone = not subprocess.check_output("qstat",shell=True)
451 while not isdone :
452 time.sleep(20)
453 isdone = not subprocess.check_output("qstat",shell=True)
454
455
456 pool = tuple(product([configIndices[0]],iterables[0],iterables[1],iterables[2]))
457
458 for indices
in random.sample(pool,
min(len(pool),args.ntestscomparisons)) :
459 print "Testing combination",indices
460
461 outFileName = os.getcwd()+"/NPPlots/SR-4D-{0}-{1}-{2}-{3}.png".format(indices[0],indices[1],indices[2],indices[3])
462
463 runComparisonCommands(outFileName,"NONE",outRootFormat.format(indices[0]),outRootFormat.format(indices[1],outRootFormat.format(indices[2])),outRootFormat.format(indices[2]),outRootFormat.format(indices[3]),"{0}-{1}-{2}-{3}".format(indices[0],indices[1],indices[2],indices[3]),args.batch)
464
void print(char *figname, TCanvas *c1)
void xrange(TH1 *h, bool symmetric)
std::string replace(std::string s, const std::string &s2, const std::string &s3)
std::vector< std::string > split(const std::string &s, const std::string &t=":")