def createSamples(mode, analysis_dir, total_weight, qcd_from_same_sign, w_qcd_mssm_method, r_qcd_os_ss): hist_dict = {} sample_dict = {} samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists(analysis_dir=analysis_dir, mode=mode) if mode == 'mssm_control' or not 'mssm' in mode: all_samples = [s for s in all_samples if not 'ggH' in s.name and not 'bbH' in s.name] sample_dict['all_samples'] = all_samples if qcd_from_same_sign and not w_qcd_mssm_method: samples_qcdfromss = [s for s in all_samples if s.name != 'QCD'] samples_ss = copy.deepcopy(samples_qcdfromss) samples_ss = [s for s in samples_ss if not s.is_signal] for sample in samples_ss: if sample.name != 'data_obs': # Subtract background from data sample.scale = -1. qcd = HistogramCfg(name='QCD', var=None, cfgs=samples_ss, cut=None, total_scale=r_qcd_os_ss, lumi=int_lumi, weight=total_weight) samples_qcdfromss.append(qcd) sample_dict['samples_qcdfromss'] = samples_qcdfromss if w_qcd_mssm_method: sample_dict['samples_mssm_method'] = createQCDWHistograms(samples, hist_dict, int_lumi, weight=total_weight, r_qcd_os_ss=r_qcd_os_ss) return sample_dict, hist_dict
def createSamples(mode, analysis_dir, optimisation=False): samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir=analysis_dir, channel='tt', mode=mode, ztt_cut='(l2_gen_match == 5 && l1_gen_match == 5)', zl_cut= '(l1_gen_match < 6 && l2_gen_match < 6 && !(l1_gen_match == 5 && l2_gen_match == 5))', zj_cut='(l2_gen_match == 6 || l1_gen_match == 6)', signal_scale=1. if optimisation else 20.) return all_samples, samples
# cuts.append(Cut('inclusivemt40', inc_cut + '&& l1_charge != l2_charge && mt<40')) # MSSM Categories cuts.append( Cut('nobtag', inc_cut + '&& l1_charge != l2_charge && n_bjets==0 && mt<30')) # cuts.append(Cut('btag', inc_cut + '&& l1_charge != l2_charge && n_bjets>=1 && n_jets<=1 && mt<30')) # cuts.append(Cut('inclusivemtgr40', inc_cut + '&& l1_charge != l2_charge && mt>40')) # cuts.append(Cut('SS', inc_cut + '&& l1_charge == l2_charge')) # cuts.append(Cut('SS_muantiiso', inc_cut.replace('l1_reliso05<0.1', 'l1_reliso05>0.2') + '&& l1_charge == l2_charge')) # cuts.append(Cut('SSmt40', inc_cut + '&& l1_charge == l2_charge && mt<40')) # cuts.append(Cut('SShighmt40', inc_cut + '&& l1_charge == l2_charge && mt>40')) samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir=analysis_dir) def createDefaultGroups(plot): plot.Group('VV', [ 'VVTo2L2Nu', 'ZZTo2L2Q', 'WWTo1L1Nu2Q', 'WZTo1L3Nu', 'ZZTo4L', 'WZTo3L', 'WZTo2L2Q', 'WZTo1L1Nu2Q', 'T_tWch', 'TBar_tWch', 'TToLeptons_tch_powheg', 'TBarToLeptons_tch_powheg' ]) plot.Group('ZTT', [ 'ZTT', 'ZTT1Jets', 'ZTT2Jets', 'ZTT3Jets', 'ZTT4Jets', 'ZTTM150', 'ZTTM10' ]) plot.Group( 'ZJ', ['ZJ', 'ZJ1Jets', 'ZJ2Jets', 'ZJ3Jets', 'ZJ4Jets', 'ZJM150', 'ZJM10'])
# cuts['bveto_lowdeta'] = inc_cut + '&& l1_charge != l2_charge && n_bjets==0 && delta_eta_l1_l2<2.5' #cuts['inclusive'] = inc_cut + '&& l1_charge != l2_charge && mvis <= 40 && n_bjets >= 1' cuts = cuts.copy() print cuts qcd_from_same_sign = True analysis_dir = '/data1/steggema/em/06092016/MuEleRealMCPlusTau' samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists(analysis_dir, channel='em', ztt_cut='(l1_gen_match>2 && l2_gen_match>3)', zl_cut='l2_gen_match==99',zj_cut='l2_gen_match==99', data2016G=data2016G) if qcd_from_same_sign: samples_qcdfromss = [s for s in samples if s.name != 'QCD'] samples_ss = copy.deepcopy(samples_qcdfromss) scale = 2.0 for sample in samples_ss: sample.scale = scale if sample.name != 'data_obs': # Subtract background from data sample.scale = -scale qcd = HistogramCfg(name='QCD', var=None, cfgs=samples_ss, cut=inc_cut, lumi=lumi)
'T_tWch':'T_tWch', 'VVTo2L2Nu':'VVTo2L2Nu', 'W':'W', 'WWTo1L1Nu2Q':'WWTo1L1Nu2Q', 'WZTo1L1Nu2Q':'WZTo1L1Nu2Q', 'WZTo1L3Nu':'WZTo1L3Nu', 'WZTo2L2Q':'WZTo2L2Q', 'WZTo3L':'WZTo3L', 'Z':'ZL', 'ZZTo2L2Q':'ZZTo2L2Q', } int_lumi = 2094.2 # from Alexei's email analysis_dir = '/afs/cern.ch/user/s/steggema/work/public/mt/151215/' tree_prod_name = 'H2TauTauTreeProducerTauMu' data_dir = analysis_dir samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists(analysis_dir=analysis_dir, tree_prod_name=tree_prod_name) for sample in all_samples: setSumWeights(sample, directory='MCWeighter') mcRescalings = [] for sample in mcSamples: cmgName = cmgSampleTranslation[sample] mcRescalings.append(int_lumi*sampleDict[cmgName].xsec/sampleDict[cmgName].sumweights) ###################################### ### define plot information plotInfos = [PlotInfo(), PlotInfo(), PlotInfo()] ## Data plotInfos[0].markerStyle = 20
'l2_mt', 'pzeta_disc', 'pt_l1l2' ]) split_var = train_vars[0] clf0 = joblib.load('GradientBoostingClassifier_clf_stau_mtsum200_0.pkl') clf1 = joblib.load('GradientBoostingClassifier_clf_stau_mtsum200_1.pkl') out_dict = {} samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir=analysis_dir, channel='tt', mode='susy', ztt_cut='(l2_gen_match == 5 && l1_gen_match == 5)', zl_cut= '(l1_gen_match < 6 && l2_gen_match < 6 && !(l1_gen_match == 5 && l2_gen_match == 5))', zj_cut='(l2_gen_match == 6 || l1_gen_match == 6)', signal_scale=1.) trees_done = [] multicat = False for sample in all_samples: name = sample.name print 'Sample', name file_name = '/'.join( [sample.ana_dir, sample.dir_name, sample.tree_prod_name, 'tree.root'])
# cuts['OS_PU_0bjet_mZ'] = inc_cut + '&& l1_charge != l2_charge && abs(l1_eta) < 2.1 && mvis>70 && mvis<100 && n_bjets==0' # cuts['OS_PU_0bjet_vetoZ'] = inc_cut + '&& l1_charge != l2_charge && abs(l1_eta) < 2.1 && mvis>70 && (mvis>100 || mvis<80) && n_bjets==0' # cuts['OS_PU_2bjet'] = inc_cut + '&& l1_charge != l2_charge && abs(l1_eta) < 2.1 && n_bjets==2' # cuts['OS_PU_2bjet_vetoZ'] = inc_cut + '&& l1_charge != l2_charge && abs(l1_eta) < 2.1 && n_bjets==2 && (mvis>100 || mvis<80)' qcd_from_same_sign = False # -> Command line analysis_dir = '/data1/steggema/mm/300616/' tree_prod_name = 'H2TauTauTreeProducerMuMu' samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir, channel='mm', ztt_cut='(l1_gen_match == 4 && l2_gen_match == 4)', zl_cut='(l1_gen_match == 2 && l2_gen_match == 2)', zj_cut= '(l1_gen_match != l2_gen_match || (l1_gen_match != 4 && l1_gen_match != 2))' ) if qcd_from_same_sign: samples_qcdfromss = [s for s in samples if s.name != 'QCD'] samples_ss = copy.deepcopy(samples_qcdfromss) scale = 1.06 for sample in samples_ss: sample.scale = scale if sample.name != 'Data': # Subtract background from data sample.scale = -scale
def createSamples(mode, analysis_dir, total_weight, qcd_from_same_sign, w_qcd_mssm_method, r_qcd_os_ss): hist_dict = {} sample_dict = {} samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir=analysis_dir) if mode == 'mssm_control' or not 'mssm' in mode: all_samples = [ s for s in all_samples if not 'ggH' in s.name and not 'bbH' in s.name ] sample_dict['all_samples'] = all_samples if qcd_from_same_sign and not w_qcd_mssm_method: samples_qcdfromss = [s for s in all_samples if s.name != 'QCD'] samples_ss = copy.deepcopy(samples_qcdfromss) samples_ss = [s for s in samples_ss if not s.is_signal] for sample in samples_ss: if sample.name != 'data_obs': # Subtract background from data sample.scale = -1. qcd = HistogramCfg(name='QCD', var=None, cfgs=samples_ss, cut=None, total_scale=r_qcd_os_ss, lumi=int_lumi, weight=total_weight) samples_qcdfromss.append(qcd) sample_dict['samples_qcdfromss'] = samples_qcdfromss if w_qcd_mssm_method: w_names = ['W', 'W1Jets', 'W2Jets', 'W3Jets', 'W4Jets'] samples_non_w = [ s for s in all_samples if s.name != 'QCD' and s.name not in w_names and not s.is_signal ] samples_non_w_ss = copy.deepcopy(samples_non_w) samples_signal = [s for s in all_samples if s.is_signal] samples_w = copy.deepcopy( [s for s in all_samples if s.name in w_names]) samples_w_ss = copy.deepcopy(samples_w) # To calculate OS/SS ratio in inclusive W selection samples_w_incl_os = copy.deepcopy(samples_w) samples_w_incl_ss = copy.deepcopy(samples_w) # To calculate W scale factor samples_w_highmt_os = copy.deepcopy(samples_w) # Build a high MT region: OS - non-W/QCD OS - (SS - non-W/QCD SS) samples_non_w_highmt_os = copy.deepcopy(samples_non_w) samples_non_w_highmt_ss = copy.deepcopy(samples_non_w) for sample in samples_non_w_highmt_os: if sample.name != 'data_obs': # Subtract background from data sample.scale = -1. for sample in samples_non_w_highmt_ss: if sample.name != 'data_obs': sample.scale = -1. for sample in samples_non_w_ss: if sample.name != 'data_obs': sample.scale = -1. var_norm = VariableCfg(name='_norm_', drawname='1.', binning={ 'nbinsx': 5, 'xmin': -1.5, 'xmax': 3.5 }, unit='', xtitle='Normalisation') hist_dict['stacknow_highmt_os'] = HistogramCfg( name='HighMTOS', var=var_norm, cfgs=samples_non_w_highmt_os, cut=None, lumi=int_lumi, weight=total_weight) hist_dict['stacknow_highmt_ss'] = HistogramCfg( name='HighMTSS', var=var_norm, cfgs=samples_non_w_highmt_ss, cut=None, lumi=int_lumi, weight=total_weight) hist_dict['wjets_incl_os'] = HistogramCfg(name='WInclOS', var=var_norm, cfgs=samples_w_incl_os, cut=None, lumi=int_lumi, weight=total_weight) hist_dict['wjets_incl_ss'] = HistogramCfg(name='WInclSS', var=var_norm, cfgs=samples_w_incl_ss, cut=None, lumi=int_lumi, weight=total_weight) hist_dict['wjets_highmt_os'] = HistogramCfg(name='WHighMTOS', var=var_norm, cfgs=samples_w_highmt_os, cut=None, lumi=int_lumi, weight=total_weight) hist_dict['wjets'] = HistogramCfg(name='W', var=None, cfgs=samples_w, cut=None, lumi=int_lumi, weight=total_weight) hist_dict['wjets_ss'] = HistogramCfg(name='WSS', var=None, cfgs=samples_w_ss, cut=None, lumi=int_lumi, weight=total_weight) hist_dict['qcd'] = HistogramCfg(name='QCD', var=None, cfgs=samples_non_w_ss + [hist_dict['wjets_ss']], cut=None, total_scale=r_qcd_os_ss, lumi=int_lumi, weight=total_weight) sample_dict['samples_mssm_method'] = samples_non_w + [ hist_dict['wjets'], hist_dict['qcd'] ] + samples_signal return sample_dict, hist_dict
from CMGTools.H2TauTau.proto.plotter.Samples import createSampleLists from CMGTools.H2TauTau.proto.plotter.HistCreator import setSumWeights import pickle analysis_dir = '/afs/cern.ch/work/j/jsauvan/public/HTauTau/Trees/mt/151215/' tree_prod_name = 'H2TauTauTreeProducerTauMu' data_dir = analysis_dir samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists(analysis_dir=analysis_dir, tree_prod_name=tree_prod_name) for sample in all_samples: setSumWeights(sample, directory='MCWeighter') mc_info = {} mc_info['Directory'] = analysis_dir for sample in all_samples: if sample.name!='data_obs': mc_info[sample.name] = {'XSec':sample.xsec, 'SumWeights':sample.sumweights} pickle.dump(mc_info, open('mc_info.pck', 'wb'))
'T_tWch':'T_tWch', #'VVTo2L2Nu':'VVTo2L2Nu', 'W':'W', 'WWTo1L1Nu2Q':'WWTo1L1Nu2Q', #'WZTo1L1Nu2Q':'WZTo1L1Nu2Q', 'WZTo1L3Nu':'WZTo1L3Nu', #'WZTo2L2Q':'WZTo2L2Q', #'WZTo3LNu':'WZTo3LNu', 'Z':'ZL', 'ZZTo4L':'ZZTo4L', } int_lumi = 2094.2 # from Alexei's email analysis_dir = '/afs/cern.ch/work/j/jsauvan/public/HTauTau/Trees/mm/v20160220/' tree_prod_name = 'H2TauTauTreeProducerMuMu' data_dir = analysis_dir samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists(analysis_dir=analysis_dir, channel='mm') for sample in all_samples: #setSumWeights(sample, directory='MCWeighter') setSumWeights(sample) mcRescalings = [] for sample in mcSamples: cmgName = cmgSampleTranslation[sample] mcRescalings.append(int_lumi*sampleDict[cmgName].xsec/sampleDict[cmgName].sumweights) ###################################### ### define plot information plotInfos = [PlotInfo(), PlotInfo(), PlotInfo()] ## Data
from CMGTools.H2TauTau.proto.plotter.categories_TauTau import inc_sig_tau1_iso, inc_sig_tau2_iso, inc_sig_no_iso from CMGTools.H2TauTau.proto.plotter.categories_common import cat_J1, cat_VBF from CMGTools.H2TauTau.proto.plotter.HistCreator import createHistogram, setSumWeights from CMGTools.H2TauTau.proto.plotter.HistDrawer import HistDrawer from CMGTools.H2TauTau.proto.plotter.Variables import all_vars, getVars from CMGTools.H2TauTau.proto.plotter.Samples import createSampleLists from CMGTools.H2TauTau.proto.plotter.qcdEstimation import qcd_estimation from CMGTools.H2TauTau.proto.plotter.cut import Cut int_lumi = 2240. # from Alexei's email tree_prod_name = 'H2TauTauTreeProducerTauTau' analysis_dir = '/afs/cern.ch/work/m/manzoni/diTau2015/CMSSW_7_6_3/src/CMGTools/H2TauTau/cfgPython/tt/tt_14march2016' total_weight = 'weight' samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir=analysis_dir, channel='tt') myCut = namedtuple('myCut', ['name', 'cut']) cuts = [] # categories, do not include charge and iso cuts inc_cut = inc_sig_no_iso jet1_cut = inc_sig_no_iso & Cut(cat_J1) vbf_cut = inc_sig_no_iso & Cut(cat_VBF) # iso and charge cuts, need to have them explicitly for the QCD estimation iso_cut = inc_sig_tau1_iso & inc_sig_tau2_iso max_iso_cut = Cut( 'l1_byIsolationMVArun2v1DBoldDMwLT > 3.5 && l2_byIsolationMVArun2v1DBoldDMwLT > 3.5' ) iso_sideband_cut = (~iso_cut) & max_iso_cut
# inv_cuts = {} # for cut in cuts: # new_cuts[cut+'invmu'] = cuts[cut].replace('l1_reliso05<0.1', 'l1_reliso05>0.1') # new_cuts[cut+'invtau'] = cuts[cut].replace('l2_byCombinedIsolationDeltaBetaCorr3Hits>1.5', 'l2_byCombinedIsolationDeltaBetaCorr3Hits<1.5') # # cuts = inv_cuts # cuts = cuts.copy() # cuts.update(inv_cuts) # cuts.update(new_cuts) qcd_from_same_sign = True analysis_dir = '/afs/cern.ch/work/s/steggema/public/et/23112015/' samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir=analysis_dir, tree_prod_name='H2TauTauTreeProducerTauEle') samples = samples_mc + samples_data if qcd_from_same_sign: samples_qcdfromss = [s for s in samples if s.name != 'QCD'] samples_ss = copy.deepcopy(samples_qcdfromss) scale = 1.06 for sample in samples_ss: sample.scale = scale if sample.name != 'data_obs': # Subtract background from data sample.scale = -scale
'l2_reliso05>0.15') new_cuts[cut + 'inve'] = cuts[cut].replace('l1_reliso05<0.15', 'l1_reliso05>0.15') cuts = cuts.copy() #cuts.update(new_cuts) print cuts qcd_from_same_sign = True analysis_dir = '/afs/cern.ch/user/y/ytakahas/work/public/forHTT/em' samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir=analysis_dir, tree_prod_name='H2TauTauTreeProducerMuEle', ztt_cut='(l1_gen_match>2 && l2_gen_match>3)', zl_cut='l2_gen_match==99', zj_cut='l2_gen_match==99') if qcd_from_same_sign: samples_qcdfromss = [s for s in samples if s.name != 'QCD'] samples_ss = copy.deepcopy(samples_qcdfromss) # import pdb; pdb.set_trace() scale = 1.06 for sample in samples_ss: sample.scale = scale if sample.name != 'data_obs': # Subtract background from data
import copy import ROOT from Efficiency2DPlots import Efficiency2DPlot, PlotInfo from HistCreator import createHistograms, removeNegativeValues2D, checkFractionSums2D from CMGTools.H2TauTau.proto.plotter.PlotConfigs import HistogramCfg, VariableCfg, BasicHistogramCfg from CMGTools.H2TauTau.proto.plotter.Samples import createSampleLists from CMGTools.H2TauTau.proto.plotter.HistCreator import setSumWeights int_lumi = 2094.2 # from Alexei's email analysis_dir = '/afs/cern.ch/work/j/jsauvan/public/HTauTau/Trees/mt/151215/' samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists(analysis_dir=analysis_dir) for sample in all_samples: setSumWeights(sample, directory='MCWeighter') ## templates for histogram and file names histo_version = 'v_2_2016-02-09' histo_base_dir = '/afs/cern.ch/work/j/jsauvan/Projects/Htautau_Run2/Histos/StudyFakeRate/MuTau_Signal/' histo_file_template_name = histo_base_dir+'/{SAMPLE}/'+histo_version+'/h2tau_MuTau_{SAMPLE}.root' histo_template_name = 'hFakeRate_{SEL}_{VAR}' # samples to be used Name = "Name" DirName = "DirName" HistoDir = 'HistoDir' XSection = "XSection"
from CMGTools.H2TauTau.proto.plotter.HistCreator import setSumWeights from CMGTools.H2TauTau.proto.plotter.helper_methods import plotDataOverMCEff # total_weight = 'weight * ' + getPUWeight() only_stack = False total_weight = 'weight/weight_njet/weight_vertex' analysis_dir = '/data1/steggema/TauFRMuWeights/' int_lumi = 2301. samples_mc, samples_data, samples, all_samples, sampleDict = createSampleLists( analysis_dir=analysis_dir, channel='tau_fr', ztt_cut='(tau_gen_match == 5)', zl_cut='(tau_gen_match>=0 && tau_gen_match < 5)', zj_cut='(tau_gen_match == 6 || tau_gen_match<0)') cuts = {} inc_cut = '!veto_dilepton && !veto_thirdlepton && !veto_otherlepton && muon_reliso05<0.1 && muon_muonid_medium>0.5 && muon_pt>19. && abs(jet_eta)<2.3' samples = [ s for s in all_samples if s.name != 'TBar_tWch' and not 'SUSY' in s.name ] samples_mc = [s for s in samples if s.name != 'data_obs'] for s in samples: if s.name not in [