def _process(args): default_config['jetType'] = args.jet_type channel = args.channel default_config['channel'] = channel year = int(args.year) default_config['year'] = year if year in (2017, 2018): args.weight_file = 'samples/xsec_2017.conf' if year == 2018: # FIXME: Need to update JEC when running on NanoAODv5 default_config['jec'] = True # args.batch = True basename = os.path.basename(args.outputdir) + '_' + args.jet_type + '_' + channel + '_' + str(year) args.outputdir = os.path.join(os.path.dirname(args.outputdir), basename, 'data' if args.run_data else 'mc') args.jobdir = os.path.join('jobs_%s' % basename, 'data' if args.run_data else 'mc') if args.run_data: args.datasets = '%s/%s_%d_DATA.yaml' % (args.sample_dir, channel, year) args.extra_transfer = os.path.expandvars('$CMSSW_BASE/src/PhysicsTools/NanoHRTTools/data/JSON/%s' % golden_json[year]) args.json = golden_json[year] else: args.datasets = '%s/%s_%d_MC.yaml' % (args.sample_dir, channel, year) if args.jet_type == 'ak15': args.cut = cut_dict_ak15[channel] else: args.cut = cut_dict_ak8[channel] args.imports = [('PhysicsTools.NanoHRTTools.producers.HeavyFlavSFTreeProducer', 'heavyFlavSFTreeFromConfig')] if not args.run_data: args.imports.extend([ ('PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer', 'puAutoWeight_2017' if year == 2017 else 'puWeight_%d' % year), ]) # data, or just nominal MC if args.run_data or not args.run_syst: cfg = copy.deepcopy(default_config) if args.run_data: cfg['data'] = True run(args, configs={hrt_cfgname: cfg}) return # MC for syst. if args.run_syst and not args.run_data: # nominal w/ PDF/Scale wegihts logging.info('Start making nominal trees with PDF/scale weights...') syst_name = 'LHEWeight' opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) opts.branchsel_out = 'keep_and_drop_output_LHEweights.txt' run(opts, configs={hrt_cfgname: cfg}) # JES up/down for variation in ['up', 'down']: syst_name = 'jes_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jes'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg}) # JER up/down for variation in ['up', 'down']: syst_name = 'jer_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jer'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg})
def _process(args): default_config['jetType'] = args.jet_type if args.run_tagger: default_config['run_tagger'] = True if args.jet_type == 'ak8': raise NotImplementedError('No training for ak8') logging.info('Will run tagger version(s): %s' % ','.join(default_config['tagger_versions'])) if args.run_mass_regression: default_config['run_mass_regression'] = True if args.jet_type == 'ak8': default_config['mass_regression_versions'] = [ 'ak8V01a', 'ak8V01b', 'ak8V01c' ] logging.info('Will run mass regression version(s): %s' % ','.join(default_config['mass_regression_versions'])) year = int(args.year) channel = args.channel default_config['year'] = year default_config['channel'] = channel if channel in ('qcd', 'photon'): default_config['sfbdt_threshold'] = args.sfbdt if year in (2017, 2018): args.weight_file = 'samples/xsec_2017.conf' basename = os.path.basename( args.outputdir) + '_' + args.jet_type + '_' + channel + '_' + str(year) args.outputdir = os.path.join(os.path.dirname(args.outputdir), basename, 'data' if args.run_data else 'mc') args.jobdir = os.path.join('jobs_%s' % basename, 'data' if args.run_data else 'mc') if args.run_data: args.datasets = '%s/%s_%d_DATA.yaml' % (args.sample_dir, channel, year) args.extra_transfer = os.path.expandvars( '$CMSSW_BASE/src/PhysicsTools/NanoHRTTools/data/JSON/%s' % golden_json[year]) args.json = golden_json[year] else: args.datasets = '%s/%s_%d_MC.yaml' % (args.sample_dir, channel, year) if args.jet_type == 'ak15': args.cut = cut_dict_ak15[channel] else: args.cut = cut_dict_ak8[channel] args.imports = [ ('PhysicsTools.NanoHRTTools.producers.HeavyFlavSFTreeProducer', 'heavyFlavSFTreeFromConfig') ] if not args.run_data: args.imports.extend([ ('PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer', 'puAutoWeight_2017' if year == 2017 else 'puWeight_%d' % year), ('PhysicsTools.NanoHRTTools.producers.topPtWeightProducer', 'topPtWeight') ]) # data, or just nominal MC if args.run_data or not args.run_syst: cfg = copy.deepcopy(default_config) if args.run_data: cfg['jes'] = None cfg['jer'] = None cfg['jmr'] = None cfg['met_unclustered'] = None run(args, configs={hrt_cfgname: cfg}) return # MC for syst. if args.run_syst and not args.run_data: # nominal w/ PDF/Scale wegihts logging.info('Start making nominal trees with PDF/scale weights...') syst_name = 'LHEWeight' opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) opts.branchsel_out = 'keep_and_drop_output_LHEweights.txt' run(opts, configs={hrt_cfgname: cfg}) # JES up/down for variation in ['up', 'down']: syst_name = 'jes_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jes'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg}) # JER up/down for variation in ['up', 'down']: syst_name = 'jer_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jer'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg}) # MET unclustEn up/down if args.channel == 'muon': for variation in ['up', 'down']: syst_name = 'met_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['met_unclustered'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg})
def main(): parser = get_arg_parser() parser.add_argument('--channel', choices=['muon', 'photon', 'qcd'], required=True, help='Channel: muon, photon, qcd' ) parser.add_argument('--run-syst', action='store_true', default=False, help='Run all the systematic trees. Default: %(default)s' ) parser.add_argument('--run-data', action='store_true', default=False, help='Run over data. Default: %(default)s' ) args = parser.parse_args() channel = args.channel default_config['channel'] = channel if not (args.post or args.add_weight or args.merge): tar_cmssw() # args.batch = True basename = os.path.basename(args.outputdir) + '_' + channel args.outputdir = os.path.join(os.path.dirname(args.outputdir), basename, 'data' if args.run_data else 'mc') args.jobdir = os.path.join('jobs_%s' % basename, 'data' if args.run_data else 'mc') args.datasets = 'samples/%s.conf' % channel args.cut = cut_dict[channel] args.imports = [('PhysicsTools.NanoHRTTools.producers.hrtSFTreeProducer', 'hrtSFTreeFromConfig')] if not args.run_data: args.imports.extend([ ('PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer', 'puWeight'), ]) if args.channel == 'muon': args.imports.append(('PhysicsTools.NanoHRTTools.producers.topPtWeightProducer', 'topPtWeight')) # data, or just nominal MC if args.run_data or not args.run_syst: cfg = copy.deepcopy(default_config) if args.run_data: cfg['data'] = True run(args, configs={hrt_cfgname: cfg}) return # MC for syst. if args.run_syst: # nominal w/ PDF/Scale wegihts logging.info('Start making nominal trees with PDF/scale weights...') syst_name = 'LHEWeight' opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) opts.branchsel_out = 'keep_and_drop_output_LHEweights.txt' # opts.datasets = 'samples/%s_syst.conf' % channel # if not os.path.exists(opts.datasets): # opts.datasets = args.datasets run(opts, configs={hrt_cfgname: cfg}) # JES up/down for variation in ['up', 'down']: syst_name = 'jes_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jes'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg}) # JER up/down for variation in ['up', 'down']: syst_name = 'jer_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jer'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg}) # MET unclustEn up/down for variation in ['up', 'down']: syst_name = 'met_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['met_unclustered'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg})
def _process(args): args.jet_type = 'ak8' default_config['jetType'] = args.jet_type default_config['run_tagger'] = True default_config['tagger_versions'] = ['V01'] default_config['WRITE_CACHE_FILE'] = False year = int(args.year) option = args.option default_config['year'] = year default_config['option'] = option args.weight_file = 'samples/xSections.dat' basename = os.path.basename( args.outputdir) + '_' + args.jet_type + '_option' + option + '_' + str( year) args.outputdir = os.path.join(os.path.dirname(args.outputdir), basename, 'data' if args.run_data else 'mc') args.jobdir = os.path.join('jobs_%s' % basename, 'data' if args.run_data else 'mc') if args.run_signal: args.outputdir = args.outputdir.replace('mc', 'signal') args.jobdir = os.path.join('jobs_%s' % basename, 'signal') sample_str = "hhbbWW" if args.run_data: args.datasets = '%s/%s_%d_DATA.yaml' % (args.sample_dir, sample_str, year) args.extra_transfer = os.path.expandvars( '$CMSSW_BASE/src/PhysicsTools/NanoNN/data/JSON/%s' % golden_json[year]) args.json = golden_json[year] elif args.run_signal: args.datasets = '%s/%s_%d_signalMC.yaml' % (args.sample_dir, sample_str, year) else: args.datasets = '%s/%s_%d_MC.yaml' % (args.sample_dir, sample_str, year) if samples: args.select = ','.join(samples[year]) if args.run_signal: args.imports = [( 'PhysicsTools.NanoAODTools.postprocessing.modules.common.countHistogramsModule', 'countHistogramsProducer')] args.imports.extend([('PhysicsTools.NanoNN.producers.hhbbWWProducer', 'hhbbWWProducerFromConfig')]) else: args.imports = [('PhysicsTools.NanoNN.producers.hhbbWWProducer', 'hhbbWWProducerFromConfig')] args.cut = cut_dict_ak8[str(option)] if not args.run_data: args.imports.extend([( 'PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer', 'puAutoWeight_2017' if year == 2017 else 'puWeight_%d' % year)]) # select branches args.branchsel_in = None args.branchsel_out = os.path.expandvars( '$CMSSW_BASE/src/PhysicsTools/NanoAODTools/scripts/branch_hh4b_output.txt' ) # data, or just nominal MC cfg = copy.deepcopy(default_config) if args.run_data: cfg['jes'] = None cfg['jer'] = None cfg['met_unclustered'] = None print('run ', args, nn_cfgname) run(args, configs={nn_cfgname: cfg}) return
def _process(args): channel = args.channel default_config['channel'] = channel year = args.year default_config['year'] = year if year in (2017, 2018): args.weight_file = 'samples/xsec_2017.conf' if year == 2018: # FIXME: Need to update JEC when running on NanoAODv5 default_config['jec'] = True year_dep_cuts = { 'DeepCSV_WP_M': { 2016: 0.6321, 2017: 0.4941, 2018: 0.4184 }[year] } # args.batch = True basename = os.path.basename( args.outputdir) + '_' + channel + '_' + str(year) args.outputdir = os.path.join(os.path.dirname(args.outputdir), basename, 'data' if args.run_data else 'mc') args.jobdir = os.path.join('jobs_%s' % basename, 'data' if args.run_data else 'mc') if args.run_data: args.datasets = '%s/%s_%d_DATA.yaml' % (args.sample_dir, channel, year) args.extra_transfer = os.path.expandvars( '$CMSSW_BASE/src/PhysicsTools/NanoHRTTools/data/JSON/%s' % golden_json[year]) args.json = golden_json[year] else: args.datasets = '%s/%s_%d_MC.yaml' % (args.sample_dir, channel, year) args.cut = cut_dict[channel].format(**year_dep_cuts) args.imports = [('PhysicsTools.NanoHRTTools.producers.hrtSFTreeProducer', 'hrtSFTreeFromConfig')] if not args.run_data: args.imports.extend([ ('PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer', 'puAutoWeight_2017' if year == 2017 else 'puWeight_%d' % year), ]) if args.channel == 'muon': args.imports.append( ('PhysicsTools.NanoHRTTools.producers.topPtWeightProducer', 'topPtWeight')) #FIXME: year dependence? # data, or just nominal MC if args.run_data or not args.run_syst: cfg = copy.deepcopy(default_config) if args.run_data: cfg['data'] = True run(args, configs={hrt_cfgname: cfg}) return # MC for syst. if args.run_syst: # nominal w/ PDF/Scale wegihts logging.info('Start making nominal trees with PDF/scale weights...') syst_name = 'LHEWeight' opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) opts.branchsel_out = 'keep_and_drop_output_LHEweights.txt' run(opts, configs={hrt_cfgname: cfg}) # JES up/down for variation in ['up', 'down']: syst_name = 'jes_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jes'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg}) # JER up/down for variation in ['up', 'down']: syst_name = 'jer_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jer'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg}) # MET unclustEn up/down if args.channel == 'muon': for variation in ['up', 'down']: syst_name = 'met_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['met_unclustered'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) run(opts, configs={hrt_cfgname: cfg})
def _process(args): args.jet_type = 'ak8' default_config['jetType'] = args.jet_type if args.run_mass_regression: default_config['run_mass_regression'] = True if args.jet_type == 'ak8': default_config['mass_regression_versions'] = [ 'ak8V01a', 'ak8V01b', 'ak8V01c' ] logging.info('Will run mass regression version(s): %s' % ','.join(default_config['mass_regression_versions'])) year = int(args.year) option = args.option default_config['year'] = year default_config['option'] = option args.weight_file = 'samples/xSections.dat' basename = os.path.basename( args.outputdir) + '_' + args.jet_type + '_option' + option + '_' + str( year) args.outputdir = os.path.join(os.path.dirname(args.outputdir), basename, 'data' if args.run_data else 'mc') args.jobdir = os.path.join('jobs_%s' % basename, 'data' if args.run_data else 'mc') if args.run_signal: args.outputdir = args.outputdir.replace('mc', 'signal') args.jobdir = os.path.join('jobs_%s' % basename, 'signal') sample_str = "hh4b" if option == "10": sample_str = "tt" if args.run_data: args.datasets = '%s/%s_%d_DATA.yaml' % (args.sample_dir, sample_str, year) args.extra_transfer = os.path.expandvars( '$CMSSW_BASE/src/PhysicsTools/NanoNN/data/JSON/%s' % golden_json[year]) args.json = golden_json[year] elif args.run_signal: args.datasets = '%s/%s_%d_signalMC.yaml' % (args.sample_dir, sample_str, year) else: args.datasets = '%s/%s_%d_MC.yaml' % (args.sample_dir, sample_str, year) if samples: args.select = ','.join(samples[year]) if args.run_signal: args.imports = [( 'PhysicsTools.NanoAODTools.postprocessing.modules.common.countHistogramsModule', 'countHistogramsProducer')] args.imports.extend([('PhysicsTools.NanoNN.producers.hh4bProducer', 'hh4bProducerFromConfig')]) else: args.imports = [('PhysicsTools.NanoNN.producers.hh4bProducer', 'hh4bProducerFromConfig')] args.cut = cut_dict_ak8[str(option)] if not args.run_data: args.imports.extend([( 'PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer', 'puAutoWeight_2017' if year == 2017 else 'puWeight_%d' % year)]) # select branches args.branchsel_in = None args.branchsel_out = os.path.expandvars( '$CMSSW_BASE/src/PhysicsTools/NanoAODTools/scripts/branch_hh4b_output.txt' ) # data, or just nominal MC if args.run_data or not args.run_syst: cfg = copy.deepcopy(default_config) # set all JME to true cfg['allJME'] = True if args.run_data: cfg['allJME'] = False cfg['jes'] = None cfg['jer'] = None cfg['met_unclustered'] = None print('run ', args, nn_cfgname) run(args, configs={nn_cfgname: cfg}) return # MC for syst if args.run_syst and not args.run_data: # nominal w/ PDF/Scale weights ''' logging.info('Start making nominal trees with PDF/scale weights...') syst_name = 'LHEWeight' opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) opts.branchsel_out = os.path.expandvars('$CMSSW_BASE/src/PhysicsTools/NanoAODTools/scripts/branch_hh4b_output_LHEweights.txt' run(opts, configs={nn_cfgname: cfg}) ''' # JES up/down for variation in ['up', 'down']: syst_name = 'jes_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jes'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) if args.run_signal: print('run signal') opts.outputdir = opts.outputdir + '_signal' opts.jobdir = opts.jobdir + '_signal' run(opts, configs={nn_cfgname: cfg}) # JER up/down for variation in ['up', 'down']: syst_name = 'jer_%s' % variation logging.info('Start making %s trees...' % syst_name) opts = copy.deepcopy(args) cfg = copy.deepcopy(default_config) cfg['jer'] = variation opts.outputdir = os.path.join(os.path.dirname(opts.outputdir), syst_name) opts.jobdir = os.path.join(os.path.dirname(opts.jobdir), syst_name) if args.run_signal: print('run signal') opts.outputdir = opts.outputdir + '_signal' opts.jobdir = opts.jobdir + '_signal' run(opts, configs={nn_cfgname: cfg}) # MET unclustered up/down '''