def create_samples(self): print "total samples:",len(sample_names) for index in range(len(sample_names)): sample_name = sample_names[index] sample = Sample(sample_name, sample_colors[index]) file_name = input_dir+sample_name+"_combined.root" yields_dic = self.read_hist(file_name) print "Sample:", sample_name+";", if "data" in sample_name: sample.setData() self.data_sample = sample for region in regions: nevts, nerror = yields_dic[region] sample.buildHisto([nevts], region, "cuts", 0.5) print region,str(round(nevts,3))+";", print continue sample.setNormByTheory() for region in regions: nevts, nerror = yields_dic[region] nevts *= weight nerror *= weight if "Dijets" in sample_name and "SR" in region: if self.cut == 10: nevts = 4.07 nerror = math.sqrt(nevts) if self.cut == 14: nevts = 2.42 nerror = math.sqrt(nevts) sample.buildHisto([nevts], region, "cuts", 0.5) sample.buildStatErrors([nerror], region, "cuts") print region,str(round(nevts,3))+";", print #sample.setStatConfig(True) sample.setFileList([in_file_path]) ## add systematic?? sample.addSystematic(Systematic(sample_name+"_stats",\ configMgr.weights, 1.2, 0.8, "user", "userOverallSys")) #for systematic in self.sys_common: #sample.addSystematic(systematic) self.set_norm_factor(sample)
print 'Setting up exclusion fit!' # sig_sample_list=['sig_100', 'sig_200', 'sig_300', 'sig_400', 'sig_500', # 'sig_600', 'sig_700', 'sig_800', 'sig_900', 'sig_1000'] sig_sample_list=['sig_400', 'sig_500', 'sig_600', 'sig_700', 'sig_800', 'sig_900', 'sig_1000', 'sig_1100'] # sig_sample_list=['sig_900'] sig_samples = [] for sig in sig_sample_list: print 'setting up signal sample: ', sig exclusion_sr_config = configMgr.addFitConfigClone(background_config, "Sig_excl_%s" % sig) sig_sample = Sample(sig, kViolet+5) sig_sample.setStatConfig(use_stat) sig_sample.setFileList(sig_files) sig_sample.setNormByTheory() sig_sample.setNormFactor("mu_SIG", 1., 0., 5.) sig_sample.weights = [nominal_weight_sig] # add baseline systematics to signal samples addSystematic([sig_sample], (btag_sf_uncert_sig_list + jes_uncert_list + [jer_uncert])) # apply the correct cross section systematic to the signal # sample if it is available if sig in signal_xsec_rel_uncert: this_signal_xsec_uncert = Systematic(
# ************** # Fit config instance exclusionFitConfig = configMgr.addTopLevelXML("Exclusion") meas = exclusionFitConfig.addMeasurement(name="NormalMeasurement", lumi=1.0, lumiErr=0.039) meas.addPOI("mu_SIG") # Samples exclusionFitConfig.addSamples([topSample, wzSample, dataSample]) # Systematics exclusionFitConfig.getSample("Top").addSystematic(topKtScale) exclusionFitConfig.getSample("WZ").addSystematic(wzKtScale) exclusionFitConfig.addSystematic(jes) # Channel srBin = exclusionFitConfig.addChannel("met/meff2Jet", ["SR"], 6, 0.1, 0.7) srBin.useOverflowBin = True srBin.useUnderflowBin = True exclusionFitConfig.setSignalChannels([srBin]) sigSample = Sample("SM_GG_onestepCC_425_385_345", kPink) sigSample.setFileList(["samples/tutorial/SusyFitterTree_p832_GG-One-Step_soft_v1.root"]) sigSample.setNormByTheory() sigSample.setNormFactor("mu_SIG", 1.0, 0.0, 5.0) exclusionFitConfig.addSamples(sigSample) exclusionFitConfig.setSignalSample(sigSample) # 2nd cloned-copy just to accomodate -l option... exclusionFitClone = configMgr.addTopLevelXMLClone(exclusionFitConfig, "ExclusionFitClone")
1.0 - theoSysWNumber, "user", "userOverallSys") #diboson theoSysDiboson = Systematic("theoSysDiboson", configMgr.weights, 1.5, 0.5, "user", "userOverallSys") #photon systematics in SR for Z gammaToZSyst = Systematic("gammaToZSyst", configMgr.weights, 1.25, 0.75, "user", "userOverallSys") #------------------------------------------- # List of samples and their plotting colours #------------------------------------------- dibosonSample = Sample("Diboson", kRed + 3) dibosonSample.setTreeName("Diboson_SRAll") dibosonSample.setFileList(dibosonFiles) dibosonSample.setStatConfig(useStat) dibosonSample.addSystematic(theoSysDiboson) topSample = Sample("Top", kGreen - 9) topSample.setTreeName("Top_SRAll") topSample.setNormFactor("mu_Top", 1., 0., 500.) topSample.setFileList(topFiles) topSample.setStatConfig(useStat) qcdSample = Sample("MCMultijet", kOrange + 2) qcdSample.setTreeName("QCD_SRAll") qcdSample.setNormFactor("mu_MCMultijet", 1., 0., 500.) qcdSample.setFileList(qcdFiles) qcdSample.setStatConfig(useStat)
lumiErr=0.039) meas.addPOI("mu_SIG") # Samples exclusionFitConfig.addSamples([topSample, wzSample, dataSample]) # Systematics exclusionFitConfig.getSample("Top").addSystematic(topKtScale) exclusionFitConfig.getSample("WZ").addSystematic(wzKtScale) exclusionFitConfig.addSystematic(jes) # Channel srBin = exclusionFitConfig.addChannel("met/meff2Jet", ["SR"], 6, 0.1, 0.7) srBin.useOverflowBin = True srBin.useUnderflowBin = True exclusionFitConfig.addSignalChannels([srBin]) sigSample = Sample(sig, kPink) sigSample.setFileList( ["samples/tutorial/SusyFitterTree_p832_GG-One-Step_soft_v1.root"]) sigSample.setNormByTheory() sigSample.setNormFactor("mu_SIG", 1., 0., 5.) #sigSample.addSampleSpecificWeight("0.001") exclusionFitConfig.addSamples(sigSample) exclusionFitConfig.setSignalSample(sigSample) # Cosmetics srBin.minY = 0.0001 srBin.maxY = 80.
log.info("Wait 3 seconds for you to panic if these settings are wrong") wait(3) log.info("No panicking detected, continuing...") ####################################################################### # List of samples and their plotting colours ####################################################################### #-------------------------- # Diboson #-------------------------- # NB: note that theoSys on diboson are applied on the level of the region definitions, # since we have one for the SR and one for the CR dibosonSample = Sample(zlFitterConfig.dibosonSampleName, kRed+3) dibosonSample.setTreeName("Diboson_SRAll") dibosonSample.setFileList(dibosonFiles) dibosonSample.setStatConfig(zlFitterConfig.useStat) #-------------------------- # QCD #-------------------------- qcdSample = Sample(zlFitterConfig.qcdSampleName, kOrange+2) if zlFitterConfig.useDDQCDsample:#normWeight is 0 => remove it qcdSample.setTreeName("Data_SRAll") else : qcdSample.setTreeName("QCD_SRAll") qcdSample.setNormFactor("mu_"+zlFitterConfig.qcdSampleName, 1., 0., 50000000.) qcdSample.setFileList(qcdFiles) qcdSample.setStatConfig(zlFitterConfig.useStat) qcdWeight = 1
ssChannel.addDiscoverySamples(["SS"], [1.], [0.], [100.], [kMagenta]) discovery.addSignalChannels([ssChannel]) dataSample.buildHisto([26.], "SS", "cuts", 0.5) #----------------------------- # Exclusion fits (1-step simplified model in this case) #----------------------------- if doExclusion: sigSamples = ["SM_GG_onestepCC_425_385_345"] dataSample.buildHisto([1., 6., 16., 3., 0.], "SS", "metmeff2Jet", 0.2, 0.1) for sig in sigSamples: myTopLvl = configMgr.addTopLevelXMLClone(bkt, "Sig_%s" % sig) sigSample = Sample(sig, kPink) sigSample.setFileList(sigFiles) sigSample.setNormByTheory() sigSample.setStatConfig(useStat) sigSample.setNormFactor("mu_SIG", 1., 0., 5.) myTopLvl.addSamples(sigSample) myTopLvl.setSignalSample(sigSample) # s1l2j using met/meff if doValidation: mm2J = myTopLvl.getChannel("met/meff2Jet", ["SS"]) iPop = myTopLvl.validationChannels.index("SS_metmeff2Jet") myTopLvl.validationChannels.pop(iPop) else: mm2J = myTopLvl.addChannel("met/meff2Jet", ["SS"], 5, 0.2, 0.7) mm2J.useOverflowBin = True mm2J.addSystematic(jes)
mcSamples = [ higgsSample, zvSample, wwSample, dataSample ] bkgFiles = [] topFiles = [] zjetsFiles = [] bkgFiles.append( userOpts.bkgFile ) topFiles.append( topFile ) zjetsFiles.append( zjetsFile ) for sample in mcSamples : # assign higgs, zv, ww, and data to HFT_BG8TeV sample.setFileList(bkgFiles) # assign top and zjets to their specific files topSample.setFileList(topFiles) zjetsSample.setFileList(zjetsFiles) ############################################################## ## Configure the selection ## ############################################################## userPrint("Configuring selection") configMgr = selectionConfig(configMgr, userOpts.slepLimitN) ############################################################## ## Configure weight ## ############################################################## userPrint("Specifying Weight") configMgr.weights = ["eventweight"] ##############################################################
sampleInfo = sampleDict.get(sampleID, None) if sampleInfo: sampleType = sampleInfo["phyType"] #infer type from dataset name if not sampleType: sampleType = ssUtil.guessSampleType(fName) if sampleType == "wgamma": wgammaFiles.append(fName) elif sampleType == "diboson": dibosonFiles.append(fName) elif sampleType == "triboson": tribosonFiles.append(fName) elif sampleType == "topX": topXFiles.append(fName) elif sampleType == "higgs": higgsFiles.append(fName) elif sampleType == "data": dataFiles.append(fName) else: print "Skipped unrecognized sample : %s" % fName wgammaSample.setFileList(wgammaFiles) dibosonSample.setFileList(dibosonFiles) tribosonSample.setFileList(tribosonFiles) topXSample.setFileList(topXFiles) higgsSample.setFileList(higgsFiles) qFlipSample.setFileList(dataFiles) fLepSample.setFileList(dataFiles) dataSample.setFileList(dataFiles) for aSample in [ wgammaSample, dibosonSample, tribosonSample, topXSample, higgsSample ]: aSample.setNormByTheory(True) aSample.setStatConfig(True) for aSys in reconSys:
theoSysW = Systematic("theoSysW", configMgr.weights, 1.0+theoSysWNumber,1.0-theoSysWNumber, "user","userOverallSys") #diboson theoSysDiboson = Systematic("theoSysDiboson", configMgr.weights, 1.5,0.5, "user","userOverallSys") #photon systematics in SR for Z gammaToZSyst = Systematic("gammaToZSyst", configMgr.weights, 1.25,0.75, "user","userOverallSys") #------------------------------------------- # List of samples and their plotting colours #------------------------------------------- dibosonSample = Sample("Diboson",kRed+3) dibosonSample.setTreeName("Diboson_SRAll") dibosonSample.setFileList(dibosonFiles) dibosonSample.setStatConfig(useStat) dibosonSample.addSystematic(theoSysDiboson) topSample = Sample("Top",kGreen-9) topSample.setTreeName("Top_SRAll") topSample.setNormFactor("mu_Top",1.,0.,50000.) topSample.setFileList(topFiles) topSample.setStatConfig(useStat) qcdSample = Sample("MCMultijet",kOrange+2) qcdSample.setTreeName("QCD_SRAll") qcdSample.setNormFactor("mu_MCMultijet",1.,0.,500.) qcdSample.setFileList(qcdFiles) qcdSample.setStatConfig(useStat)
ssChannel.addSystematic(jes) ssChannel.addDiscoverySamples(["SS"],[1.],[0.],[100.],[kMagenta]) discovery.setSignalChannels([ssChannel]) #----------------------------- # Exclusion fits (1-step simplified model in this case) #----------------------------- if doExclusion: sigSamples=["SM_GG_onestepCC_425_385_345"] for sig in sigSamples: myTopLvl = configMgr.addTopLevelXMLClone(bkt,"Sig_%s"%sig) sigSample = Sample(sig,kPink) sigSample.setFileList(sigFiles) sigSample.setNormByTheory() sigSample.setStatConfig(useStat) sigSample.setNormFactor("mu_SIG",1.,0.,5.) myTopLvl.addSamples(sigSample) myTopLvl.setSignalSample(sigSample) # s1l2j using met/meff if doValidation: mm2J = myTopLvl.getChannel("met/meff2Jet",["SS"]) iPop=myTopLvl.validationChannels.index("SS_metmeff2Jet") myTopLvl.validationChannels.pop(iPop) else: mm2J = myTopLvl.addChannel("met/meff2Jet",["SS"],5,0.2,0.7) mm2J.useOverflowBin=True
# ---------------------------------------------------------------- # doToys = userOpts.doToys hasHippo = doToys and 'hippo' in userOpts.gridForToys hasSig = doToys and signame in userOpts.gridForToys if not doToys or hasHippo or hasSig: exclusion = configMgr.addFitConfigClone(tlx,'TopLvlXML_Exclusion_%s'%s) print '!!!--- in LOOP ', s sigSample = Sample(s, kRed) sigSample.setStatConfig(useStat) if userOpts.splitMCSys: sigSample.addSystematic(sysObj.AR_mcstat_SIG) sigUncert = userOpts.sigUncert sigSample.setFileList([userOpts.sigFile]) if sigUncert == "up": sigSample.setWeights(("eventweight","syst_XSUP","1.0")) elif sigUncert == "down": sigSample.setWeights(("eventweight","syst_XSDOWN","1.0")) # TODO sigSample.addSystematic(sysObj.AR_all_JES_MC) sigSample.addSystematic(sysObj.AR_all_JER_MC) # sigSample.addSystematic(sysObj.AR_all_JVF_MC) sigSample.addSystematic(sysObj.AR_all_TES_MC) sigSample.addSystematic(sysObj.AR_all_BJET_MC) sigSample.addSystematic(sysObj.AR_all_CJET_MC) sigSample.addSystematic(sysObj.AR_all_BMISTAG_MC) sigSample.addSystematic(sysObj.AR_all_EER_MC) sigSample.addSystematic(sysObj.AR_all_EESLOW_MC) sigSample.addSystematic(sysObj.AR_all_EESMAT_MC)
higgsSample, dataSample, ] # wjets covered by fakes # all_samples = [ ttbarSample, vvDFSample, vvSFSample, stSample, wjetsSample, zjetsSample, fakeSample, ttvSample, dataSample ] # all_samples = [ ttbarSample, vvSample, stSample, wjetsSample, zjetsSample, dataSample ] # ttbar skip # samples = [ vvSample, stSample, wjetsSample, zjetsSample, dataSample ] # samples_noVV = [ ttbarSample, stSample, wjetsSample, zjetsSample ]#, dataSample ] samples_mc_noVV = [ttbarSample, stSample, zjetsSample, ttvSample, higgsSample] # samples_mc_noVV = [ttbarSample, stSample, wjetsSample, zjetsSample, ttvSample] samples_data = [dataSample] # samples = [ ttbarSample, vvSample, stSample, wjetsSample, zjetsSample, dataSample ] for s in samples_mc_noVV: s.setFileList([mc_file]) userPrint(" --> Sample : %s at %s" % (s.name, mc_file)) vvDFSample.setFileList([vv_df_file]) userPrint(" --> Sample : %s at %s" % (vvDFSample.name, vv_df_file)) vvSFSample.setFileList([vv_sf_file]) userPrint(" --> Sample : %s at %s" % (vvSFSample.name, vv_sf_file)) fakeSample.setFileList([fake_file]) userPrint(" --> Sample : %s at %s" % (fakeSample.name, fake_file)) dataSample.setFileList([data_file]) # dysample.setFileList([drellyan_file]) # userPrint(" --> Sample : %s at %s"%(dysample.name, drellyan_file)) ########################################## ## split MC sys --> need to look this one up again runOptions.setSplitMCsys(False) ##########################################