@@ -89,7 +89,7 @@ def passfailSF(f, region, sName, ptbin, mask, SF=1, SF_unc=0.1, muon=False):
8989 return 1 , 1
9090
9191
92- def shape_to_num (f , region , sName , ptbin , syst , mask , muon = False ):
92+ def shape_to_num (f , region , sName , ptbin , syst , mask , muon = False , bound = 0.5 ):
9393 _nom = get_templ (f , region , sName , ptbin , muon = muon )
9494 if _nom is None :
9595 return None
@@ -110,8 +110,10 @@ def shape_to_num(f, region, sName, ptbin, syst, mask, muon=False):
110110 else :
111111 _up_rate = _nom_rate
112112 _diff = np .abs (_up_rate - _nom_rate ) + np .abs (_down_rate - _nom_rate )
113- return 1.0 + _diff / (2. * _nom_rate )
114-
113+ magnitude = _diff / (2. * _nom_rate )
114+ if bound is not None :
115+ magnitude = min (magnitude , bound )
116+ return 1.0 + magnitude
115117
116118def get_templ (f , region , sample , ptbin , syst = None , muon = False ):
117119 hist_name = '{}_{}' .format (sample , region )
@@ -207,9 +209,12 @@ def dummy_rhalphabet(pseudo,
207209 sys_shape_dict ['pileup_weight' ] = rl .NuisanceParameter ('CMS_gghcc_PU_{}' .format (year ), _shape_type )
208210 sys_shape_dict ['HEM18' ] = rl .NuisanceParameter ('CMS_gghcc_HEM_{}' .format (year ), _shape_type )
209211 sys_shape_dict ['L1Prefiring' ] = rl .NuisanceParameter ('CMS_gghcc_L1prefire_{}' .format (year ), _shape_type )
212+ sys_shape_dict ['scalevar_7pt' ] = rl .NuisanceParameter ('CMS_gghcc_th_scale7pt' , _shape_type )
213+ sys_shape_dict ['scalevar_3pt' ] = rl .NuisanceParameter ('CMS_gghcc_th_scale3pt' , _shape_type )
214+
210215 for sys in ['btagEffStat' , 'btagWeight' , 'd1kappa_EW' , 'Z_d2kappa_EW' , 'Z_d3kappa_EW' , 'd1K_NLO' , 'd2K_NLO' , 'd3K_NLO' ]:
211216 sys_shape_dict [sys ] = rl .NuisanceParameter ('CMS_gghcc_{}_{}' .format (sys , year ), _shape_type )
212-
217+
213218 sys_ddxeff = rl .NuisanceParameter ('CMS_eff_cc_{}' .format (year ), 'lnN' )
214219 sys_ddxeffbb = rl .NuisanceParameter ('CMS_eff_bb_{}' .format (year ), 'lnN' )
215220 sys_ddxeffw = rl .NuisanceParameter ('CMS_eff_w_{}' .format (year ), 'lnN' )
@@ -226,7 +231,8 @@ def dummy_rhalphabet(pseudo,
226231 sys_scale = rl .NuisanceParameter ('CMS_gghcc_scale_{}' .format (year ), 'shape' )
227232 sys_smear = rl .NuisanceParameter ('CMS_gghcc_smear_{}' .format (year ), 'shape' )
228233
229- sys_Hpt = rl .NuisanceParameter ('CMS_gghcc_ggHpt' , 'lnN' )
234+ # sys_ggHpt = rl.NuisanceParameter('CMS_gghcc_th_scale7pt', 'lnN')
235+ # sys_VBFpt = rl.NuisanceParameter('CMS_gghcc_th_scale3pt', 'lnN')
230236
231237 # Import binnings
232238 # Hidden away to be available to other functions
@@ -492,16 +498,21 @@ def smorph(templ):
492498 sys_names = [
493499 'JES' , 'JER' , 'UES' , 'jet_trigger' , 'btagEffStat' , 'btagWeight' , 'pileup_weight' ,
494500 'Z_d2kappa_EW' , 'Z_d3kappa_EW' , 'd1kappa_EW' , 'd1K_NLO' , 'd2K_NLO' , 'd3K_NLO' ,
495- 'L1Prefiring' ,
501+ 'L1Prefiring' ,
502+ 'scalevar_7pt' , 'scalevar_3pt' ,
496503 ]
497504 for sys_name in sys_names :
498505 if (("NLO" in sys_name ) or ("EW" in sys_name )) and not sName in ['zbb' , 'zcc' , 'zqq' , 'wcq' , 'wqq' ]:
499506 continue
500507 if ("Z_d" in sys_name ) and sName not in ['zbb' , 'zcc' , 'zqq' ]:
501508 continue
509+ if sys_name == 'scalevar_7pt' and sName not in ['hcc' , 'hbb' ]:
510+ continue
511+ if sys_name == 'scalevar_3pt' and sName not in ['vbfhcc' , 'vbfhbb' , 'whcc' , 'zhcc' , 'whbb' , 'zhbb' ]:
512+ continue
502513 if opts .fast == 0 : # Convert to lnN for faster fitting
503514 _sys_ef = shape_to_num (f , region , sName , ptbin ,
504- sys_name , mask )
515+ sys_name , mask , bound = None if 'scalevar' not in sys_name else 0.25 )
505516 if _sys_ef is None :
506517 continue
507518 sample .setParamEffect (sys_shape_dict [sys_name ], _sys_ef )
@@ -523,14 +534,6 @@ def smorph(templ):
523534 if badtemp_ma (_up [0 ]) or badtemp_ma (_dn [0 ]):
524535 print ("Skipping {} for sample {}, shape would be empty" .format (sys_name , sName ))
525536 continue
526- # if ptbin == 1:
527- # sys.exit()
528- # if sName == 'zll' and sys_name == 'btagEffStat':
529- # continue
530- # if sName == 'tqq' and sys_name == 'btagEffStat':
531- # print("XXXX", np.sum(_up[0]), np.sum(_dn[0]))
532- # print(_up[0])
533- # print(_dn[0])
534537 sample .setParamEffect (sys_shape_dict [sys_name ], _up [0 ], _dn [0 ])
535538 # One sided
536539 for sys_name in ['HEM18' ]:
@@ -584,8 +587,10 @@ def smorph(templ):
584587 SF [year ]['W_SF' ], SF [year ]['W_SF_ERR' ])
585588 sample .scale (_sf )
586589 sample .setParamEffect (sys_ddxeffw , _sfunc )
587- if sName == 'hcc' :
588- sample .setParamEffect (sys_Hpt , 1.2 )
590+ # if sName == 'hcc':
591+ # sample.setParamEffect(sys_ggHpt, 1.2)
592+ # if sName == 'hcc':
593+ # sample.setParamEffect(sys_VBFpt, 1.2)
589594
590595 # Scale and Smear
591596 mtempl = AffineMorphTemplate (templ )
0 commit comments