import numpy as np import operator # make predictions to be used with keras.predict def predict_inputs( event, sample, jet_lstm = False): flat_variables = np.array([[getattr( event, mva_variable) for mva_variable, _ in mva_variables]]) if jet_lstm: lstm_jets_maxN = 10 #remove after retraining jet_vector_var = mva_vector_variables["mva_Jet"] jets = mva_vector_variables["mva_Jet"]["func"](event,sample=None) jets = [ [ operator.itemgetter(varname)(jet) for varname in lstm_jetVarNames] for jet in jets[:lstm_jets_maxN] ] # zero padding jets += [ [0.]*len(lstm_jetVarNames)]*(max(0, lstm_jets_maxN-len(jets))) jets = np.array([jets]) return [ flat_variables, jets ] else: return flat_variables #define training samples for multiclassification from tWZ.samples.nanoTuples_RunII_nanoAODv6_private_postProcessed import * #use only Summer16 training_samples = [ Summer16.TWZ_NLO_DR, Summer16.TTZ ] assert len(training_samples)==len(set([s.name for s in training_samples])), "training_samples names are not unique!" # training selection from tWZ.Tools.cutInterpreter import cutInterpreter selectionString = cutInterpreter.cutString( 'trilepT-onZ1-btag1-njet3p' ) # selectionString = cutInterpreter.cutString( 'trilepT-minDLmass12-onZ1-njet4p-btag1' )
args = argParser.parse_args() #Logger import tWZ.Tools.logger as logger logger = logger.get_logger("INFO", logFile=None) import Analysis.Tools.logger as logger_an logger_an = logger_an.get_logger("INFO", logFile=None) if args.plot_directory == None: args.plot_directory = plot_directory if args.selection == None: selectionString = "(1)" else: selectionString = cutInterpreter.cutString(args.selection) # Samples #from tWZ.samples.nanoTuples_RunII_nanoAODv6_private_postProcessed import * from tWZ.samples.nanoTuples_Summer16_nanoAODv6_private_postProcessed import * signal = WZ #signal.reduceFiles(factor=20) #TTZ.reduceFiles(factor=3) # TTZ backgrounds = [TTZ] samples = backgrounds + [signal] for sample in samples: sample.setSelectionString(selectionString)
#elif args.era == "Run2018": # mc = [Autumn18.TWZ_NLO_DR, Autumn18.TTZ, Autumn18.TTX_rare, Autumn18.TZQ, Autumn18.WZ, Autumn18.triBoson, Autumn18.ZZ, Autumn18.nonprompt_3l] #elif args.era == "RunII": # mc = [TWZ_NLO_DR, TTZ, TTX_rare, TZQ, WZ, triBoson, ZZ, nonprompt_3l] bins = [ (2.5,5, -1.2, 1.2), (5.,10., -1.2, 1.2), (10.,999., -1.2, 1.2), ] triggerSelection = '('+"||".join(triggers)+')' leptonSelection = 'n%s_looseHybridIso==1'%args.mode jetSelection = 'Sum$(Jet_pt>40&&abs(Jet_eta)<2.4&&JetGood_cleaned_%s_looseHybridIso)>=1'%args.mode if args.selection: selection = cutInterpreter.cutString(args.selection).replace("mT", "%s_looseHybridIso_mT"%args.mode) else: selection = "(1)" max_events = -1 if args.small: for sample in [data_sample] + mc: sample.normalization = 1. #sample.reduceFiles( factor = 10 ) sample.reduceFiles( to=3 ) #sample.scale /= sample.normalization max_events = 30000 # Text on the plots tex = ROOT.TLatex() tex.SetNDC()
mc[1].style = styles.fillStyle(mc[1].color) else: for sample in mc: sample.style = styles.fillStyle(sample.color) for sample in mc: sample.read_variables = read_variables_MC sample.setSelectionString([getLeptonSelection(mode)]) sample.weight = lambda event, sample: event.reweightBTag_SF*event.reweightPU*event.reweightL1Prefire*event.reweightTrigger#*event.reweightLeptonSF if args.shape: stack = Stack([mc[1]], [mc[0]]) else: stack = Stack(mc) # Use some defaults Plot.setDefaults(stack = stack, weight = staticmethod(weight_), selectionString = cutInterpreter.cutString(args.selection)) ################################################################################ # Now define the plots plots = [] plots.append(Plot( name = "N_GenJets_b", texX = 'Number of b GenJets', texY = 'Number of Events', attribute = lambda event, sample: event.nbjet, binning=[11,-0.5,10.5], )) plots.append(Plot( name = "N_GenJets_light",
for sample in mc: sample.read_variables = read_variables_MC sample.weight = lambda event, sample: event.reweightBTag_SF * event.reweightPU * event.reweightL1Prefire * event.reweightTrigger #*event.reweightLeptonSF #yt_TWZ_filter.scale = lumi_scale * 1.07314 if not args.noData: stack = Stack(mc, data_sample) else: stack = Stack(mc) # Use some defaults Plot.setDefaults(stack=stack, weight=staticmethod(weight_), selectionString="(" + cutInterpreter.cutString(args.selection) + ")&&(" + getLeptonSelection(mode) + ")") plots = [] plots.append( Plot( name='yield', texX='', texY='Number of Events', attribute=lambda event, sample: 0.5 + i_mode, binning=[4, 0, 4], )) for name, has_lstm, model in models: #print has_lstm, flat_variables, lstm_jets
lstm_jets_maxN = 10 #remove after retraining jet_vector_var = mva_vector_variables["mva_Jet"] jets = mva_vector_variables["mva_Jet"]["func"](event, sample=None) jets = [[ operator.itemgetter(varname)(jet) for varname in lstm_jetVarNames ] for jet in jets[:lstm_jets_maxN]] # zero padding jets += [[0.] * len(lstm_jetVarNames)] * (max( 0, lstm_jets_maxN - len(jets))) jets = np.array([jets]) return [flat_variables, jets] else: return flat_variables #define training samples for multiclassification from tWZ.samples.nanoTuples_RunII_nanoAODv6_private_postProcessed import * #use only Summer16 training_samples = [Summer16.TWZ_NLO_DR, Summer16.TTZ] assert len(training_samples) == len(set( [s.name for s in training_samples])), "training_samples names are not unique!" # training selection from tWZ.Tools.cutInterpreter import cutInterpreter # selectionString = cutInterpreter.cutString( 'trilepT-onZ1-btag1-njet3p' ) selectionString = cutInterpreter.cutString( 'trilepT-minDLmass12-onZ1-njet4p-deepjet1')
] weightstring = "*".join(nominalMCWeights) lumistring = "(" + "+".join( ["%s*(year==%s)" % (l / 1000, y) for (y, l) in lumi_year.iteritems()]) + ")" weightstring += "*" + lumistring weightstring_data = "weight" Nevents = {} for sample in mc: yieldlist = [ sample.getYieldFromDraw(selectionString=None, weightString=weightstring)['val'], sample.getYieldFromDraw( selectionString=cutInterpreter.cutString("trilepT"), weightString=weightstring)['val'], sample.getYieldFromDraw(selectionString=cutInterpreter.cutString( "trilepT-minDLmass12"), weightString=weightstring)['val'], sample.getYieldFromDraw(selectionString=cutInterpreter.cutString( "trilepT-minDLmass12-onZ1"), weightString=weightstring)['val'], sample.getYieldFromDraw(selectionString=cutInterpreter.cutString( "trilepT-minDLmass12-onZ1-njet4p"), weightString=weightstring)['val'], sample.getYieldFromDraw(selectionString=cutInterpreter.cutString( "trilepT-minDLmass12-onZ1-njet4p-btag1"), weightString=weightstring)['val'] ] Nevents[sample.name] = yieldlist
# loop over modes for mode in modes: yields[mode] = {} data_sample.texName = "data" data_sample.setSelectionString([getLeptonSelection(mode)]) data_sample.name = "data" data_sample.style = styles.errorStyle(ROOT.kBlack) lumi_scale = data_sample.lumi/1000 for sample in mc: sample.style = styles.fillStyle(sample.color) for sample in mc: sample.setSelectionString([getLeptonSelection(mode)]) # Use some defaults Plot.setDefaults( selectionString = cutInterpreter.cutString(args.selection) ) # if we're running a variation specify if args.variation is not None: selectionModifier = variations[args.variation]['selectionModifier'] mc_weight = MC_WEIGHT( variation = variations[args.variation], returntype='func') else: selectionModifier = None mc_weight = None # Stack stack_mc = Stack( mc ) stack_data = Stack( data_sample ) ############################################################################