def run_method(self): if self.args.json is not None: json_structure = self.args.json.split(':') assert(len(json_structure) >= 1) if os.path.isfile(json_structure[0]): with open(json_structure[0]) as jsonfile: js = json.load(jsonfile) else: js = {} js_target = js if (len(json_structure) >= 2): for key in json_structure[1:]: js_target[key] = {} js_target = js_target[key] POIs = self.args.POIs.split(',') if self.args.algo == 'none': res = utils.get_none_results(self.args.input, POIs) if self.args.json is not None: for key,val in res.iteritems(): js_target[key] = { 'Val' : val } with open(json_structure[0], 'w') as outfile: json.dump(js, outfile, sort_keys=True, indent=4, separators=(',', ': ')) elif self.args.algo == 'singles': res = utils.get_singles_results(self.args.input, POIs, POIs) for p in POIs: val = res[p][p] print '%s = %.3f -%.3f/+%.3f' % (p, val[1], val[1] - val[0], val[2] - val[1])
def run_method(self): if self.args.json is not None: json_structure = self.args.json.split(':') assert (len(json_structure) >= 1) if os.path.isfile(json_structure[0]): with open(json_structure[0]) as jsonfile: js = json.load(jsonfile) else: js = {} js_target = js if (len(json_structure) >= 2): for key in json_structure[1:]: js_target[key] = {} js_target = js_target[key] POIs = self.args.POIs.split(',') if self.args.algo == 'none': res = utils.get_none_results(self.args.input, POIs) if self.args.json is not None: for key, val in res.iteritems(): js_target[key] = {'Val': val} with open(json_structure[0], 'w') as outfile: json.dump(js, outfile, sort_keys=True, indent=4, separators=(',', ': ')) elif self.args.algo == 'singles': res = utils.get_singles_results(self.args.input, POIs, POIs) for p in POIs: val = res[p][p] print '%s = %.3f -%.3f/+%.3f' % (p, val[1], val[1] - val[0], val[2] - val[1])
def run_method(self): if self.args.json is not None: json_structure = self.args.json.split(':') assert (len(json_structure) >= 1) if os.path.isfile(json_structure[0]): with open(json_structure[0]) as jsonfile: js = json.load(jsonfile) else: js = {} js_target = js if (len(json_structure) >= 2): for key in json_structure[1:]: js_target[key] = {} js_target = js_target[key] POIs = self.args.POIs.split(',') if self.args.algo == 'none': res = utils.get_none_results(self.args.input, POIs) for p in POIs: val = res[p] print '%-30s = %+.3f' % (p, val) if self.args.json is not None: for key, val in res.iteritems(): js_target[key] = {'Val': val} with open(json_structure[0], 'w') as outfile: json.dump(js, outfile, sort_keys=True, indent=4, separators=(',', ': ')) elif self.args.algo == 'singles': res = utils.get_singles_results(self.args.input, POIs, POIs) for p in POIs: val = res[p][p] print '%s = %.3f -%.3f/+%.3f' % (p, val[1], val[1] - val[0], val[2] - val[1]) elif self.args.algo == 'fixed': res = utils.get_fixed_results(self.args.input, POIs) print '%-30s bestfit : fixed' % ('') for p in POIs: print '%-30s = %+.3f : %+.3f' % (p, res['bestfit'][p], res['fixedpoint'][p]) print '-' * 60 print '2*deltaNLL = %f, nPOIs = %i, p-value = %0.4f' % ( 2. * res['deltaNLL'], len(POIs), res['pvalue'])
def run_method(self): if self.args.allPars: print 'Info: the behaviour of --allPars is now always enabled and the option will be removed in a future update' passthru = self.passthru mh = self.args.mass ws = self.args.datacard name = self.args.name if self.args.name is not None else '' named = [] if self.args.named is not None: named = self.args.named.split(',') # Put intercepted args back passthru.extend(['-m', mh]) passthru.extend(['-d', ws]) if self.args.setPhysicsModelParameters is not None: passthru.extend([ '--setPhysicsModelParameters', self.args.setPhysicsModelParameters ]) if self.args.setParameters is not None: passthru.extend(['--setParameters', self.args.setParameters]) self.args.setPhysicsModelParameters = self.args.setParameters pass_str = ' '.join(passthru) paramList = [] if self.args.redefineSignalPOIs is not None: poiList = self.args.redefineSignalPOIs.split(',') else: poiList = utils.list_from_workspace(ws, 'w', 'ModelConfig_POI') print 'Have POIs: ' + str(poiList) poistr = ','.join(poiList) if self.args.approx == 'hesse' and self.args.doFits: self.job_queue.append( 'combine -M MultiDimFit -n _approxFit_%(name)s --algo none --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 --saveFitResult %(pass_str)s' % { 'name': name, 'poistr': poistr, 'pass_str': pass_str }) self.flush_queue() sys.exit(0) elif self.args.approx == 'robust' and self.args.doFits: self.job_queue.append( 'combine -M MultiDimFit -n _approxFit_%(name)s --algo none --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 --robustHesse 1 %(pass_str)s' % { 'name': name, 'poistr': poistr, 'pass_str': pass_str }) self.flush_queue() sys.exit(0) ################################################ # Generate the initial fit(s) ################################################ if self.args.doInitialFit and self.args.approx is not None: print 'No --initialFit needed with --approx, use --output directly' sys.exit(0) if self.args.doInitialFit: if self.args.splitInitial: for poi in poiList: self.job_queue.append( 'combine -M MultiDimFit -n _initialFit_%(name)s_POI_%(poi)s --algo singles --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 -P %(poi)s %(pass_str)s' % { 'name': name, 'poi': poi, 'poistr': poistr, 'pass_str': pass_str }) else: self.job_queue.append( 'combine -M MultiDimFit -n _initialFit_%(name)s --algo singles --redefineSignalPOIs %(poistr)s %(pass_str)s' % { 'name': name, 'poistr': poistr, 'pass_str': pass_str }) self.flush_queue() sys.exit(0) # Read the initial fit results initialRes = {} if self.args.approx is not None: if self.args.approx == 'hesse': fResult = ROOT.TFile('multidimfit_approxFit_%(name)s.root' % {'name': name}) rfr = fResult.Get('fit_mdf') fResult.Close() initialRes = utils.get_roofitresult(rfr, poiList, poiList) elif self.args.approx == 'robust': fResult = ROOT.TFile('robustHesse_approxFit_%(name)s.root' % {'name': name}) floatParams = fResult.Get('floatParsFinal') rfr = fResult.Get('h_correlation') rfr.SetDirectory(0) fResult.Close() initialRes = utils.get_robusthesse(floatParams, rfr, poiList, poiList) elif self.args.splitInitial: for poi in poiList: initialRes.update( utils.get_singles_results( 'higgsCombine_initialFit_%(name)s_POI_%(poi)s.MultiDimFit.mH%(mh)s.root' % vars(), [poi], poiList)) else: initialRes = utils.get_singles_results( 'higgsCombine_initialFit_%(name)s.MultiDimFit.mH%(mh)s.root' % vars(), poiList, poiList) ################################################ # Build the parameter list ################################################ if len(named) > 0: paramList = named else: paramList = self.all_free_parameters(ws, 'w', 'ModelConfig', poiList) # else: # paramList = utils.list_from_workspace( # ws, 'w', 'ModelConfig_NuisParams') # Exclude some parameters if self.args.exclude is not None: exclude = self.args.exclude.split(',') paramList = [x for x in paramList if x not in exclude] print 'Have parameters: ' + str(len(paramList)) prefit = utils.prefit_from_workspace( ws, 'w', paramList, self.args.setPhysicsModelParameters) res = {} res["POIs"] = [] res["params"] = [] for poi in poiList: res["POIs"].append({"name": poi, "fit": initialRes[poi][poi]}) missing = [] for param in paramList: pres = {'name': param} pres.update(prefit[param]) # print 'Doing param ' + str(counter) + ': ' + param if self.args.doFits: self.job_queue.append( 'combine -M MultiDimFit -n _paramFit_%(name)s_%(param)s --algo impact --redefineSignalPOIs %(poistr)s -P %(param)s --floatOtherPOIs 1 --saveInactivePOI 1 %(pass_str)s' % vars()) else: if self.args.approx == 'hesse': paramScanRes = utils.get_roofitresult( rfr, [param], poiList + [param]) elif self.args.approx == 'robust': if floatParams.find(param): paramScanRes = utils.get_robusthesse( floatParams, rfr, [param], poiList + [param]) else: paramScanRes = None else: paramScanRes = utils.get_singles_results( 'higgsCombine_paramFit_%(name)s_%(param)s.MultiDimFit.mH%(mh)s.root' % vars(), [param], poiList + [param]) if paramScanRes is None: missing.append(param) continue pres["fit"] = paramScanRes[param][param] for p in poiList: pres.update({ p: paramScanRes[param][p], 'impact_' + p: max( map(abs, (x - paramScanRes[param][p][1] for x in (paramScanRes[param][p][2], paramScanRes[param][p][0])))) }) res['params'].append(pres) self.flush_queue() if self.args.approx == 'hesse': res['method'] = 'hesse' elif self.args.approx == 'robust': res['method'] = 'robust' else: res['method'] = 'default' jsondata = json.dumps(res, sort_keys=True, indent=2, separators=(',', ': ')) # print jsondata if self.args.output is not None: with open(self.args.output, 'w') as out_file: out_file.write(jsondata) if len(missing) > 0: print 'Missing inputs: ' + ','.join(missing)
def run_method(self): # offset = self.args.offset # advance = self.args.advance passthru = self.passthru mh = self.args.mass ws = self.args.datacard name = self.args.name if self.args.name is not None else '' named = [] if self.args.named is not None: named = args.named.split(',') # Put intercepted args back passthru.extend(['-m', mh]) passthru.extend(['-d', ws]) pass_str = ' '.join(passthru) paramList = [] if self.args.redefineSignalPOIs is not None: poiList = args.redefineSignalPOIs.split(',') else: poiList = utils.list_from_workspace(ws, 'w', 'ModelConfig_POI') #print 'Have nuisance parameters: ' + str(paramList) print 'Have POIs: ' + str(poiList) poistr = ','.join(poiList) if self.args.doInitialFit: if self.args.splitInitial: for poi in poiList: self.job_queue.append('combine -M MultiDimFit -n _initialFit_%(name)s_POI_%(poi)s --algo singles --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 -P %(poi)s %(pass_str)s --altCommit' % vars()) else: self.job_queue.append('combine -M MultiDimFit -n _initialFit_%(name)s --algo singles --redefineSignalPOIs %(poistr)s %(pass_str)s --altCommit' % vars()) self.flush_queue() sys.exit(0) initialRes = utils.get_singles_results('higgsCombine_initialFit_%(name)s.MultiDimFit.mH%(mh)s.root' % vars(), poiList, poiList) if len(named) > 0: paramList = named else: paramList = utils.list_from_workspace(ws, 'w', 'ModelConfig_NuisParams') print 'Have nuisance parameters: ' + str(len(paramList)) prefit = utils.prefit_from_workspace(ws, 'w', paramList) res = { } res["POIs"] = [] res["params"] = [] # for poi in poiList: # res["POIs"].append({"name" : poi, "fit" : initialRes[poi][poi]}) missing = [ ] for param in paramList: pres = { } # print 'Doing param ' + str(counter) + ': ' + param if self.args.doFits: self.job_queue.append('combine -M MultiDimFit -n _paramFit_%(name)s_%(param)s --algo singles --redefineSignalPOIs %(param)s,%(poistr)s -P %(param)s --floatOtherPOIs 1 --saveInactivePOI 1 %(pass_str)s --altCommit' % vars()) else: paramScanRes = get_singles_results('higgsCombine_paramFit_%(name)s_%(param)s.MultiDimFit.mH%(mh)s.root' % vars(), [param], poiList + [param]) if paramScanRes is None: missing.append(param) continue pres.update({"name" : param, "fit" : paramScanRes[param][param], "prefit" : prefit[param]}) for p in poiList: pres.update({p : paramScanRes[param][p], 'impact_'+p : (paramScanRes[param][p][2] - paramScanRes[param][p][0])/2.}) res['params'].append(pres) self.flush_queue() jsondata = json.dumps(res, sort_keys=True, indent=2, separators=(',', ': ')) print jsondata if self.args.output is not None: with open(args.output, 'w') as out_file: out_file.write(jsondata) if len(missing) > 0: print 'Missing inputs: ' + ','.join(missing)
def run_method(self): passthru = self.passthru mh = self.args.mass ws = self.args.datacard name = self.args.name if self.args.name is not None else '' named = [] if self.args.named is not None: named = self.args.named.split(',') # Put intercepted args back passthru.extend(['-m', mh]) passthru.extend(['-d', ws]) if self.args.setPhysicsModelParameters is not None: passthru.extend(['--setPhysicsModelParameters', self.args.setPhysicsModelParameters]) pass_str = ' '.join(passthru) paramList = [] if self.args.redefineSignalPOIs is not None: poiList = self.args.redefineSignalPOIs.split(',') else: poiList = utils.list_from_workspace(ws, 'w', 'ModelConfig_POI') # print 'Have nuisance parameters: ' + str(paramList) print 'Have POIs: ' + str(poiList) poistr = ','.join(poiList) if self.args.doInitialFit: if self.args.splitInitial: for poi in poiList: self.job_queue.append( 'combine -M MultiDimFit -n _initialFit_%(name)s_POI_%(poi)s --algo singles --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 -P %(poi)s %(pass_str)s' % vars()) else: self.job_queue.append( 'combine -M MultiDimFit -n _initialFit_%(name)s --algo singles --redefineSignalPOIs %(poistr)s %(pass_str)s' % vars()) self.flush_queue() sys.exit(0) if self.args.splitInitial: initialRes = {} for poi in poiList: initialRes.update(utils.get_singles_results( 'higgsCombine_initialFit_%(name)s_POI_%(poi)s.MultiDimFit.mH%(mh)s.root' % vars(), [poi], poiList)) else: initialRes = utils.get_singles_results( 'higgsCombine_initialFit_%(name)s.MultiDimFit.mH%(mh)s.root' % vars(), poiList, poiList) if len(named) > 0: paramList = named elif self.args.allPars: paramList = self.all_free_parameters(ws, 'w', 'ModelConfig', poiList) else: paramList = utils.list_from_workspace( ws, 'w', 'ModelConfig_NuisParams') if self.args.exclude is not None: exclude = self.args.exclude.split(',') paramList = [x for x in paramList if x not in exclude] print 'Have nuisance parameters: ' + str(len(paramList)) prefit = utils.prefit_from_workspace(ws, 'w', paramList, self.args.setPhysicsModelParameters) res = {} res["POIs"] = [] res["params"] = [] for poi in poiList: res["POIs"].append({"name": poi, "fit": initialRes[poi][poi]}) missing = [] for param in paramList: pres = {'name': param} pres.update(prefit[param]) # print 'Doing param ' + str(counter) + ': ' + param if self.args.doFits: self.job_queue.append( 'combine -M MultiDimFit -n _paramFit_%(name)s_%(param)s --algo impact --redefineSignalPOIs %(poistr)s -P %(param)s --floatOtherPOIs 1 --saveInactivePOI 1 %(pass_str)s' % vars()) else: paramScanRes = utils.get_singles_results( 'higgsCombine_paramFit_%(name)s_%(param)s.MultiDimFit.mH%(mh)s.root' % vars(), [param], poiList + [param]) if paramScanRes is None: missing.append(param) continue pres["fit"] = paramScanRes[param][param] for p in poiList: pres.update({p: paramScanRes[param][p], 'impact_' + p: max(map(abs, (x - paramScanRes[ param][p][1] for x in (paramScanRes[param][p][2], paramScanRes[param][p][0]))))}) res['params'].append(pres) self.flush_queue() jsondata = json.dumps( res, sort_keys=True, indent=2, separators=(',', ': ')) # print jsondata if self.args.output is not None: with open(self.args.output, 'w') as out_file: out_file.write(jsondata) if len(missing) > 0: print 'Missing inputs: ' + ','.join(missing)
def run_method(self): if self.args.allPars: print 'Info: the behaviour of --allPars is now always enabled and the option will be removed in a future update' passthru = self.passthru mh = self.args.mass ws = self.args.datacard name = self.args.name if self.args.name is not None else '' named = [] if self.args.named is not None: named = self.args.named.split(',') # Put intercepted args back passthru.extend(['-m', mh]) passthru.extend(['-d', ws]) if self.args.setPhysicsModelParameters is not None: passthru.extend(['--setPhysicsModelParameters', self.args.setPhysicsModelParameters]) if self.args.setParameters is not None: passthru.extend(['--setParameters', self.args.setParameters]) self.args.setPhysicsModelParameters = self.args.setParameters pass_str = ' '.join(passthru) paramList = [] if self.args.redefineSignalPOIs is not None: poiList = self.args.redefineSignalPOIs.split(',') else: poiList = utils.list_from_workspace(ws, 'w', 'ModelConfig_POI') print 'Have POIs: ' + str(poiList) poistr = ','.join(poiList) if self.args.approx == 'hesse' and self.args.doFits: self.job_queue.append( 'combine -M MultiDimFit -n _approxFit_%(name)s --algo none --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 --saveFitResult %(pass_str)s' % { 'name': name, 'poistr': poistr, 'pass_str': pass_str }) self.flush_queue() sys.exit(0) elif self.args.approx == 'robust' and self.args.doFits: self.job_queue.append( 'combine -M MultiDimFit -n _approxFit_%(name)s --algo none --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 --robustHesse 1 %(pass_str)s' % { 'name': name, 'poistr': poistr, 'pass_str': pass_str }) self.flush_queue() sys.exit(0) ################################################ # Generate the initial fit(s) ################################################ if self.args.doInitialFit and self.args.approx is not None: print 'No --initialFit needed with --approx, use --output directly' sys.exit(0) if self.args.doInitialFit: if self.args.splitInitial: for poi in poiList: self.job_queue.append( 'combine -M MultiDimFit -n _initialFit_%(name)s_POI_%(poi)s --algo singles --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 -P %(poi)s %(pass_str)s' % { 'name': name, 'poi': poi, 'poistr': poistr, 'pass_str': pass_str }) else: self.job_queue.append( 'combine -M MultiDimFit -n _initialFit_%(name)s --algo singles --redefineSignalPOIs %(poistr)s %(pass_str)s' % { 'name': name, 'poistr': poistr, 'pass_str': pass_str }) self.flush_queue() sys.exit(0) # Read the initial fit results initialRes = {} if self.args.approx is not None: if self.args.approx == 'hesse': fResult = ROOT.TFile('multidimfit_approxFit_%(name)s.root' % {'name': name}) rfr = fResult.Get('fit_mdf') fResult.Close() initialRes = utils.get_roofitresult(rfr, poiList, poiList) elif self.args.approx == 'robust': fResult = ROOT.TFile('robustHesse_approxFit_%(name)s.root' % {'name': name}) floatParams = fResult.Get('floatParsFinal') rfr = fResult.Get('h_correlation') rfr.SetDirectory(0) fResult.Close() initialRes = utils.get_robusthesse(floatParams, rfr, poiList, poiList) elif self.args.splitInitial: for poi in poiList: initialRes.update(utils.get_singles_results( 'higgsCombine_initialFit_%(name)s_POI_%(poi)s.MultiDimFit.mH%(mh)s.root' % vars(), [poi], poiList)) else: initialRes = utils.get_singles_results( 'higgsCombine_initialFit_%(name)s.MultiDimFit.mH%(mh)s.root' % vars(), poiList, poiList) ################################################ # Build the parameter list ################################################ if len(named) > 0: paramList = named else: paramList = self.all_free_parameters(ws, 'w', 'ModelConfig', poiList) # else: # paramList = utils.list_from_workspace( # ws, 'w', 'ModelConfig_NuisParams') # Exclude some parameters if self.args.exclude is not None: exclude = self.args.exclude.split(',') paramList = [x for x in paramList if x not in exclude] print 'Have parameters: ' + str(len(paramList)) prefit = utils.prefit_from_workspace(ws, 'w', paramList, self.args.setPhysicsModelParameters) res = {} res["POIs"] = [] res["params"] = [] for poi in poiList: res["POIs"].append({"name": poi, "fit": initialRes[poi][poi]}) missing = [] for param in paramList: pres = {'name': param} pres.update(prefit[param]) # print 'Doing param ' + str(counter) + ': ' + param if self.args.doFits: self.job_queue.append( 'combine -M MultiDimFit -n _paramFit_%(name)s_%(param)s --algo impact --redefineSignalPOIs %(poistr)s -P %(param)s --floatOtherPOIs 1 --saveInactivePOI 1 %(pass_str)s' % vars()) else: if self.args.approx == 'hesse': paramScanRes = utils.get_roofitresult(rfr, [param], poiList + [param]) elif self.args.approx == 'robust': if floatParams.find(param): paramScanRes = utils.get_robusthesse(floatParams, rfr, [param], poiList + [param]) else: paramScanRes = None else: paramScanRes = utils.get_singles_results( 'higgsCombine_paramFit_%(name)s_%(param)s.MultiDimFit.mH%(mh)s.root' % vars(), [param], poiList + [param]) if paramScanRes is None: missing.append(param) continue pres["fit"] = paramScanRes[param][param] for p in poiList: pres.update({p: paramScanRes[param][p], 'impact_' + p: max(map(abs, (x - paramScanRes[ param][p][1] for x in (paramScanRes[param][p][2], paramScanRes[param][p][0]))))}) res['params'].append(pres) self.flush_queue() if self.args.approx == 'hesse': res['method'] = 'hesse' elif self.args.approx == 'robust': res['method'] = 'robust' else: res['method'] = 'default' jsondata = json.dumps( res, sort_keys=True, indent=2, separators=(',', ': ')) # print jsondata if self.args.output is not None: with open(self.args.output, 'w') as out_file: out_file.write(jsondata) if len(missing) > 0: print 'Missing inputs: ' + ','.join(missing)
def run_method(self): passthru = self.passthru mh = self.args.mass ws = self.args.datacard name = self.args.name if self.args.name is not None else '' named = [] if self.args.named is not None: named = self.args.named.split(',') # Put intercepted args back passthru.extend(['-m', mh]) passthru.extend(['-d', ws]) if self.args.setPhysicsModelParameters is not None: passthru.extend(['--setPhysicsModelParameters', self.args.setPhysicsModelParameters]) pass_str = ' '.join(passthru) paramList = [] if self.args.redefineSignalPOIs is not None: poiList = self.args.redefineSignalPOIs.split(',') else: poiList = utils.list_from_workspace(ws, 'w', 'ModelConfig_POI') # print 'Have nuisance parameters: ' + str(paramList) print 'Have POIs: ' + str(poiList) poistr = ','.join(poiList) if self.args.doInitialFit: if self.args.splitInitial: for poi in poiList: self.job_queue.append( 'combine -M MultiDimFit -n _initialFit_%(name)s_POI_%(poi)s --algo singles --redefineSignalPOIs %(poistr)s --floatOtherPOIs 1 --saveInactivePOI 1 -P %(poi)s %(pass_str)s' % vars()) else: self.job_queue.append( 'combine -M MultiDimFit -n _initialFit_%(name)s --algo singles --redefineSignalPOIs %(poistr)s %(pass_str)s' % vars()) self.flush_queue() sys.exit(0) #if self.args.doImpactNoCorr: #initialRes = utils.get_singles_results_grid('higgsCombine_initialFit_%(name)s.MultiDimFit.mH%(mh)s.root' % vars(), poiList, poiList) #else : initialRes = utils.get_singles_results('higgsCombine_initialFit_%(name)s.MultiDimFit.mH%(mh)s.root' % vars(), poiList, poiList) if len(named) > 0: paramList = named elif self.args.allPars: paramList = self.all_free_parameters(ws, 'w', 'ModelConfig', poiList) else: paramList = utils.list_from_workspace( ws, 'w', 'ModelConfig_NuisParams') if self.args.exclude is not None: exclude = self.args.exclude.split(',') paramList = [x for x in paramList if x not in exclude] print 'Have nuisance parameters: ' + str(len(paramList)) prefit = utils.prefit_from_workspace(ws, 'w', paramList, self.args.setPhysicsModelParameters) res = {} res["POIs"] = [] res["params"] = [] for poi in poiList: res["POIs"].append({"name": poi, "fit": initialRes[poi][poi]}) missing = [] for param in paramList: pres = {'name': param} pres.update(prefit[param]) #print 'Doing param ' + str(counter) + ': ' + param print 'Doing param ' + ': ' + param if self.args.doFits: if self.args.doImpactNoCorr: self.job_queue.append( 'combine -M MultiDimFit -n _paramFit_%(name)s_%(param)s --algo grid --points 3 --autoRange 1.5 --freezeParameters all --redefineSignalPOIs %(poistr)s -P %(param)s --floatOtherPOIs 1 --saveInactivePOI 1 %(pass_str)s' % vars()) #self.job_queue.append( #'combine -M MultiDimFit -n _paramFit_%(name)s_%(param)s --algo grid --points 3 --autoRange 1 --freezeParameters all --redefineSignalPOIs %(poistr)s -P %(param)s --floatOtherPOIs 1 --saveInactivePOI 1 %(pass_str)s' % vars()) else : self.job_queue.append( 'combine -M MultiDimFit -n _paramFit_%(name)s_%(param)s --algo impact --redefineSignalPOIs %(poistr)s -P %(param)s --floatOtherPOIs 1 --saveInactivePOI 1 %(pass_str)s' % vars()) else: if self.args.doImpactNoCorr: paramScanRes = utils.get_singles_results_grid('higgsCombine_paramFit_%(name)s_%(param)s.MultiDimFit.mH%(mh)s.root' % vars(), [param], poiList + [param]) else: paramScanRes = utils.get_singles_results('higgsCombine_paramFit_%(name)s_%(param)s.MultiDimFit.mH%(mh)s.root' % vars(), [param], poiList + [param]) if paramScanRes is None: missing.append(param) continue pres["fit"] = paramScanRes[param][param] print " paramScanRes = ", paramScanRes for p in poiList: pres.update({p: paramScanRes[param][p], 'impact_' + p: max(map(abs, (x - paramScanRes[ param][p][1] for x in (paramScanRes[param][p][2], paramScanRes[param][p][0]))))}) res['params'].append(pres) self.flush_queue() jsondata = json.dumps( res, sort_keys=True, indent=2, separators=(',', ': ')) # print jsondata if self.args.output is not None: with open(self.args.output, 'w') as out_file: out_file.write(jsondata) if len(missing) > 0: print 'Missing inputs: ' + ','.join(missing)