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})
Example #2
0
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})
Example #3
0
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})
Example #4
0
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
Example #5
0
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})
Example #6
0
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
        '''