diff --git a/.gitignore b/.gitignore index 4e7dc894..47dd97e9 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ slurm* launch* .github/ .vscode/ -*.pdf \ No newline at end of file +*.pdf +user/ricardo/claude/ \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..ea4b4a9c --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,177 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Domain context + +GOLLUM is a framework for Neural Simulation-Based Inference (NSBI) analyses, based on arxiv:2205.12976, arxiv:2406.19076, arxiv:2505.05544. It trains ML surrogates for differential cross-section ratios, POI and systematic variations continuously in phase space (unbinned), then performs likelihood fits to extract PDF parameters. A traditional binned statistical model serves as cross-check. + +Goal of this analysis: use GOLLUM to extract the gluon PDF in dileptonic ttbar, as done in arxiv:2604.13157. + +Physics process: dileptonic tt̄ events from CMS Run II (2016APV, 2016, 2017, 2018), and other small backgrounds: Drell-Yan (Z+jets), semileptonic tt events and single top events. + +## Environment setup + +```bash +conda activate /groups/hephy/cms/robert.schoefbeck/conda/envs/hephy-ml-gpu-2 +``` + +Key stack: Python 3.10, TensorFlow, ROOT/PyROOT, NumPy, SciPy, iminuit, autograd, mplhep, uproot. See `env/environment.yaml` for full dependency list. + +## New user setup + +Add yourself to `common/user.py` with your `plot_directory`, `model_directory`, `cache_directory`, and `output_directory`. The code hard-crashes if your username is not registered — this is intentional. + +## Running training jobs + +All training scripts are run from the repo root and take a YAML config path as first argument plus `--job `: + +```bash +# List all trainable jobs in a config (run without --job) +python ML/TFMC/tfmc_training.py configs/unbinned_v6/unbinned_2018.yaml +python ML/PNN/pnn_training.py configs/unbinned_v6/unbinned_2018.yaml + +# Train a specific job +python ML/TFMC/tfmc_training.py configs/unbinned_v6/unbinned_2018.yaml --job +python ML/PNN/pnn_training.py configs/unbinned_v6/unbinned_2018.yaml --job +python ML/BIT/pdf_bit_training.py configs/unbinned_v6/unbinned_2018.yaml --job +python ML/Scaler/scaler_training.py configs/unbinned_v6/unbinned_2018.yaml --job +python ML/IC/ic_training.py configs/... --job +python ML/ICP/icp_training.py configs/... --job + +# Closure test (PNN) +python ML/PNN/pnn_training_closure_mpl.py configs/unbinned_v6/unbinned_2018.yaml --job +python ML/TFMC/tfmc_training_closure_mpl.py configs/... --job +``` + +Common flags: `--overwrite` (rewrite model dir), `--small` (debug with first shard only), `--epochs N`. + +## Checking which surrogates are trained / missing + +```bash +python common/yaml_loader.py configs/unbinned_v6/unbinned_2018.yaml +``` + +Prints a summary of loaded vs. missing artifacts and the exact training commands for the missing ones. + +## Running fits (example) + +```bash +# Unbinned likelihood fit (from repo root) +python fit/Likelihood.py configs/unbinned_v6/unbinned_2018.yaml + +# Binned fit (see binned config) +bash fit/Likelihood.py configs/binned_v6/binned_2018.yaml + +# POD basis +python orth/orthogonalize_Fisher.py configs/... [args] +``` + +Fit outputs go to `user.output_directory` (user-specific path from `common/user.py`). + +## YAML config system + +Configs use a custom include mechanism in `common/yaml_loader.py`. A key can be set to `{include: path/to/other.yaml}` to inline another file's content for that key. This allows shared systematics blocks across eras. + +Config structure: +- `version`: string identifying the model directory subfolder +- `defaults`: `module_samples`, `default_features`, `splitting`, `early_stopping` +- `jobs`: list of training jobs with `id`, `type`, `region`, `process`, `features`, `extras` +- `likelihood.regions` (unbinned) or `likelihood.binned`: describe the statistical model + +Job types: `scaler`, `ic`, `ich`, `icp`, `icph`, `pnn`, `classifier` (with `framework: tfmc`), `bit`. + +Job dependency order: scaler → IC/ICP → TFMC/PNN → likelihood. The `extras.use_scaler`, `extras.use_ic`, `extras.use_icp` fields wire dependencies between jobs. + +Multiple per-era configs can be merged with `combine_configs()` for a combined Run II fit. + +## Directory structure + +Persistent paths (symlinked at repo root): +- `models/` → `user.model_directory` — saved ML artifacts, organized as `////` +- `output/` → `user.output_directory` — fit results, scan pickle files +- `caches/` → `user.cache_directory` +- `www/` → `user.plot_directory` — plots (synced to CERN EOS on script exit via `common/syncer.py`) + +## ML modules + +| Module | Role | +|---|---| +| `ML/TFMC/` | TensorFlow multiclass classifier for process discrimination: calculates relative contribution of each class to the differential cross-section | +| `ML/PNN/` | Parametric NN for systematic variation surrogates: learns differential cross-section ratio (DCR) as function of nuisance parameter | +| `ML/BIT/` | Boosted Information Trees: learns POI-dependent variations continuously in input variable phase space via event weights | +| `ML/Scaler/` | Feature mean/variance scaler, shared across TFMC/PNN | +| `ML/IC/` | Inclusive event yield - DEPRECATED/NOT USED | +| `ML/ICH/` | Binned event yield parametrization as function of POI | +| `ML/ICP/` | Inclusive yield parametrization as a function of nuisance parameters | +| `ML/ICPH/` | Binned event yield parametrization as function of nuisance parameters | +| `ML/Calibration/` | Post-hoc calibration checks for BIT predictions | +| `ML/c2st/` | Classifier two-sample test (C2ST) for high-dimension closure check of PNNs | + +Each module has a model class (`TFMC`, `PNN`, `BIT`, etc.) with `save()`/`load()` methods, and a separate training script. The model class itself has no I/O or plotting logic. + +## Fit infrastructure + +- `fit/Likelihood.py` — `load_likelihood(cfg)` wires YAML config + loaded surrogates into a callable `−2ΔlnL` function. Supports both unbinned (NSBI) and binned regions simultaneously. +- `fit/Modeling.py` — `ModelParameter`, `Hypothesis`, `Rotated`: lightweight parameter containers for the minimizer interface (autograd-compatible). +- `fit/MultiDimFit.py` — POI scans à la CMS Combine, Slurm-parallelizable via `--pointRange`. +- `fit/N2LLExtensions.py` — additional likelihood terms and extensions. + +## PDF parametrizations + +`pdf/PDFParametrization.py` is the factory entry point; supports three backends: +- `Chebyshev` / `Bernstein` via `pdf/AnalyticPDFParametrization.py` +- `PODBasis` via `pdf/PODBasis.py`: PDF basis derived from procedure described in paper. This basis is not derived with the GOLLUM framework, it is provided by our NNPDF collaborations. + +## Data + +- `data/samples.py` / `data/samples_RunII.py` — define `RDataLoader` instances for each era and systematic variation; imported dynamically via `defaults.module_samples` in YAML configs. +- `data/observables.py` — feature name lists (`TOP_KINEMATICS`, `LEPTON_KINEMATICS`, `ASYMMETRY`, `ALL_FEATURES`) referenced in YAML feature tokens. +- `data/RDataLoader.py` — ROOT TTree loader with weight branch product, `clone_from_files()` for systematic variants. +- `data/UIDSplitter.py` — deterministic train/val/test splitting on event UIDs (run, luminosityBlock, event). + +## Plotting and syncing + +When saving plots to the `www/` directory, always: +```python +import common.syncer as syncer +# Use plt.savefig (not fig.savefig) — syncer wraps plt.savefig +plt.savefig(os.path.join(plot_dir, "figure.png")) +``` +`syncer` registers an `atexit` hook that uploads files under `www/` to CERN EOS via `xrdcp`. Requires `$CERN_USER` in the environment. + +## Code style + +- Type hints where they don't bulk the code; spaces for indentation (no tabs). +- `logger` (from `logging`) instead of `print`. Exception: list_jobs_and_exit (for piping directly to shell script for direct execution). +- Prefer `matplotlib`/`mplhep` over ROOT for new plots. Only touch ROOT plotting code in existing scripts. +- Import reusable functions from other files; if not importing is a deliberate choice, say so explicitly. +- Prefer controlled crashes over `try/except` silencing — misconfigurations should surface immediately. Only catch exceptions at genuine external boundaries (optional imports, network calls). +- Docstrings on all new files and functions (brief, not multi-paragraph). +- Don't add backward-compatibility shims when refactoring — change all call sites directly. +- Don't abstract logic that appears only once. Three similar instances warrant a helper; one or two do not. +- Don't use shorthand naming for variables that are not auxiliary variables. Be verbose but no more than three words. +- Use ascii characters only, and e.g. write lambda explicitly instead of the lambda character. +- Don't give a random name to plan files. The plan file name should be a shorthand for what is being implemented. + +## Non-obvious design decisions + +These look wrong to a fresh reader but are correct for this codebase — don't "fix" them: + +- **Custom YAML includes**: the `{include: path}` syntax in configs is implemented in `common/yaml_loader.py`, not standard PyYAML. Don't replace with YAML anchors (`&`, `*`) — they don't support cross-file includes. +- **`common/syncer.py` monkey-patching**: importing `syncer` is the entire effect. It hooks into `plt.savefig` and ROOT's `TCanvas.Print` at import time via monkey-patching, and registers an `atexit` sync to CERN EOS. No explicit `syncer.sync()` call is needed. +- **`sys.path.insert(0, '..')`**: all scripts use this pattern because there is no package installation. Scripts must always be run from the repo root (`python ML/PNN/pnn_training.py configs/...`), never from within subdirectories. +- **Hard crash on unknown user**: `common/user.py` raises `RuntimeError` if `$USER` is not registered. This is intentional — a new collaborator must configure their own paths before using the framework. + +## Known pitfalls + +- **ICH/ICPH binning must exactly match the saved artifact**: `load_surrogates()` checks `axis_names` and bin edges against the YAML config and raises on mismatch. Axis order matters. When retraining an ICH/ICPH, regenerate both the YAML binning and the artifact together. +- **PNN and Scaler must share the same feature list**: enforced in `yaml_loader._apply_defaults_and_checks()`. If a PNN job references a scaler via `extras.use_scaler`, both must have identical `features` (easiest to achieve by relying on `defaults.default_features` for both). +- **`combine_configs()` requires identical `version` and `defaults` across all merged configs**: the surrogate loader uses `version` to locate model directories; a mismatch raises immediately. +- **Region IDs and job IDs must be globally unique** within a merged config. Use era-suffixed IDs everywhere (e.g. `SR_2018`, `pnn_TTLep_pow_2018_PU`). + +## Physics and statistical context + +- **POI space vs. x-space**: the POIs (`c0`, `c1`, ...) are coefficients of the PDF basis functions, not directly physical. Mapping to x-space requires applying the parametrization. Don't conflate POI scans with PDF scans. +- **POD basis ordering**: the rotated POD basis eigenvector indices are ordered by expected sensitivity (most sensitive first). Truncation decisions should be framed in terms of expected sensitivity (proportional to eigenvalue). +- **Asimov vs. data fits**: `classifier.asimov` in the likelihood config sets which sample is used as pseudo-data in Asimov mode (`TTLep_pow_`). Real data fits use `Data_`. The Asimov sample should always match the signal class sample. \ No newline at end of file diff --git a/ML/ICPH/icph_closure_mpl.py b/ML/ICPH/icph_closure_mpl.py new file mode 100644 index 00000000..b9b61f8e --- /dev/null +++ b/ML/ICPH/icph_closure_mpl.py @@ -0,0 +1,493 @@ +#!/usr/bin/env python +"""ICPH training-closure plot (YAML-driven): compares truth per-bin yields, +accumulated directly from the base-point loaders, against the yields +predicted by the trained ICPH object, for every base point of a job.""" +from __future__ import annotations + +import os, sys, math, argparse, importlib, warnings + +import numpy as np + +# project roots +sys.path.insert(0, "..") +sys.path.insert(0, "../..") + +import common.user as user +import common.syncer as syncer +from common.helpers import copyIndexPHP + +from ML.ICPH.ICPH import InclusiveCrosssectionParametrizationHistogram +from data.RDataLoader import RDataLoader +from data.SelectionView import SelectionView +from tqdm import tqdm + +MAKE_PUBLIC_PLOTS = False + +# ---------------- args ---------------- +p = argparse.ArgumentParser(description="ICPH training-closure plot (YAML-driven): truth vs prediction per bin") +p.add_argument("config", help="Path to global YAML config") +p.add_argument("--job", default=None, help="ICPH job id to run (omit to list)") +p.add_argument("--small", action="store_true", help="Only first shard for debugging") +p.add_argument("--for_debug", action="store_true", help="Use _for_debug directories") +p.add_argument("--n_split", default=None, help="Set sample split") +args = p.parse_args() + +# ---------------- cfg ---------------- +cfg_path = os.path.expanduser(os.path.expandvars(args.config)) +import common.yaml_loader as yaml_loader +CFG = yaml_loader.load_yaml(cfg_path) + +D = CFG.get("defaults", {}) or {} +module_samples = D.get("module_samples", "data.samples") + + +def list_and_exit(): + jobs = [j for j in (CFG.get("jobs") or []) if j.get("type") == "icph"] + if not jobs: + print("No ICPH jobs found.") + sys.exit(0) + for j in jobs: + print(f"python {__file__} {args.config} --job {j['id']}") + sys.exit(0) + + +if args.job is None: + list_and_exit() + +J = next((j for j in (CFG.get("jobs") or []) if j.get("id") == args.job), None) +if J is None or J.get("type") != "icph": + raise RuntimeError(f"Job '{args.job}' not found or not type 'icph'.") + +params = list(J["parameters"]) +combinations = [tuple(c) for c in J["combinations"]] +bp_specs = list(J["base_points"] or []) +if not bp_specs: + raise RuntimeError(f"ICPH job '{J['id']}' has no base_points defined.") + +binning_spec = J.get("binning", []) +if len(binning_spec) not in (1, 2): + raise RuntimeError("ICPH: only 1D or 2D binning supported") +axis_names = [b[0] for b in binning_spec] +bin_edges = [np.asarray(b[1], dtype=float) for b in binning_spec] + +base_points = [] +nominal_base_point = None +nominal_index = None +for i, spec in enumerate(bp_specs): + coords = tuple(spec["coords"]) + base_points.append(coords) + if spec.get("nominal", False): + if nominal_base_point is not None: + raise RuntimeError(f"ICPH job '{J['id']}' has multiple nominal base points.") + nominal_base_point = coords + nominal_index = i +if nominal_base_point is None: + raise RuntimeError(f"ICPH job '{J['id']}' has no nominal base point.") + +# ---------------- resolve loaders (weight variations per base point) ---------------- +samples_mod = importlib.import_module(module_samples) +loaders: list[object] = [] + +for i, spec in enumerate(bp_specs): + loader_name = spec.get("loader", None) + if loader_name is None: + raise RuntimeError(f"ICPH job '{J['id']}', base_points[{i}] has no 'loader'.") + if not hasattr(samples_mod, loader_name): + raise RuntimeError(f"Loader/view '{loader_name}' not found in module '{module_samples}'.") + + base = getattr(samples_mod, loader_name) + remove = list(spec.get("removeweights", []) or []) + add = list(spec.get("addweights", []) or []) + + if not remove and not add: + loaders.append(base) + continue + + if isinstance(base, RDataLoader): + base_weights = list(base.weight_branches or []) + root_loader = base + elif isinstance(base, SelectionView): + if base._w_override is not None: + base_weights = list(base._w_override) + else: + if not isinstance(base.base, RDataLoader): + raise RuntimeError( + f"SelectionView '{base.name}' has a non-RDataLoader base. " + "Layered views are not supported in this job logic." + ) + base_weights = list(base.base.weight_branches or []) + root_loader = base.base + else: + raise RuntimeError( + f"Loader/view '{loader_name}' has unsupported type {type(base)} for automatic weight variations." + ) + + new_weights = list(base_weights) + + for w in remove: + if w in new_weights: + new_weights.remove(w) + else: + warnings.warn( + f"[job {J.get('id', '')}] weight '{w}' requested for removal " + f"but not found in loader '{loader_name}' (current weights: {base_weights})." + ) + + for w in add: + if w not in new_weights: + new_weights.append(w) + + if hasattr(root_loader, "_requested_branches"): + for b in add: + if b not in root_loader._requested_branches: + root_loader._requested_branches.append(b) + + if root_loader.observer_names is None: + root_loader.observer_names = list(add) + else: + for b in add: + if b not in root_loader.observer_names: + root_loader.observer_names.append(b) + + if isinstance(base, RDataLoader): + vname = f"{loader_name}_wvar{i}" + eff_loader = SelectionView( + base=base, + name=vname, + selection_fn=None, + feature_names=base.feature_names, + observer_names=base.observer_names, + selection_feature_names=None, + weight=new_weights, + ) + else: + vname = f"{base.name}_wvar{i}" + eff_loader = SelectionView( + base=base.base, + name=vname, + selection_fn=base._selection_fns, + feature_names=base._feature_names, + observer_names=base._observer_names, + selection_feature_names=base._sel_feats, + weight=new_weights, + ) + + loaders.append(eff_loader) + +sel = J.get("selection", None) +sel_f = J.get("selection_features", []) +if sel: + for loader in loaders: + if isinstance(loader, RDataLoader): + loader.addSelection(sel, sel_f) + else: + loader.base.addSelection(sel, sel_f) + +if args.n_split: + for l in loaders: + if isinstance(l, RDataLoader): + l.set_n_split(args.n_split) + else: + l.base.set_n_split(args.n_split) + +print(f"\nResolved loaders for ICPH job '{J.get('id', '')}':") +for i, (spec, L) in enumerate(zip(bp_specs, loaders)): + print(f" base point {i}, coords={spec['coords']}, loader='{spec['loader']}', nominal={bool(spec.get('nominal', False))}:") + print(L) + print("-" * 60) + +# ---------------- load trained ICPH ---------------- +cfg_base = os.path.join(CFG.get("version", "default"), J["region"]) +out = J.get("output", {}) or {} +filename = out.get("filename", f"ICPH_{J['id']}.pkl") +icph_path = os.path.join(user.model_directory, cfg_base + ("_for_debug" if args.for_debug else ""), "ICPH", filename) + +print(f"Loading ICPH from {icph_path}") +icph = InclusiveCrosssectionParametrizationHistogram.load(icph_path) +print(icph) + +# ---------------- accumulate truth histograms per base point ---------------- +axis1_name = axis_names[0] +axis2_name = axis_names[1] if len(axis_names) == 2 else None +hist_shape = tuple(len(e) - 1 for e in bin_edges) +n_bins_flat = int(np.prod(hist_shape)) + +true_h = np.zeros((n_bins_flat, len(base_points)), dtype=np.float64) +true_h2 = np.zeros((n_bins_flat, len(base_points)), dtype=np.float64) + +print("Accumulating histograms ...") +for i_bp, (spec, loader) in enumerate(zip(bp_specs, loaders)): + n_shards = len(getattr(loader, "base", loader)) + if args.small: + n_shards = min(n_shards, 1) + for shard in tqdm(range(n_shards), desc=f"base point {i_bp}", unit="shard"): + X, G, w = loader.materialize(shard=shard, what="fow") + + vals1 = X[:, loader.feature_names.index(axis1_name)] if axis1_name in loader.feature_names else G[:, loader.observer_names.index(axis1_name)] + if axis2_name is not None: + vals2 = X[:, loader.feature_names.index(axis2_name)] if axis2_name in loader.feature_names else G[:, loader.observer_names.index(axis2_name)] + hist, _, _ = np.histogram2d(vals1, vals2, bins=(bin_edges[0], bin_edges[1]), weights=w) + hist2, _, _ = np.histogram2d(vals1, vals2, bins=(bin_edges[0], bin_edges[1]), weights=(w * w)) + else: + hist, _ = np.histogram(vals1, bins=bin_edges[0], weights=w) + hist2, _ = np.histogram(vals1, bins=bin_edges[0], weights=(w * w)) + + true_h[:, i_bp] += hist.reshape(-1) + true_h2[:, i_bp] += hist2.reshape(-1) + +# ---------------- predicted histograms from ICPH ---------------- +nom_true = true_h[:, nominal_index].reshape(hist_shape) +nominal_vec = np.array(nominal_base_point, dtype=np.float64) + +pred_h = np.zeros((n_bins_flat, len(base_points)), dtype=np.float64) +for i_bp, coords in enumerate(base_points): + nu_vec = np.array(coords, dtype=np.float64) - nominal_vec + ratio = icph.predict(nu_vec) + pred_h[:, i_bp] = (nom_true * ratio).reshape(-1) + +# ---------------- plotting (matplotlib + mplhep) ---------------- +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import mplhep as hep +from matplotlib.gridspec import GridSpec +from matplotlib.lines import Line2D + +from data.plot_options import plot_options as PLOT_OPTS +from data.plot_options import get_sample_legend, get_short_parameter_name +from data.colors import cmap_petroff10_mpl + +hep.style.use("CMS") + + +def nu_tex_from_coords(coords): + values = [str(int(np.rint(v))) for v in coords] + return rf"({', '.join(values)})" + + +def strip_wvar_suffix(name: str) -> str: + if "_wvar" in name: + name = name.split("_wvar", 1)[0] + return name + + +label_param_names_latex = [r"\nu_{" + get_short_parameter_name(param_name) + "}" for param_name in params] +param_info_text = r"$\nu = (" + ",".join(label_param_names_latex) + ")$" + +sample_legend = "$" + get_sample_legend(strip_wvar_suffix(bp_specs[nominal_index]["loader"])) + "$" +legend_mapping_line = f"{sample_legend}, {param_info_text}" +legend_mapping_line = legend_mapping_line.replace("#", "\\") + +n_entries = len(base_points) +n_cols = 3 +n_rows = int(math.ceil(n_entries / float(n_cols))) + +has_group_row = len(hist_shape) == 2 + +if n_rows <= 1: + axes_top_margin = 0.75 if has_group_row else 0.85 + main_legend_y = 0.90 if has_group_row else 0.93 + truth_pred_y = 0.865 if has_group_row else 0.905 +elif n_rows == 2: + axes_top_margin = 0.70 if has_group_row else 0.80 + main_legend_y = 0.895 if has_group_row else 0.925 + truth_pred_y = 0.86 if has_group_row else 0.895 +else: + axes_top_margin = 0.65 if has_group_row else 0.75 + main_legend_y = 0.885 if has_group_row else 0.915 + truth_pred_y = 0.855 if has_group_row else 0.895 + +colors = [cmap_petroff10_mpl[i] for i in range(n_entries)] +colors[nominal_index] = "black" + +version_name = os.path.split(cfg_base)[0] +lumi_by_era = { + "2016APV": 19.50, + "2016": 16.81, + "2017": 41.48, + "2018": 59.83, + "Run 2": 137.62, +} +lumi_era = "Run 2" +for era in lumi_by_era: + if era in version_name: + lumi_era = era + break + +def mpl_tex(name: str) -> str: + tex = PLOT_OPTS.get(name, {}).get("tex", name) + return tex.replace("#", "\\") + + +def fmt_edge(v: float) -> str: + return f"{v:g}" + + +# ---------------- group layout: outer axis (if 2D) split into side-by-side panels ---------------- +if len(hist_shape) == 2: + n_groups, n_inner = hist_shape + group_edges, inner_edges = bin_edges + outer_name, inner_name = axis_names +else: + n_groups, n_inner = 1, hist_shape[0] + group_edges, inner_edges = None, bin_edges[0] + outer_name, inner_name = None, axis_names[0] + +arr_true = true_h.T.reshape((n_entries, n_groups, n_inner)) +arr_true2 = true_h2.T.reshape((n_entries, n_groups, n_inner)) +arr_pred = pred_h.T.reshape((n_entries, n_groups, n_inner)) + +inner_centers = 0.5 * (inner_edges[1:] + inner_edges[:-1]) +inner_step_x = np.concatenate([inner_edges[:-1], inner_edges[-1:]]) + +plot_dir = os.path.join( + user.plot_directory, + "ICPH_training_closure", + cfg_base + ("_for_debug" if args.for_debug else ""), + # J["id"], +) +print(f"Writing closure plot to: {plot_dir}") +os.makedirs(plot_dir, exist_ok=True) +copyIndexPHP(plot_dir) + +fig = plt.figure(figsize=(4 * n_groups + 4, 12)) +gs = GridSpec(2, 1, height_ratios=[3, 1], hspace=0.03) +gs_top = gs[0].subgridspec(1, n_groups, wspace=0.0) +gs_bot = gs[1].subgridspec(1, n_groups, wspace=0.0) + +axes_top = [fig.add_subplot(gs_top[0, 0])] +axes_bot = [fig.add_subplot(gs_bot[0, 0], sharex=axes_top[0])] +for g in range(1, n_groups): + axes_top.append(fig.add_subplot(gs_top[0, g], sharey=axes_top[0])) + axes_bot.append(fig.add_subplot(gs_bot[0, g], sharex=axes_top[g], sharey=axes_bot[0])) + +fig.subplots_adjust(top=axes_top_margin) +fig.text(0.5, 0.965, legend_mapping_line, ha="center", va="top", fontsize=18, weight="bold") + +max_y = 0.0 +handles = [] +labels = [] + +for g in range(n_groups): + ax_top = axes_top[g] + for k, nu in enumerate(base_points): + y = arr_true[k, g] + y2 = arr_true2[k, g] + y_pred = arr_pred[k, g] + err = np.sqrt(y2) + + step_y = np.concatenate([y_pred, y_pred[-1:]]) + h_line, = ax_top.step(inner_step_x, step_y, where="post", color=colors[k], linewidth=2) + ax_top.errorbar(inner_centers, y, yerr=err, fmt="o", color=colors[k], markersize=4) + + if g == 0: + handles.append(h_line) + labels.append(nu_tex_from_coords(nu)) + + max_y = max(max_y, np.nanmax(y), np.nanmax(y_pred)) + + ax_top.set_xticks([inner_edges[0], inner_edges[-1]]) + ax_top.set_xticklabels([fmt_edge(inner_edges[0]), fmt_edge(inner_edges[-1])]) + ax_top.tick_params(labelbottom=False) + if g > 0: + ax_top.tick_params(labelleft=False) + ax_top.spines["left"].set_linestyle("--") + if g < n_groups - 1: + ax_top.spines["right"].set_linestyle("--") + + if group_edges is not None: + lo, hi = group_edges[g], group_edges[g + 1] + ax_top.text( + 0.5, 1.02, + rf"${fmt_edge(lo)} \leq {mpl_tex(outer_name)} < {fmt_edge(hi)}$", + transform=ax_top.transAxes, ha="center", va="bottom", fontsize=11, + ) + +axes_top[0].set_ylim(0.0, 1.2 * max_y if max_y > 0 else 1.0) +axes_top[0].set_ylabel("Events") + +hep.cms.label("Preliminary" if MAKE_PUBLIC_PLOTS else "Internal", data=False, year=lumi_era, ax=axes_top[0], loc=2, fontsize=14) + +h_nom_arr = arr_true[nominal_index] +denom_arr = h_nom_arr.copy() +denom_arr[denom_arr == 0] = np.nan + +max_dev = 0.0 +for g in range(n_groups): + ax_bot = axes_bot[g] + denom = denom_arr[g] + for k in range(n_entries): + y = arr_true[k, g] + y_pred = arr_pred[k, g] + err = np.sqrt(arr_true2[k, g]) + + r_true = y / denom + r_pred = y_pred / denom + r_err = err / denom + + ax_bot.errorbar(inner_centers, r_true, yerr=r_err, fmt="o", color=colors[k], markersize=4) + step_y = np.concatenate([r_pred, r_pred[-1:]]) + ax_bot.step(inner_step_x, step_y, where="post", color=colors[k], linewidth=2) + + valid = np.isfinite(r_true) + if np.any(valid): + max_dev = max(max_dev, np.nanmax(np.abs(r_true[valid] - 1.0))) + validp = np.isfinite(r_pred) + if np.any(validp): + max_dev = max(max_dev, np.nanmax(np.abs(r_pred[validp] - 1.0))) + + ax_bot.set_xticks([inner_edges[0], inner_edges[-1]]) + ax_bot.set_xticklabels([fmt_edge(inner_edges[0]), fmt_edge(inner_edges[-1])]) + if g > 0: + ax_bot.tick_params(labelleft=False) + ax_bot.spines["left"].set_linestyle("--") + if g < n_groups - 1: + ax_bot.spines["right"].set_linestyle("--") + +if max_dev <= 0.0: + r_min, r_max = 0.9, 1.1 +else: + half_range = 1.3 * max_dev + r_min = 1.0 - half_range + r_max = 1.0 + half_range + +axes_bot[0].set_ylim(r_min, r_max) +axes_bot[0].set_ylabel("var / nominal") +fig.text(0.5, 0.04, f"${mpl_tex(inner_name)}$", ha="center", va="top", fontsize=18) + +fig.legend( + handles, + labels, + ncol=n_cols, + loc="upper center", + bbox_to_anchor=(0.5, main_legend_y), + frameon=False, + fontsize=18, + handlelength=2.0, + columnspacing=1.4, +) + +truth_pred_handles = [ + Line2D([], [], color="black", marker="o", linestyle="None", markersize=8, label="truth"), + Line2D([], [], color="black", linestyle="-", linewidth=2, label="prediction"), +] +fig.legend( + truth_pred_handles, + ["truth", "prediction"], + ncol=2, + loc="lower center", + bbox_to_anchor=(0.5, truth_pred_y), + frameon=False, + fontsize=14, + handlelength=2.0, + columnspacing=1.8, +) + +out_png = os.path.join(plot_dir, f"{J['id']}.png") +out_pdf = os.path.join(plot_dir, f"{J['id']}.pdf") +plt.savefig(out_png, bbox_inches="tight") +plt.savefig(out_pdf, bbox_inches="tight") +plt.close(fig) + +syncer.sync() +print("Done.") diff --git a/ML/PNN/PNN.py b/ML/PNN/PNN.py index 4ff5ea9a..536cd419 100644 --- a/ML/PNN/PNN.py +++ b/ML/PNN/PNN.py @@ -145,6 +145,14 @@ def set_icp(self, parameters, combinations, DeltaA): if DeltaA.shape[0] != len(pnn_combs): raise ValueError(f"DeltaA length {DeltaA.shape[0]} != #combos {len(pnn_combs)}") self._icp_bias = tf.constant(DeltaA, dtype=tf.float32) + + def has_icp(self): + return (self._icp_bias is not None) + + def remove_icp_bias(self): + # removes effect ICP bias. usage: do shape-only variations + # on models trained with ICP bias + self._icp_bias = None # ---------------------- inference helpers ---------------------- def deltaA(self, X: np.ndarray) -> np.ndarray: diff --git a/ML/PNN/pnn_training.py b/ML/PNN/pnn_training.py index 3606d27c..982b1f6e 100644 --- a/ML/PNN/pnn_training.py +++ b/ML/PNN/pnn_training.py @@ -314,13 +314,18 @@ def list_and_exit(): pnn = None model_dir = os.path.join(user.model_directory, cfg_base+("_for_debug" if args.for_debug else ""), "PNN", J["id"]) -plot_dir = os.path.join(user.plot_directory, cfg_base+("_for_debug" if args.for_debug else ""), "PNN", J["id"]) +plot_dir = os.path.join(user.plot_directory, "PNN", cfg_base+("_for_debug" if args.for_debug else ""), J["id"]) os.makedirs(model_dir, exist_ok=True); os.makedirs(plot_dir, exist_ok=True) # A small pointer file for BEST (epoch + val_loss) best_txt = os.path.join(model_dir, "best_checkpoint.txt") -if not args.overwrite: +if args.overwrite: + import shutil + shutil.rmtree(model_dir, ignore_errors=True) + os.makedirs(model_dir, exist_ok=True) + print(f"Directory {model_dir} has been removed successfully") +else: if os.path.exists(os.path.join(model_dir,"done")): raise Exception("Training finished properly and rerunning without --overwrite. Will stop here.") diff --git a/ML/PNN/pnn_training_closure_mpl.py b/ML/PNN/pnn_training_closure_mpl.py index 6d6806a7..15e1a602 100644 --- a/ML/PNN/pnn_training_closure_mpl.py +++ b/ML/PNN/pnn_training_closure_mpl.py @@ -16,23 +16,25 @@ from common.helpers import copyIndexPHP from ML.PNN.PNN import PNN +from data.UIDSplitter import UIDSplitter from tqdm import tqdm # Plot options (binning, labels, optional y_ratio_range) -#from data.plot_options import plot_options as PLOT_OPTS -from plot.bit.propaganda_plot_options import plot_options as PLOT_OPTS #temporary change +from data.plot_options import plot_options as PLOT_OPTS +# from plot.bit.propaganda_plot_options import plot_options as PLOT_OPTS #temporary change -MAKE_PUBLIC_PLOTS = True +MAKE_PUBLIC_PLOTS = False # ---------------- args ---------------- -p = argparse.ArgumentParser(description="PNN training-closure per-feature plots (YAML-driven)") +p = argparse.ArgumentParser(description="PNN training-closure per-feature plots (YAML-driven) on held-out test dataset") p.add_argument("config", help="Path to global YAML config") p.add_argument("--job", default=None, help="PNN job id to run (omit to list)") p.add_argument("--small", action="store_true", help="Only first shard for debugging") p.add_argument("--lumi_scale", type=float, default=None, help="Scale lumi?") p.add_argument("--for_debug", action="store_true", help="Use _for_debug directories") p.add_argument("--n_split", default=None, help="Set sample split") +p.add_argument("--shape_only", action="store_true", help="Removing impact of total rate variations from ICP to plot shape-only variations.") args = p.parse_args() # ---------------- cfg ---------------- @@ -50,7 +52,7 @@ def list_and_exit(): sys.exit(0) script = os.path.basename(__file__) for j in jobs: - print(f"python {script} {args.config} --job {j['id']}") + print(f"python {__file__} {args.config} --job {j['id']}") sys.exit(0) if args.job is None: @@ -63,6 +65,42 @@ def list_and_exit(): param_names = list(J.get("parameters", [])) param_map_tex = " ".join([f"#nu_{{{i+1}}}={p}" for i, p in enumerate(param_names)]) if param_names else "" +# ---------------- UID splitting (YAML-driven, implemented in data/UIDSplitter.py) ---------------- +UID_CFG = (J.get("splitting") or {}) +uid_enabled = bool(UID_CFG.get("enabled", False)) +uid_fields = UID_CFG.get("uid_fields", ["run", "luminosityBlock", "event"]) +uid_seed = int(UID_CFG.get("seed", 0)) +uid_n_buckets = int(UID_CFG.get("n_buckets", 10000)) +uid_scheme = (UID_CFG.get("scheme") or {}) + +uid_intervals = None +uid_splitter = None +if uid_enabled: + uid_splitter = UIDSplitter( + uid_fields=tuple(uid_fields), + seed=uid_seed, + n_buckets=uid_n_buckets, + ) + + # build bucket intervals (inline; no extra helper, no extra checks) + keys = list(uid_scheme.keys()) + fracs = [float((uid_scheme[k] or {}).get("fraction", 0.0)) for k in keys] + + sizes = [int(math.floor(f * uid_n_buckets)) for f in fracs] + sizes[-1] += uid_n_buckets - sum(sizes) + + uid_intervals = {} + lo = 0 + for k, sz in zip(keys, sizes): + uid_intervals[k] = (lo, lo + int(sz)) + lo += int(sz) + eval_key = "final_eval" + eval_interval = uid_intervals[eval_key] + + print(f"[UID] enabled=True fields={uid_fields} seed={uid_seed} n_buckets={uid_n_buckets}") + print(f"[UID] scheme intervals: {uid_intervals}") + print(f"[UID] PNN eval split '{eval_key}' -> {eval_interval}") + # ---------------- resolve loaders ---------------- from data.RDataLoader import RDataLoader from data.SelectionView import SelectionView @@ -220,15 +258,6 @@ def list_and_exit(): J["id"], ) -plot_dir = os.path.join( - user.plot_directory, - "PNN_training_closure", - cfg_base + ("_for_debug" if args.for_debug else ""), - J["id"], -) -os.makedirs(plot_dir, exist_ok=True) -copyIndexPHP(plot_dir) - # ensure there is a checkpoint (we do not display epoch) latest = tf.train.latest_checkpoint(model_dir) if not latest: @@ -239,6 +268,9 @@ def list_and_exit(): print(f"Trying to load PNN from {model_dir}") try: pnn = PNN.load(model_dir) + # RB: if model is trained with ICP bias, + # it will be loaded with the ICP bias from the saved payload + # even when deleting the use_icp field from the job config except Exception as e: raise RuntimeError(f"Failed to load PNN from {model_dir}") from e print("Success!") @@ -259,6 +291,14 @@ def list_and_exit(): _DeltaA = np.asarray(icp.DeltaA, dtype=np.float64) pnn.set_icp(parameters=_params, combinations=_combs, DeltaA=_DeltaA) +if args.shape_only: + + if not pnn.has_icp(): + raise NotImplementedError("Currently, only allowing shape-only systematics for PNNs trained with ICP bias.") + + print("Removing impact of ICP (shape-only variations).") + pnn.remove_icp_bias() + # ---------------- helpers ---------------- def iterate_epoch(shard_limit=None): shard_counts = [len(getattr(L, "base", L)) for L in loaders] @@ -266,12 +306,32 @@ def iterate_epoch(shard_limit=None): if shard_limit is not None: n_shards = min(n_shards, shard_limit) for shard in range(n_shards): - Xs, Ws = [], [] + Xs, Ws, Os = [], [], [] for L in loaders: - X, w = L.materialize(shard=shard, what="fw") + X, O, w = L.materialize(shard=shard, what="fow") Xs.append(X) + Os.append(O) Ws.append(w.astype(np.float32, copy=False)) - yield Xs, Ws + + if not uid_enabled: + yield Xs, Ws + continue + + # evaluating on 'final_eval' partition only + # follow structure used in training code + Xs_eval, Ws_eval = [], [] + for L, X, w, O in zip(loaders, Xs, Ws, Os): + obs_names = L.observer_names + uid_idx = [obs_names.index(f) for f in uid_fields] + O_uid = O[:, uid_idx] + + lo, hi = eval_interval + m_eval = uid_splitter.mask_from_np(O_uid, list(uid_fields), lo, hi) + + Xs_eval.append(X[m_eval]); Ws_eval.append(w[m_eval]) + + yield Xs_eval, Ws_eval + def nu_tex_from_coords(coords): values = [str(int(np.rint(v))) for v in coords] @@ -358,8 +418,6 @@ def init_histograms(plot_features, n_bp, rebin=1): from matplotlib.gridspec import GridSpec from matplotlib.lines import Line2D -print(f"Writing per-feature closure plots to: {plot_dir}") - from data.plot_options import get_sample_legend, get_short_parameter_name if param_names: label_param_names_latex = [r"\nu_{"+get_short_parameter_name(param_name)+"}" for param_name in param_names] @@ -391,15 +449,12 @@ def init_histograms(plot_features, n_bp, rebin=1): main_legend_y = 0.915 truth_pred_y = 0.895 -# CAT recommends accessible color scheme from Matthew Petroff # CMS style only has the 6-color Petroff scheme -# implemented a quick workaround to use the 10 color scheme - -plt.style.use("petroff10") -cmap = plt.rcParams['axes.prop_cycle'].by_key()['color'] +# stored colors from 10 color scheme in cmap_petroff10_mpl +from data.colors import cmap_petroff10_mpl hep.style.use("CMS") -colors = [cmap[i] for i in range(n_entries)] +colors = [cmap_petroff10_mpl[i] for i in range(n_entries)] colors[nom_idx] = "black" feature_keep = {} @@ -419,155 +474,322 @@ def init_histograms(plot_features, n_bp, rebin=1): lumi_era = era break -for feat in plot_feats: - # changing ROOT latex format (in PLOT_OPTS) to mpl latex format - x_title = PLOT_OPTS.get(feat, {}).get("tex", feat).replace("#","\\") - x_title = fr"${{{x_title}}}$" - logY = PLOT_OPTS.get(feat, {}).get("logY", False) - - edges = np.asarray(bins[feat], dtype=np.float64) - n_bins = len(edges) - 1 - x_min, x_max = float(edges[0]), float(edges[-1]) - centers = 0.5 * (edges[1:] + edges[:-1]) - widths = edges[1:] - edges[:-1] - - fig = plt.figure(figsize=(8, 12)) - gs = GridSpec(2, 1, height_ratios=[3, 1], hspace=0.03) - ax_top = fig.add_subplot(gs[0]) - ax_bot = fig.add_subplot(gs[1], sharex=ax_top) - fig.subplots_adjust(top=axes_top) - - # Figure-level header above the plot: sample + nuisance parameters. - fig.text( - 0.5, - 0.965, - legend_mapping_line, - ha="center", - va="top", - fontsize=18, - weight="bold", +def make_pnn_closure_plots(): + + plot_dir = os.path.join( + user.plot_directory, + "PNN_training_closure", + cfg_base + ("_for_debug" if args.for_debug else ""), + J["id"], ) - # Top: histograms - max_y = 0.0 - handles = [] - labels = [] + if args.shape_only: + plot_dir += "_shape" - for k, nu in enumerate(base_points): - y = true_h[feat][:, k].astype(np.float64) - y2 = true_h2[feat][:, k].astype(np.float64) - y_pred = pred_h[feat][:, k].astype(np.float64) + print(f"Writing per-feature closure plots to: {plot_dir}") - err = np.sqrt(y2) + os.makedirs(plot_dir, exist_ok=True) + copyIndexPHP(plot_dir) - # plot predicted as stepped line - # use edges for step plotting - step_x = np.concatenate([edges[:-1], edges[-1:]]) - step_y = np.concatenate([y_pred, y_pred[-1:]]) - h_line, = ax_top.step(step_x, step_y, where="post", color=colors[k], linewidth=2) + for feat in plot_feats: + # changing ROOT latex format (in PLOT_OPTS) to mpl latex format + x_title = PLOT_OPTS.get(feat, {}).get("tex", feat).replace("#","\\") + x_title = fr"${{{x_title}}}$" + logY = PLOT_OPTS.get(feat, {}).get("logY", False) + + edges = np.asarray(bins[feat], dtype=np.float64) + n_bins = len(edges) - 1 + x_min, x_max = float(edges[0]), float(edges[-1]) + centers = 0.5 * (edges[1:] + edges[:-1]) + widths = edges[1:] - edges[:-1] + + fig = plt.figure(figsize=(8, 12)) + gs = GridSpec(2, 1, height_ratios=[3, 1], hspace=0.03) + ax_top = fig.add_subplot(gs[0]) + ax_bot = fig.add_subplot(gs[1], sharex=ax_top) + fig.subplots_adjust(top=axes_top) + + # Figure-level header above the plot: sample + nuisance parameters. + fig.text( + 0.5, + 0.965, + legend_mapping_line, + ha="center", + va="top", + fontsize=18, + weight="bold", + ) - # plot truth as markers with errorbars at bin centers - h_err = ax_top.errorbar(centers, y, yerr=err, fmt="o", color=colors[k], markersize=4, label=nu_tex_from_coords(nu)) + # Top: histograms + max_y = 0.0 + handles = [] + labels = [] + + for k, nu in enumerate(base_points): + y = true_h[feat][:, k].astype(np.float64) + y2 = true_h2[feat][:, k].astype(np.float64) + y_pred = pred_h[feat][:, k].astype(np.float64) + + err = np.sqrt(y2) + + # plot predicted as stepped line + # use edges for step plotting + step_x = np.concatenate([edges[:-1], edges[-1:]]) + step_y = np.concatenate([y_pred, y_pred[-1:]]) + h_line, = ax_top.step(step_x, step_y, where="post", color=colors[k], linewidth=2) + + handles.append(h_line) + labels.append(nu_tex_from_coords(nu)) + + max_y = max(max_y, np.nanmax(y_pred)) + + # if shape-only, not plotting the truth which will always include the total XS + if not args.shape_only: + # plot truth as markers with errorbars at bin centers + h_err = ax_top.errorbar(centers, y, yerr=err, fmt="o", color=colors[k], markersize=4, label=nu_tex_from_coords(nu)) + max_y = max(max_y, np.nanmax(y)) + + if logY: + ax_top.set_yscale("log") + y_min = max(0.1, 0.3) + y_max = max(1.0, 1.2 * max_y) if max_y > 0 else 1.0 + ax_top.set_ylim(y_min, y_max) + else: + ax_top.set_ylim(0.0, 1.2 * max_y if max_y > 0 else 1.0) - handles.append(h_line) - labels.append(nu_tex_from_coords(nu)) + ax_top.set_ylabel("Events") + ax_top.tick_params(labelbottom=False) - max_y = max(max_y, np.nanmax(y)) + # CMS label area + hep.cms.label("Preliminary" if MAKE_PUBLIC_PLOTS else "Internal", data=False, year = lumi_era, ax=ax_top, loc=0, fontsize=14) + # hep.mpl_magic() - if logY: - ax_top.set_yscale("log") - y_min = max(0.1, 0.3) - y_max = max(1.0, 1.2 * max_y) if max_y > 0 else 1.0 - ax_top.set_ylim(y_min, y_max) - else: - ax_top.set_ylim(0.0, 1.2 * max_y if max_y > 0 else 1.0) - - ax_top.set_ylabel("Events") - ax_top.tick_params(labelbottom=False) - - # CMS label area - hep.cms.label("Preliminary" if MAKE_PUBLIC_PLOTS else "Internal", data=False, year = lumi_era, ax=ax_top, loc=0, fontsize=14) - # hep.mpl_magic() - - # Bottom: ratios to nominal - h_nom = true_h[feat][:, nom_idx].astype(np.float64) - denom = h_nom.copy() - denom[denom == 0] = np.nan - - max_dev = 0.0 - for k in range(n_entries): - y = true_h[feat][:, k].astype(np.float64) - y_pred = pred_h[feat][:, k].astype(np.float64) - - r_true = y / denom - r_pred = y_pred / denom - - err = np.sqrt(true_h2[feat][:, k].astype(np.float64)) - r_err = err / denom - - ax_bot.errorbar(centers, r_true, yerr=r_err, fmt="o", color=colors[k], markersize=4) - step_x = np.concatenate([edges[:-1], edges[-1:]]) - step_y = np.concatenate([r_pred, r_pred[-1:]]) - ax_bot.step(step_x, step_y, where="post", color=colors[k], linewidth=2) - - # compute max deviation - valid = np.isfinite(r_true) - if np.any(valid): - max_dev = max(max_dev, np.nanmax(np.abs(r_true[valid] - 1.0))) - validp = np.isfinite(r_pred) - if np.any(validp): - max_dev = max(max_dev, np.nanmax(np.abs(r_pred[validp] - 1.0))) - - if max_dev <= 0.0: - r_min, r_max = 0.9, 1.1 - else: - half_range = 1.3 * max_dev - r_min = 1.0 - half_range - r_max = 1.0 + half_range - - ax_bot.set_ylim(r_min, r_max) - ax_bot.set_ylabel("var / nominal") - ax_bot.set_xlabel(x_title) - ax_bot.axhline(1.0, color="k", linestyle="--") - - # Figure-level legend in the same top area as the mapping line. - fig.legend( - handles, - labels, - ncol=n_cols, - loc="upper center", - bbox_to_anchor=(0.5, main_legend_y), - frameon=False, - fontsize=18, - handlelength=2.0, - columnspacing=1.4, - ) + # Bottom: ratios to nominal + h_nom = true_h[feat][:, nom_idx].astype(np.float64) + denom = h_nom.copy() + denom[denom == 0] = np.nan - # Marker/line meaning centered below the basis-point legend. - truth_pred_handles = [ - Line2D([], [], color="black", marker="o", linestyle="None", markersize=8, label="truth"), - Line2D([], [], color="black", linestyle="-", linewidth=2, label="prediction"), - ] - - fig.legend( - truth_pred_handles, - ["truth", "prediction"], - ncol=2, - loc="lower center", - bbox_to_anchor=(0.5, truth_pred_y), - frameon=False, - fontsize=14, - handlelength=2.0, - columnspacing=1.8, + max_dev = 0.0 + for k in range(n_entries): + y = true_h[feat][:, k].astype(np.float64) + y_pred = pred_h[feat][:, k].astype(np.float64) + + r_true = y / denom + r_pred = y_pred / denom + + err = np.sqrt(true_h2[feat][:, k].astype(np.float64)) + r_err = err / denom + + # not plotting truth when plotting shape-only + if not args.shape_only: + ax_bot.errorbar(centers, r_true, yerr=r_err, fmt="o", color=colors[k], markersize=4) + # compute max deviation + valid = np.isfinite(r_true) + if np.any(valid): + max_dev = max(max_dev, np.nanmax(np.abs(r_true[valid] - 1.0))) + + step_x = np.concatenate([edges[:-1], edges[-1:]]) + step_y = np.concatenate([r_pred, r_pred[-1:]]) + ax_bot.step(step_x, step_y, where="post", color=colors[k], linewidth=2) + + validp = np.isfinite(r_pred) + if np.any(validp): + max_dev = max(max_dev, np.nanmax(np.abs(r_pred[validp] - 1.0))) + + if max_dev <= 0.0: + r_min, r_max = 0.9, 1.1 + else: + half_range = 1.3 * max_dev + r_min = 1.0 - half_range + r_max = 1.0 + half_range + + ax_bot.set_ylim(r_min, r_max) + ax_bot.set_ylabel("var / nominal") + ax_bot.set_xlabel(x_title) + # ax_bot.axhline(1.0, color="k", linestyle="--") + + # Figure-level legend in the same top area as the mapping line. + fig.legend( + handles, + labels, + ncol=n_cols, + loc="upper center", + bbox_to_anchor=(0.5, main_legend_y), + frameon=False, + fontsize=18, + handlelength=2.0, + columnspacing=1.4, + ) + + # Marker/line meaning centered below the basis-point legend. + truth_pred_handles = [ + Line2D([], [], color="black", marker="o", linestyle="None", markersize=8, label="truth"), + Line2D([], [], color="black", linestyle="-", linewidth=2, label="prediction"), + ] + + fig.legend( + truth_pred_handles, + ["truth", "prediction"], + ncol=2, + loc="lower center", + bbox_to_anchor=(0.5, truth_pred_y), + frameon=False, + fontsize=14, + handlelength=2.0, + columnspacing=1.8, + ) + + out_png = os.path.join(plot_dir, f"{feat}.png") + out_pdf = os.path.join(plot_dir, f"{feat}.pdf") + plt.savefig(out_png, bbox_inches="tight") + plt.savefig(out_pdf, bbox_inches="tight") + plt.close(fig) + + feature_keep[feat] = True + + +def make_pnn_chi2_plots(): + + plot_dir = os.path.join( + user.plot_directory, + "PNN_prediction_diagnostics", + cfg_base + ("_for_debug" if args.for_debug else ""), + J["id"], ) - out_png = os.path.join(plot_dir, f"{feat}.png") - out_pdf = os.path.join(plot_dir, f"{feat}.pdf") - plt.savefig(out_png, bbox_inches="tight") - plt.savefig(out_pdf, bbox_inches="tight") - plt.close(fig) + if args.shape_only: + plot_dir += "_shape" + + copyIndexPHP(plot_dir) + + for feat in plot_feats: + # changing ROOT latex format (in PLOT_OPTS) to mpl latex format + x_title = PLOT_OPTS.get(feat, {}).get("tex", feat).replace("#","\\") + x_title = fr"${{{x_title}}}$" + logY = PLOT_OPTS.get(feat, {}).get("logY", False) + + edges = np.asarray(bins[feat], dtype=np.float64) + n_bins = len(edges) - 1 + x_min, x_max = float(edges[0]), float(edges[-1]) + centers = 0.5 * (edges[1:] + edges[:-1]) + widths = edges[1:] - edges[:-1] + + fig = plt.figure(figsize=(8, 12)) + gs = GridSpec(2, 1, height_ratios=[3, 1], hspace=0.03) + ax_top = fig.add_subplot(gs[0]) + ax_bot = fig.add_subplot(gs[1], sharex=ax_top) + fig.subplots_adjust(top=axes_top) + + # Figure-level header above the plot: sample + nuisance parameters. + fig.text( + 0.5, + 0.965, + legend_mapping_line, + ha="center", + va="top", + fontsize=18, + weight="bold", + ) + + # Top: histograms + max_y = 0.0 + handles = [] + labels = [] + + for k, nu in enumerate(base_points): + + y = true_h[feat][:, k].astype(np.float64) + y2 = true_h2[feat][:, k].astype(np.float64) + y_pred = pred_h[feat][:, k].astype(np.float64) + + err = np.sqrt(y2) + + # plot predicted as stepped line + # use edges for step plotting + step_x = np.concatenate([edges[:-1], edges[-1:]]) + step_y = np.concatenate([y_pred, y_pred[-1:]]) + h_line, = ax_top.step(step_x, step_y, where="post", color=colors[k], linewidth=2) + + # plot truth as markers with errorbars at bin centers + # h_err = ax_top.errorbar(centers, y, yerr=err, fmt="o", color=colors[k], markersize=4, label=nu_tex_from_coords(nu)) + + handles.append(h_line) + labels.append(nu_tex_from_coords(nu)) + + max_y = max(max_y, np.nanmax(y)) + + if logY: + ax_top.set_yscale("log") + y_min = max(0.1, 0.3) + y_max = max(1.0, 1.2 * max_y) if max_y > 0 else 1.0 + ax_top.set_ylim(y_min, y_max) + else: + ax_top.set_ylim(0.0, 1.2 * max_y if max_y > 0 else 1.0) + + ax_top.set_ylabel("Events") + ax_top.tick_params(labelbottom=False) + + # CMS label area + hep.cms.label("Preliminary" if MAKE_PUBLIC_PLOTS else "Internal", data=False, year = lumi_era, ax=ax_top, loc=0, fontsize=14) + # hep.mpl_magic() + + # Bottom: ratios to nominal + h_nom = true_h[feat][:, nom_idx].astype(np.float64) + denom = h_nom.copy() + denom[denom == 0] = np.nan + + max_dev = 0.0 + for k in range(n_entries): + + y = true_h[feat][:, k].astype(np.float64) + y_pred = pred_h[feat][:, k].astype(np.float64) + # err = np.sqrt(true_h2[feat][:, k].astype(np.float64)) + + from ML.TFMC.tfmc_plot_true_model import safe_divide + chi_2 = safe_divide(np.square((y_pred - h_nom)),h_nom) + + step_x = np.concatenate([edges[:-1], edges[-1:]]) + step_y = np.concatenate([chi_2, chi_2[-1:]]) + ax_bot.step(step_x, step_y, where="post", color=colors[k], linewidth=2) + + validp = np.isfinite(chi_2) + if np.any(validp): + max_dev = max(max_dev, np.nanmax(np.abs(chi_2[validp]))) + + if max_dev <= 0.0: + r_max = 0.1 + else: + half_range = 1.3 * max_dev + r_max = half_range + + ax_bot.set_ylim(0.0, r_max) + ax_bot.set_ylabel(r"$\Delta^2(var,nom)/\sigma_{nom}^2$") + ax_bot.set_xlabel(x_title) + + # Figure-level legend in the same top area as the mapping line. + fig.legend( + handles, + labels, + ncol=n_cols, + loc="upper center", + bbox_to_anchor=(0.5, main_legend_y), + frameon=False, + fontsize=18, + handlelength=2.0, + columnspacing=1.4, + ) + + out_png = os.path.join(plot_dir, f"{feat}.png") + out_pdf = os.path.join(plot_dir, f"{feat}.pdf") + plt.savefig(out_png, bbox_inches="tight") + plt.savefig(out_pdf, bbox_inches="tight") + plt.close(fig) + + feature_keep[feat] = True + +make_pnn_closure_plots() - feature_keep[feat] = True +make_pnn_chi2_plots() syncer.sync() print("Done.") diff --git a/ML/TFMC/tfmc_training_closure_mpl.py b/ML/TFMC/tfmc_training_closure_mpl.py index 73f3674b..81c49b9a 100644 --- a/ML/TFMC/tfmc_training_closure_mpl.py +++ b/ML/TFMC/tfmc_training_closure_mpl.py @@ -27,9 +27,10 @@ from data.colors import cmap_petroff10_mpl from data.plot_options import plot_options as PLOT_OPTS from ML.TFMC.TFMC import TFMC +from data.UIDSplitter import UIDSplitter LOGGER = logging.getLogger(__name__) - +MAKE_PUBLIC_PLOTS = False def list_jobs_and_exit(cfg: dict[str, Any], args: argparse.Namespace) -> None: """List TFMC jobs and exit.""" @@ -44,7 +45,7 @@ def list_jobs_and_exit(cfg: dict[str, Any], args: argparse.Namespace) -> None: script = os.path.basename(__file__) for job in jobs: - LOGGER.info("python %s %s --job %s", script, args.config, job["id"]) + print(f"python {__file__} {args.config} --job {job['id']}") raise SystemExit(0) @@ -221,7 +222,7 @@ def make_feature_plot( ax.grid(True, alpha=0.25) - hep.cms.label("Internal", ax=ax) + hep.cms.label("Preliminary" if MAKE_PUBLIC_PLOTS else "Internal", ax=ax) class_handles = [ Line2D([], [], color=color, linewidth=2.0, label=class_name) @@ -235,9 +236,10 @@ def make_feature_plot( Line2D([], [], color="black", linewidth=2.0, label="prediction"), ] + from data.plot_options import get_sample_legend fig.legend( class_handles, - class_names, + ["$"+get_sample_legend(class_name).replace('#','\\')+"$" for class_name in class_names], loc="upper center", bbox_to_anchor=(0.5, 0.98), ncol=min(4, len(class_names)), @@ -269,7 +271,7 @@ def main() -> None: logging.basicConfig(level=logging.INFO, format="[%(levelname)s] %(message)s") parser = argparse.ArgumentParser( - description="Plot TFMC training-closure curves from a trained classifier." + description="Plot TFMC training-closure curves from a trained classifier on a held-out test dataset." ) parser.add_argument("config", help="Path to global YAML config") parser.add_argument("--job", default=None, help="TFMC classifier job id to run") @@ -333,6 +335,42 @@ def main() -> None: if args.small: n_shards = min(n_shards, 1) + # ---------------- UID splitting (YAML-driven, implemented in data/UIDSplitter.py) ---------------- + UID_CFG = (job.get("splitting") or {}) + uid_enabled = bool(UID_CFG.get("enabled", False)) + uid_fields = UID_CFG.get("uid_fields", ["run", "luminosityBlock", "event"]) + uid_seed = int(UID_CFG.get("seed", 0)) + uid_n_buckets = int(UID_CFG.get("n_buckets", 10000)) + uid_scheme = (UID_CFG.get("scheme") or {}) + + uid_intervals = None + uid_splitter = None + if uid_enabled: + uid_splitter = UIDSplitter( + uid_fields=tuple(uid_fields), + seed=uid_seed, + n_buckets=uid_n_buckets, + ) + + # build bucket intervals (inline; no extra helper, no extra checks) + keys = list(uid_scheme.keys()) + fracs = [float((uid_scheme[k] or {}).get("fraction", 0.0)) for k in keys] + + sizes = [int(math.floor(f * uid_n_buckets)) for f in fracs] + sizes[-1] += uid_n_buckets - sum(sizes) + + uid_intervals = {} + lo = 0 + for k, sz in zip(keys, sizes): + uid_intervals[k] = (lo, lo + int(sz)) + lo += int(sz) + eval_key = "final_eval" + eval_interval = uid_intervals[eval_key] + + print(f"[UID] enabled=True fields={uid_fields} seed={uid_seed} n_buckets={uid_n_buckets}") + print(f"[UID] scheme intervals: {uid_intervals}") + print(f"[UID] PNN eval split '{eval_key}' -> {eval_interval}") + LOGGER.info("Iterating over %d shard(s) across %d classes.", n_shards, n_classes) for shard in range(n_shards): @@ -340,12 +378,23 @@ def main() -> None: Ys: list[np.ndarray] = [] Ws: list[np.ndarray] = [] for class_idx, loader in enumerate(loaders): - X, w = loader.materialize(shard=shard, what="fw") + X, o, w = loader.materialize(shard=shard, what="fow") y = np.zeros((len(X), n_classes), dtype=np.float32) y[:, class_idx] = 1.0 - Xs.append(X) - Ys.append(y) - Ws.append(w) + + if not uid_enabled: + Xs.append(X) + Ys.append(y) + Ws.append(w) + else: + obs_names = loader.observer_names + uid_idx = [obs_names.index(f) for f in uid_fields] + O_uid = o[:, uid_idx] + + lo, hi = eval_interval + m_eval = uid_splitter.mask_from_np(O_uid, list(uid_fields), lo, hi) + + Xs.append(X[m_eval]); Ys.append(y[m_eval]); Ws.append(w[m_eval]) X_all = np.concatenate(Xs, axis=0) if Xs else np.empty((0, len(feature_names))) y_all = np.concatenate(Ys, axis=0) if Ys else np.empty((0, n_classes)) diff --git a/configs/binned_v8_rate/binned_2016APV_rate.yaml b/configs/binned_v8_rate/binned_2016APV_rate.yaml new file mode 100644 index 00000000..3c123109 --- /dev/null +++ b/configs/binned_v8_rate/binned_2016APV_rate.yaml @@ -0,0 +1,746 @@ +version: binned_v8 + +defaults: + module_samples: "data.samples_RunII" + default_binning: + - ["tr_ttbar_mass", [300, 400, 500, 650, 1500]] + - ["tr_ttbar_y", [-2.5, -1.2, -0.8, -0.4, 0.4, 0.8, 1.2, 2.5]] + +likelihood: + binned: + - id: SR_2016APV + data: + id: Data_2016APV + sample: Data_2016APV + classes: + - id: TTLep_pow_2016APV + sample: TTLep_pow_2016APV + POI: + job: ich_NG_PDF4LHC21_6_TTLep_pow_2016APV + type: ich + parameters: [c0, c1, c2, c3, c4, c5] + systematics: + - id: signal_strength + type: lnN + value: 0.036 # twice the relative uncertainty on the ATLAS measurement + parameters: [nu_norm_ttbar] + floating: true + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + - id: L1Prefire + type: icph + job: icph_TTLep_pow_2016APV_L1Prefire + parameters: [nu_l1prefire] + - id: PU + type: icph + job: icph_TTLep_pow_2016APV_PU + parameters: [nu_pu] + - id: MuSF + type: icph + job: icph_TTLep_pow_2016APV_MuSF + parameters: [nu_MuSF] + - id: EleSF + type: icph + job: icph_TTLep_pow_2016APV_EleSF + parameters: [nu_EleSF] + - id: BTag_b + type: icph + job: icph_TTLep_pow_2016APV_BTag_b + parameters: [nu_btag_b] + - id: BTag_l + type: icph + job: icph_TTLep_pow_2016APV_BTag_l + parameters: [nu_btag_l] + - id: Scales + type: icph + job: icph_TTLep_pow_2016APV_scales + parameters: [nu_mu_ren, nu_mu_fac] + - id: ShowerISR + type: icph + job: icph_TTLep_pow_2016APV_showerISR + parameters: [nu_showerISR] + - id: ShowerFSR + type: icph + job: icph_TTLep_pow_2016APV_showerFSR + parameters: [nu_showerFSR] + - id: AlphaS + type: icph + job: icph_TTLep_pow_2016APV_alphaS + parameters: [nu_alphaS] + - id: CMS_res_j_0 + type: icph + job: icph_TTLep_pow_2016APV_CMS_res_j_0_2016APV + parameters: [nu_CMS_res_j_0] + - id: CMS_res_j_1 + type: icph + job: icph_TTLep_pow_2016APV_CMS_res_j_1_2016APV + parameters: [nu_CMS_res_j_1] + - id: CMS_res_j_2 + type: icph + job: icph_TTLep_pow_2016APV_CMS_res_j_2_2016APV + parameters: [nu_CMS_res_j_2] + - id: CMS_res_j_3 + type: icph + job: icph_TTLep_pow_2016APV_CMS_res_j_3_2016APV + parameters: [nu_CMS_res_j_3] + - id: CMS_res_j_4 + type: icph + job: icph_TTLep_pow_2016APV_CMS_res_j_4_2016APV + parameters: [nu_CMS_res_j_4] + - id: CMS_res_j_5 + type: icph + job: icph_TTLep_pow_2016APV_CMS_res_j_5_2016APV + parameters: [nu_CMS_res_j_5] + - id: CMS_scale_j_FlavorPureBottom + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom + parameters: [nu_CMS_scale_j_FlavorPureBottom] + - id: CMS_scale_j_FlavorPureCharm + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm + parameters: [nu_CMS_scale_j_FlavorPureCharm] + - id: CMS_scale_j_FlavorPureGluon + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon + parameters: [nu_CMS_scale_j_FlavorPureGluon] + - id: CMS_scale_j_FlavorPureQuark + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark + parameters: [nu_CMS_scale_j_FlavorPureQuark] + - id: CMS_scale_j_Regrouped_Absolute_2016APV + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + - id: CMS_scale_j_Regrouped_Absolute + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + - id: CMS_scale_j_Regrouped_BBEC1_2016APV + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + - id: CMS_scale_j_Regrouped_BBEC1 + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + - id: CMS_scale_j_Regrouped_EC2_2016APV + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + - id: CMS_scale_j_Regrouped_EC2 + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + - id: CMS_scale_j_Regrouped_HF_2016APV + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + - id: CMS_scale_j_Regrouped_HF + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF + parameters: [nu_CMS_scale_j_Regrouped_HF] + - id: CMS_scale_j_Regrouped_RelativeBal + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + - id: CMS_scale_j_Regrouped_RelativeSample_2016 + type: icph + job: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + - id: Uncl + type: icph + job: icph_TTLep_pow_2016APV_Uncl + parameters: [nu_Uncl] + + - id: SingleTop_2016APV + sample: SingleTop_2016APV + POI: + job: ich_nominal_SingleTop_2016APV + type: ich + systematics: + - id: nu_norm_SingleTop + type: lnN + value: 0.08 + parameters: [nu_norm_SingleTop] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: DrellYan_LO_HTbinned_2016APV + sample: DrellYan_LO_HTbinned_2016APV + POI: + job: ich_nominal_DrellYan_LO_HTbinned_2016APV + type: ich + systematics: + - id: nu_norm_DrellYan + type: lnN + value: 0.06 + parameters: [nu_norm_DrellYan] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: TTSemi_pow_2016APV + sample: TTSemi_pow_2016APV + POI: + job: ich_nominal_TTSemi_pow_2016APV + type: ich + systematics: + - id: nu_norm_TTSemi + type: lnN + value: 0.13 + parameters: [nu_norm_TTSemi] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + +jobs: + - id: ich_NG_PDF4LHC21_6_TTLep_pow_2016APV + type: ich + region: SR_2016APV + process: TTLep_pow_2016APV + pdf: + #pdf_n: [1, 2, 4, 5, 10, 12] + #pdf_type: PODBasis + pdf_n: [1,2,3,4,5,6] + pdf_type: PODBasis + pdf_basis: gluon_POD_nongluon_PDF4LHC21 + + - id: icph_TTLep_pow_2016APV_L1Prefire + type: icph + region: SR_2016APV + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [ 0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016APV + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + + - id: icph_TTLep_pow_2016APV_PU + type: icph + region: SR_2016APV + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016APV + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + - id: icph_TTLep_pow_2016APV_MuSF + type: icph + region: SR_2016APV + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + - id: icph_TTLep_pow_2016APV_EleSF + type: icph + region: SR_2016APV + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + + - id: icph_TTLep_pow_2016APV_BTag_b + type: icph + region: SR_2016APV + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + + - id: icph_TTLep_pow_2016APV_BTag_l + type: icph + region: SR_2016APV + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + - id: icph_TTLep_pow_2016APV_scales + type: icph + region: SR_2016APV + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac2p0"] + + - id: icph_TTLep_pow_2016APV_showerISR + type: icph + region: SR_2016APV + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr2p0_fsr1p0"] + + - id: icph_TTLep_pow_2016APV_showerFSR + type: icph + region: SR_2016APV + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr1p0_fsr2p0"] + + - id: icph_TTLep_pow_2016APV_alphaS + type: icph + region: SR_2016APV + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["pdf_alphas_up"] + + - id: icph_TTLep_pow_2016APV_CMS_res_j_0_2016APV + type: icph + region: SR_2016APV + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_0_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_0_2016APV_up + + - id: icph_TTLep_pow_2016APV_CMS_res_j_1_2016APV + type: icph + region: SR_2016APV + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_1_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_1_2016APV_up + + - id: icph_TTLep_pow_2016APV_CMS_res_j_2_2016APV + type: icph + region: SR_2016APV + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_2_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_2_2016APV_up + + - id: icph_TTLep_pow_2016APV_CMS_res_j_3_2016APV + type: icph + region: SR_2016APV + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_3_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_3_2016APV_up + + - id: icph_TTLep_pow_2016APV_CMS_res_j_4_2016APV + type: icph + region: SR_2016APV + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_4_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_4_2016APV_up + + - id: icph_TTLep_pow_2016APV_CMS_res_j_5_2016APV + type: icph + region: SR_2016APV + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_5_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_5_2016APV_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom_up + + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016 + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_up + + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016 + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1 + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016 + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2 + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016 + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal_up + + - id: icph_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016 + type: icph + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016_up + + - id: icph_TTLep_pow_2016APV_Uncl + type: icph + region: SR_2016APV + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_Uncl_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_Uncl_up + + - id: ich_nominal_SingleTop_2016APV + type: ich + region: SR_2016APV + process: SingleTop_2016APV + + - id: ich_nominal_DrellYan_LO_HTbinned_2016APV + type: ich + region: SR_2016APV + process: DrellYan_LO_HTbinned_2016APV + + - id: ich_nominal_TTSemi_pow_2016APV + type: ich + region: SR_2016APV + process: TTSemi_pow_2016APV \ No newline at end of file diff --git a/configs/binned_v8_rate/binned_2016_rate.yaml b/configs/binned_v8_rate/binned_2016_rate.yaml new file mode 100644 index 00000000..a91b83de --- /dev/null +++ b/configs/binned_v8_rate/binned_2016_rate.yaml @@ -0,0 +1,746 @@ +version: binned_v8 + +defaults: + module_samples: "data.samples_RunII" + default_binning: + - ["tr_ttbar_mass", [300, 400, 500, 650, 1500]] + - ["tr_ttbar_y", [-2.5, -1.2, -0.8, -0.4, 0.4, 0.8, 1.2, 2.5]] + +likelihood: + binned: + - id: SR_2016 + data: + id: Data_2016 + sample: Data_2016 + classes: + - id: TTLep_pow_2016 + sample: TTLep_pow_2016 + POI: + job: ich_NG_PDF4LHC21_6_TTLep_pow_2016 + type: ich + parameters: [c0, c1, c2, c3, c4, c5] + systematics: + - id: signal_strength + type: lnN + value: 0.036 # twice the relative uncertainty on the ATLAS measurement + parameters: [nu_norm_ttbar] + floating: true + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + - id: L1Prefire + type: icph + job: icph_TTLep_pow_2016_L1Prefire + parameters: [nu_l1prefire] + - id: PU + type: icph + job: icph_TTLep_pow_2016_PU + parameters: [nu_pu] + - id: MuSF + type: icph + job: icph_TTLep_pow_2016_MuSF + parameters: [nu_MuSF] + - id: EleSF + type: icph + job: icph_TTLep_pow_2016_EleSF + parameters: [nu_EleSF] + - id: BTag_b + type: icph + job: icph_TTLep_pow_2016_BTag_b + parameters: [nu_btag_b] + - id: BTag_l + type: icph + job: icph_TTLep_pow_2016_BTag_l + parameters: [nu_btag_l] + - id: Scales + type: icph + job: icph_TTLep_pow_2016_scales + parameters: [nu_mu_ren, nu_mu_fac] + - id: ShowerISR + type: icph + job: icph_TTLep_pow_2016_showerISR + parameters: [nu_showerISR] + - id: ShowerFSR + type: icph + job: icph_TTLep_pow_2016_showerFSR + parameters: [nu_showerFSR] + - id: AlphaS + type: icph + job: icph_TTLep_pow_2016_alphaS + parameters: [nu_alphaS] + - id: CMS_res_j_0 + type: icph + job: icph_TTLep_pow_2016_CMS_res_j_0_2016 + parameters: [nu_CMS_res_j_0] + - id: CMS_res_j_1 + type: icph + job: icph_TTLep_pow_2016_CMS_res_j_1_2016 + parameters: [nu_CMS_res_j_1] + - id: CMS_res_j_2 + type: icph + job: icph_TTLep_pow_2016_CMS_res_j_2_2016 + parameters: [nu_CMS_res_j_2] + - id: CMS_res_j_3 + type: icph + job: icph_TTLep_pow_2016_CMS_res_j_3_2016 + parameters: [nu_CMS_res_j_3] + - id: CMS_res_j_4 + type: icph + job: icph_TTLep_pow_2016_CMS_res_j_4_2016 + parameters: [nu_CMS_res_j_4] + - id: CMS_res_j_5 + type: icph + job: icph_TTLep_pow_2016_CMS_res_j_5_2016 + parameters: [nu_CMS_res_j_5] + - id: CMS_scale_j_FlavorPureBottom + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_FlavorPureBottom + parameters: [nu_CMS_scale_j_FlavorPureBottom] + - id: CMS_scale_j_FlavorPureCharm + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_FlavorPureCharm + parameters: [nu_CMS_scale_j_FlavorPureCharm] + - id: CMS_scale_j_FlavorPureGluon + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_FlavorPureGluon + parameters: [nu_CMS_scale_j_FlavorPureGluon] + - id: CMS_scale_j_FlavorPureQuark + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_FlavorPureQuark + parameters: [nu_CMS_scale_j_FlavorPureQuark] + - id: CMS_scale_j_Regrouped_Absolute_2016 + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + - id: CMS_scale_j_Regrouped_Absolute + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + - id: CMS_scale_j_Regrouped_BBEC1_2016 + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + - id: CMS_scale_j_Regrouped_BBEC1 + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + - id: CMS_scale_j_Regrouped_EC2_2016 + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + - id: CMS_scale_j_Regrouped_EC2 + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + - id: CMS_scale_j_Regrouped_HF_2016 + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + - id: CMS_scale_j_Regrouped_HF + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_HF + parameters: [nu_CMS_scale_j_Regrouped_HF] + - id: CMS_scale_j_Regrouped_RelativeBal + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + - id: CMS_scale_j_Regrouped_RelativeSample_2016 + type: icph + job: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + - id: Uncl + type: icph + job: icph_TTLep_pow_2016_Uncl + parameters: [nu_Uncl] + + - id: SingleTop_2016 + sample: SingleTop_2016 + POI: + job: ich_nominal_SingleTop_2016 + type: ich + systematics: + - id: nu_norm_SingleTop + type: lnN + value: 0.08 + parameters: [nu_norm_SingleTop] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: DrellYan_LO_HTbinned_2016 + sample: DrellYan_LO_HTbinned_2016 + POI: + job: ich_nominal_DrellYan_LO_HTbinned_2016 + type: ich + systematics: + - id: nu_norm_DrellYan + type: lnN + value: 0.06 + parameters: [nu_norm_DrellYan] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: TTSemi_pow_2016 + sample: TTSemi_pow_2016 + POI: + job: ich_nominal_TTSemi_pow_2016 + type: ich + systematics: + - id: nu_norm_TTSemi + type: lnN + value: 0.13 + parameters: [nu_norm_TTSemi] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + +jobs: + - id: ich_NG_PDF4LHC21_6_TTLep_pow_2016 + type: ich + region: SR_2016 + process: TTLep_pow_2016 + pdf: + #pdf_n: [1, 2, 4, 5, 10, 12] + #pdf_type: PODBasis + pdf_n: [1,2,3,4,5,6] + pdf_type: PODBasis + pdf_basis: gluon_POD_nongluon_PDF4LHC21 + + - id: icph_TTLep_pow_2016_L1Prefire + type: icph + region: SR_2016 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [ 0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + + - id: icph_TTLep_pow_2016_PU + type: icph + region: SR_2016 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + - id: icph_TTLep_pow_2016_MuSF + type: icph + region: SR_2016 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + - id: icph_TTLep_pow_2016_EleSF + type: icph + region: SR_2016 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + + - id: icph_TTLep_pow_2016_BTag_b + type: icph + region: SR_2016 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + + - id: icph_TTLep_pow_2016_BTag_l + type: icph + region: SR_2016 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + - id: icph_TTLep_pow_2016_scales + type: icph + region: SR_2016 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac2p0"] + + - id: icph_TTLep_pow_2016_showerISR + type: icph + region: SR_2016 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr2p0_fsr1p0"] + + - id: icph_TTLep_pow_2016_showerFSR + type: icph + region: SR_2016 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr1p0_fsr2p0"] + + - id: icph_TTLep_pow_2016_alphaS + type: icph + region: SR_2016 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["pdf_alphas_up"] + + - id: icph_TTLep_pow_2016_CMS_res_j_0_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_0_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_0_2016_up + + - id: icph_TTLep_pow_2016_CMS_res_j_1_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_1_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_1_2016_up + + - id: icph_TTLep_pow_2016_CMS_res_j_2_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_2_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_2_2016_up + + - id: icph_TTLep_pow_2016_CMS_res_j_3_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_3_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_3_2016_up + + - id: icph_TTLep_pow_2016_CMS_res_j_4_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_4_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_4_2016_up + + - id: icph_TTLep_pow_2016_CMS_res_j_5_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_5_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_5_2016_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_FlavorPureBottom + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureBottom_up + + + - id: icph_TTLep_pow_2016_CMS_scale_j_FlavorPureCharm + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureCharm_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_FlavorPureGluon + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureGluon_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_FlavorPureQuark + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureQuark_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_up + + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1 + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2 + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_HF + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal_up + + - id: icph_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016 + type: icph + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016_up + + - id: icph_TTLep_pow_2016_Uncl + type: icph + region: SR_2016 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_Uncl_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_Uncl_up + + - id: ich_nominal_SingleTop_2016 + type: ich + region: SR_2016 + process: SingleTop_2016 + + - id: ich_nominal_DrellYan_LO_HTbinned_2016 + type: ich + region: SR_2016 + process: DrellYan_LO_HTbinned_2016 + + - id: ich_nominal_TTSemi_pow_2016 + type: ich + region: SR_2016 + process: TTSemi_pow_2016 \ No newline at end of file diff --git a/configs/binned_v8_rate/binned_2017_rate.yaml b/configs/binned_v8_rate/binned_2017_rate.yaml new file mode 100644 index 00000000..9a5c63da --- /dev/null +++ b/configs/binned_v8_rate/binned_2017_rate.yaml @@ -0,0 +1,731 @@ +version: binned_v8 + +defaults: + module_samples: "data.samples_RunII" + default_binning: + - ["tr_ttbar_mass", [300, 400, 500, 650, 1500]] + - ["tr_ttbar_y", [-2.5, -1.2, -0.8, -0.4, 0.4, 0.8, 1.2, 2.5]] + +likelihood: + binned: + - id: SR_2017 + data: + id: Data_2017 + sample: Data_2017 + classes: + - id: TTLep_pow_2017 + sample: TTLep_pow_2017 + POI: + job: ich_NG_PDF4LHC21_6_TTLep_pow_2017 + type: ich + parameters: [c0, c1, c2, c3, c4, c5] + systematics: + - id: signal_strength + type: lnN + value: 0.036 # twice the relative uncertainty on the ATLAS measurement + parameters: [nu_norm_ttbar] + floating: true + - id: Lumi_151617 + type: lnN + value: 0.0055 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0061 + parameters: [nu_lumi_15161718] + - id: L1Prefire + type: icph + job: icph_TTLep_pow_2017_L1Prefire + parameters: [nu_l1prefire] + - id: PU + type: icph + job: icph_TTLep_pow_2017_PU + parameters: [nu_pu] + - id: MuSF + type: icph + job: icph_TTLep_pow_2017_MuSF + parameters: [nu_MuSF] + - id: EleSF + type: icph + job: icph_TTLep_pow_2017_EleSF + parameters: [nu_EleSF] + - id: BTag_b + type: icph + job: icph_TTLep_pow_2017_BTag_b + parameters: [nu_btag_b] + - id: BTag_l + type: icph + job: icph_TTLep_pow_2017_BTag_l + parameters: [nu_btag_l] + - id: Scales + type: icph + job: icph_TTLep_pow_2017_scales + parameters: [nu_mu_ren, nu_mu_fac] + - id: ShowerISR + type: icph + job: icph_TTLep_pow_2017_showerISR + parameters: [nu_showerISR] + - id: ShowerFSR + type: icph + job: icph_TTLep_pow_2017_showerFSR + parameters: [nu_showerFSR] + - id: AlphaS + type: icph + job: icph_TTLep_pow_2017_alphaS + parameters: [nu_alphaS] + - id: CMS_res_j_0 + type: icph + job: icph_TTLep_pow_2017_CMS_res_j_0_2017 + parameters: [nu_CMS_res_j_0] + - id: CMS_res_j_1 + type: icph + job: icph_TTLep_pow_2017_CMS_res_j_1_2017 + parameters: [nu_CMS_res_j_1] + - id: CMS_res_j_2 + type: icph + job: icph_TTLep_pow_2017_CMS_res_j_2_2017 + parameters: [nu_CMS_res_j_2] + - id: CMS_res_j_3 + type: icph + job: icph_TTLep_pow_2017_CMS_res_j_3_2017 + parameters: [nu_CMS_res_j_3] + - id: CMS_res_j_4 + type: icph + job: icph_TTLep_pow_2017_CMS_res_j_4_2017 + parameters: [nu_CMS_res_j_4] + - id: CMS_res_j_5 + type: icph + job: icph_TTLep_pow_2017_CMS_res_j_5_2017 + parameters: [nu_CMS_res_j_5] + - id: CMS_scale_j_FlavorPureBottom + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_FlavorPureBottom + parameters: [nu_CMS_scale_j_FlavorPureBottom] + - id: CMS_scale_j_FlavorPureCharm + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_FlavorPureCharm + parameters: [nu_CMS_scale_j_FlavorPureCharm] + - id: CMS_scale_j_FlavorPureGluon + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_FlavorPureGluon + parameters: [nu_CMS_scale_j_FlavorPureGluon] + - id: CMS_scale_j_FlavorPureQuark + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_FlavorPureQuark + parameters: [nu_CMS_scale_j_FlavorPureQuark] + - id: CMS_scale_j_Regrouped_Absolute_2017 + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2017] + - id: CMS_scale_j_Regrouped_Absolute + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + - id: CMS_scale_j_Regrouped_BBEC1_2017 + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2017] + - id: CMS_scale_j_Regrouped_BBEC1 + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + - id: CMS_scale_j_Regrouped_EC2_2017 + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2017] + - id: CMS_scale_j_Regrouped_EC2 + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + - id: CMS_scale_j_Regrouped_HF_2017 + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017 + parameters: [nu_CMS_scale_j_Regrouped_HF_2017] + - id: CMS_scale_j_Regrouped_HF + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_HF + parameters: [nu_CMS_scale_j_Regrouped_HF] + - id: CMS_scale_j_Regrouped_RelativeBal + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + - id: CMS_scale_j_Regrouped_RelativeSample_2017 + type: icph + job: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2017] + - id: Uncl + type: icph + job: icph_TTLep_pow_2017_Uncl + parameters: [nu_Uncl] + + - id: SingleTop_2017 + sample: SingleTop_2017 + POI: + job: ich_nominal_SingleTop_2017 + type: ich + systematics: + - id: nu_norm_SingleTop + type: lnN + value: 0.08 + parameters: [nu_norm_SingleTop] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: DrellYan_LO_HTbinned_2017 + sample: DrellYan_LO_HTbinned_2017 + POI: + job: ich_nominal_DrellYan_LO_HTbinned_2017 + type: ich + systematics: + - id: nu_norm_DrellYan + type: lnN + value: 0.06 + parameters: [nu_norm_DrellYan] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: TTSemi_pow_2017 + sample: TTSemi_pow_2017 + POI: + job: ich_nominal_TTSemi_pow_2017 + type: ich + systematics: + - id: nu_norm_TTSemi + type: lnN + value: 0.13 + parameters: [nu_norm_TTSemi] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + +jobs: + - id: ich_NG_PDF4LHC21_6_TTLep_pow_2017 + type: ich + region: SR_2017 + process: TTLep_pow_2017 + pdf: + #pdf_n: [1, 2, 4, 5, 10, 12] + #pdf_type: PODBasis + pdf_n: [1,2,3,4,5,6] + pdf_type: PODBasis + pdf_basis: gluon_POD_nongluon_PDF4LHC21 + + - id: icph_TTLep_pow_2017_L1Prefire + type: icph + region: SR_2017 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [ 0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2017 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + + - id: icph_TTLep_pow_2017_PU + type: icph + region: SR_2017 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2017 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + - id: icph_TTLep_pow_2017_MuSF + type: icph + region: SR_2017 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2017 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + - id: icph_TTLep_pow_2017_EleSF + type: icph + region: SR_2017 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2017 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + + - id: icph_TTLep_pow_2017_BTag_b + type: icph + region: SR_2017 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + + - id: icph_TTLep_pow_2017_BTag_l + type: icph + region: SR_2017 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + - id: icph_TTLep_pow_2017_scales + type: icph + region: SR_2017 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac2p0"] + + - id: icph_TTLep_pow_2017_showerISR + type: icph + region: SR_2017 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr2p0_fsr1p0"] + + - id: icph_TTLep_pow_2017_showerFSR + type: icph + region: SR_2017 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr1p0_fsr2p0"] + + - id: icph_TTLep_pow_2017_alphaS + type: icph + region: SR_2017 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["pdf_alphas_up"] + + - id: icph_TTLep_pow_2017_CMS_res_j_0_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_0_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_0_2017_up + + - id: icph_TTLep_pow_2017_CMS_res_j_1_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_1_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_1_2017_up + + - id: icph_TTLep_pow_2017_CMS_res_j_2_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_2_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_2_2017_up + + - id: icph_TTLep_pow_2017_CMS_res_j_3_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_3_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_3_2017_up + + - id: icph_TTLep_pow_2017_CMS_res_j_4_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_4_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_4_2017_up + + - id: icph_TTLep_pow_2017_CMS_res_j_5_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_5_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_5_2017_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_FlavorPureBottom + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureBottom_up + + + - id: icph_TTLep_pow_2017_CMS_scale_j_FlavorPureCharm + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureCharm_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_FlavorPureGluon + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureGluon_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_FlavorPureQuark + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureQuark_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2017] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_up + + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2017] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1 + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2017] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2 + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_HF_2017] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_HF + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal_up + + - id: icph_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017 + type: icph + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2017] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017_up + + - id: icph_TTLep_pow_2017_Uncl + type: icph + region: SR_2017 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_Uncl_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_Uncl_up + + - id: ich_nominal_SingleTop_2017 + type: ich + region: SR_2017 + process: SingleTop_2017 + + - id: ich_nominal_DrellYan_LO_HTbinned_2017 + type: ich + region: SR_2017 + process: DrellYan_LO_HTbinned_2017 + + - id: ich_nominal_TTSemi_pow_2017 + type: ich + region: SR_2017 + process: TTSemi_pow_2017 \ No newline at end of file diff --git a/configs/binned_v8_rate/binned_2018_rate.yaml b/configs/binned_v8_rate/binned_2018_rate.yaml new file mode 100644 index 00000000..d6555be6 --- /dev/null +++ b/configs/binned_v8_rate/binned_2018_rate.yaml @@ -0,0 +1,715 @@ +version: binned_v8 + +defaults: + module_samples: "data.samples_RunII" + default_binning: + - ["tr_ttbar_mass", [300, 400, 500, 650, 1500]] + - ["tr_ttbar_y", [-2.5, -1.2, -0.8, -0.4, 0.4, 0.8, 1.2, 2.5]] + +likelihood: + binned: + - id: SR_2018 + data: + id: Data_2018 + sample: Data_2018 + classes: + - id: TTLep_pow_2018 + sample: TTLep_pow_2018 + POI: + job: ich_NG_PDF4LHC21_6_TTLep_pow_2018 + type: ich + parameters: [c0, c1, c2, c3, c4, c5] + systematics: + - id: signal_strength + type: lnN + value: 0.036 # twice the relative uncertainty on the ATLAS measurement + parameters: [nu_norm_ttbar] + floating: true + - id: Lumi_15161718 + type: lnN + value: 0.0084 + parameters: [nu_lumi_15161718] + - id: L1Prefire + type: icph + job: icph_TTLep_pow_2018_L1Prefire + parameters: [nu_l1prefire] + - id: PU + type: icph + job: icph_TTLep_pow_2018_PU + parameters: [nu_pu] + - id: MuSF + type: icph + job: icph_TTLep_pow_2018_MuSF + parameters: [nu_MuSF] + - id: EleSF + type: icph + job: icph_TTLep_pow_2018_EleSF + parameters: [nu_EleSF] + - id: BTag_b + type: icph + job: icph_TTLep_pow_2018_BTag_b + parameters: [nu_btag_b] + - id: BTag_l + type: icph + job: icph_TTLep_pow_2018_BTag_l + parameters: [nu_btag_l] + - id: Scales + type: icph + job: icph_TTLep_pow_2018_scales + parameters: [nu_mu_ren, nu_mu_fac] + shape_only: true + - id: ShowerISR + type: icph + job: icph_TTLep_pow_2018_showerISR + parameters: [nu_showerISR] + - id: ShowerFSR + type: icph + job: icph_TTLep_pow_2018_showerFSR + parameters: [nu_showerFSR] + - id: AlphaS + type: icph + job: icph_TTLep_pow_2018_alphaS + parameters: [nu_alphaS] + - id: CMS_res_j_0 + type: icph + job: icph_TTLep_pow_2018_CMS_res_j_0_2018 + parameters: [nu_CMS_res_j_0] + - id: CMS_res_j_1 + type: icph + job: icph_TTLep_pow_2018_CMS_res_j_1_2018 + parameters: [nu_CMS_res_j_1] + - id: CMS_res_j_2 + type: icph + job: icph_TTLep_pow_2018_CMS_res_j_2_2018 + parameters: [nu_CMS_res_j_2] + - id: CMS_res_j_3 + type: icph + job: icph_TTLep_pow_2018_CMS_res_j_3_2018 + parameters: [nu_CMS_res_j_3] + - id: CMS_res_j_4 + type: icph + job: icph_TTLep_pow_2018_CMS_res_j_4_2018 + parameters: [nu_CMS_res_j_4] + - id: CMS_res_j_5 + type: icph + job: icph_TTLep_pow_2018_CMS_res_j_5_2018 + parameters: [nu_CMS_res_j_5] + - id: CMS_scale_j_FlavorPureBottom + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_FlavorPureBottom + parameters: [nu_CMS_scale_j_FlavorPureBottom] + - id: CMS_scale_j_FlavorPureCharm + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_FlavorPureCharm + parameters: [nu_CMS_scale_j_FlavorPureCharm] + - id: CMS_scale_j_FlavorPureGluon + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_FlavorPureGluon + parameters: [nu_CMS_scale_j_FlavorPureGluon] + - id: CMS_scale_j_FlavorPureQuark + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_FlavorPureQuark + parameters: [nu_CMS_scale_j_FlavorPureQuark] + - id: CMS_scale_j_Regrouped_Absolute_2018 + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2018] + - id: CMS_scale_j_Regrouped_Absolute + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + - id: CMS_scale_j_Regrouped_BBEC1_2018 + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2018] + - id: CMS_scale_j_Regrouped_BBEC1 + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + - id: CMS_scale_j_Regrouped_EC2_2018 + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2018] + - id: CMS_scale_j_Regrouped_EC2 + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + - id: CMS_scale_j_Regrouped_HF_2018 + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018 + parameters: [nu_CMS_scale_j_Regrouped_HF_2018] + - id: CMS_scale_j_Regrouped_HF + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_HF + parameters: [nu_CMS_scale_j_Regrouped_HF] + - id: CMS_scale_j_Regrouped_RelativeBal + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + - id: CMS_scale_j_Regrouped_RelativeSample_2018 + type: icph + job: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2018] + - id: Uncl + type: icph + job: icph_TTLep_pow_2018_Uncl + parameters: [nu_Uncl] + + - id: SingleTop_2018 + sample: SingleTop_2018 + POI: + job: ich_nominal_SingleTop_2018 + type: ich + systematics: + - id: nu_norm_SingleTop + type: lnN + value: 0.08 + parameters: [nu_norm_SingleTop] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: DrellYan_LO_HTbinned_2018 + sample: DrellYan_LO_HTbinned_2018 + POI: + job: ich_nominal_DrellYan_LO_HTbinned_2018 + type: ich + systematics: + - id: nu_norm_DrellYan + type: lnN + value: 0.06 + parameters: [nu_norm_DrellYan] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: TTSemi_pow_2018 + sample: TTSemi_pow_2018 + POI: + job: ich_nominal_TTSemi_pow_2018 + type: ich + systematics: + - id: nu_norm_TTSemi + type: lnN + value: 0.13 + parameters: [nu_norm_TTSemi] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + +jobs: + - id: ich_NG_PDF4LHC21_6_TTLep_pow_2018 + type: ich + region: SR_2018 + process: TTLep_pow_2018 + pdf: + #pdf_n: [1, 2, 4, 5, 10, 12] + #pdf_type: PODBasis + pdf_n: [1,2,3,4,5,6] + pdf_type: PODBasis + pdf_basis: gluon_POD_nongluon_PDF4LHC21 + + - id: icph_TTLep_pow_2018_L1Prefire + type: icph + region: SR_2018 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [ 0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2018 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + + - id: icph_TTLep_pow_2018_PU + type: icph + region: SR_2018 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2018 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + - id: icph_TTLep_pow_2018_MuSF + type: icph + region: SR_2018 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2018 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + - id: icph_TTLep_pow_2018_EleSF + type: icph + region: SR_2018 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2018 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + + - id: icph_TTLep_pow_2018_BTag_b + type: icph + region: SR_2018 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + + - id: icph_TTLep_pow_2018_BTag_l + type: icph + region: SR_2018 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [ 0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [ 1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + - id: icph_TTLep_pow_2018_scales + type: icph + region: SR_2018 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac2p0"] + + - id: icph_TTLep_pow_2018_showerISR + type: icph + region: SR_2018 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr2p0_fsr1p0"] + + - id: icph_TTLep_pow_2018_showerFSR + type: icph + region: SR_2018 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr1p0_fsr2p0"] + + - id: icph_TTLep_pow_2018_alphaS + type: icph + region: SR_2018 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["pdf_alphas_up"] + + - id: icph_TTLep_pow_2018_CMS_res_j_0_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_0_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_0_2018_up + + - id: icph_TTLep_pow_2018_CMS_res_j_1_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_1_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_1_2018_up + + - id: icph_TTLep_pow_2018_CMS_res_j_2_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_2_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_2_2018_up + + - id: icph_TTLep_pow_2018_CMS_res_j_3_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_3_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_3_2018_up + + - id: icph_TTLep_pow_2018_CMS_res_j_4_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_4_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_4_2018_up + + - id: icph_TTLep_pow_2018_CMS_res_j_5_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_5_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_5_2018_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_FlavorPureBottom + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureBottom_up + + + - id: icph_TTLep_pow_2018_CMS_scale_j_FlavorPureCharm + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureCharm_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_FlavorPureGluon + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureGluon_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_FlavorPureQuark + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureQuark_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2018] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_up + + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2018] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1 + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2018] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2 + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_HF_2018] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_HF + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal_up + + - id: icph_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018 + type: icph + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2018] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018_up + + - id: icph_TTLep_pow_2018_Uncl + type: icph + region: SR_2018 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_Uncl_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_Uncl_up + + - id: ich_nominal_SingleTop_2018 + type: ich + region: SR_2018 + process: SingleTop_2018 + + - id: ich_nominal_DrellYan_LO_HTbinned_2018 + type: ich + region: SR_2018 + process: DrellYan_LO_HTbinned_2018 + + - id: ich_nominal_TTSemi_pow_2018 + type: ich + region: SR_2018 + process: TTSemi_pow_2018 \ No newline at end of file diff --git a/configs/unbinned_v8_rate/unbinned_2016APV_rate.yaml b/configs/unbinned_v8_rate/unbinned_2016APV_rate.yaml new file mode 100644 index 00000000..ae94efd4 --- /dev/null +++ b/configs/unbinned_v8_rate/unbinned_2016APV_rate.yaml @@ -0,0 +1,2187 @@ +version: unbinned_v8 + +defaults: + module_samples: "data.samples_RunII" + default_features: + - TOP_KINEMATICS + - LEPTON_KINEMATICS + - ASYMMETRY + + splitting: + enabled: true + uid_fields: ["run", "luminosityBlock", "event"] + seed: 42 + n_buckets: 10000 + + scheme: + pnn_train: { fraction: 0.50 } + pnn_val: { fraction: 0.10 } + c2st_train: { fraction: 0.15 } + c2st_val: { fraction: 0.05 } + final_eval: { fraction: 0.20 } + + early_stopping: + enabled: true + patience: 20 # same as current hard-coded + min_delta: 0.0 # improvement threshold; keep 0.0 to match current behavior + mode: "min" # val_loss should decrease + warmup_epochs: 0 # optional: do not early-stop before this epoch + +likelihood: + regions: + - id: SR_2016APV + data: + id: Data_2016APV + sample: Data_2016APV + classifier: + type: tfmc + job: tfmc_2016APV_DY_LO + asimov: [TTLep_pow_2016APV, SingleTop_2016APV, DrellYan_LO_HTbinned_2016APV, TTSemi_pow_2016APV] + classes: + - id: TTLep_pow_2016APV + sample: TTLep_pow_2016APV + POI: + job: bit_NG_PDF4LHC21_6_TTLep_pow_2016APV + type: bit + parameters: [c0, c1, c2, c3, c4, c5] + + systematics: + - id: signal_strength + type: lnN + value: 0.036 # twice the relative uncertainty on the ATLAS measurement + parameters: [nu_norm_ttbar] + floating: true + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + - id: L1Prefire + type: pnn + job: pnn_TTLep_pow_2016APV_L1Prefire + parameters: [nu_l1prefire] + - id: PU + type: pnn + job: pnn_TTLep_pow_2016APV_PU + parameters: [nu_pu] + - id: MuSF + type: pnn + job: pnn_TTLep_pow_2016APV_MuSF + parameters: [nu_MuSF] + - id: EleSF + type: pnn + job: pnn_TTLep_pow_2016APV_EleSF + parameters: [nu_EleSF] + - id: BTag_b + type: pnn + job: pnn_TTLep_pow_2016APV_BTag_b + parameters: [nu_btag_b] + - id: BTag_l + type: pnn + job: pnn_TTLep_pow_2016APV_BTag_l + parameters: [nu_btag_l] + - id: Scales + type: pnn + job: pnn_TTLep_pow_2016APV_scales + shape_only: true + parameters: [nu_mu_ren, nu_mu_fac] + - id: ShowerISR + type: pnn + job: pnn_TTLep_pow_2016APV_showerISR + parameters: [nu_showerISR] + - id: ShowerFSR + type: pnn + job: pnn_TTLep_pow_2016APV_showerFSR + parameters: [nu_showerFSR] + - id: AlphaS + type: pnn + job: pnn_TTLep_pow_2016APV_alphaS + parameters: [nu_alphaS] + - id: CMS_res_j_0 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_res_j_0_2016APV + parameters: [nu_CMS_res_j_0] + - id: CMS_res_j_1 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_res_j_1_2016APV + parameters: [nu_CMS_res_j_1] + - id: CMS_res_j_2 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_res_j_2_2016APV + parameters: [nu_CMS_res_j_2] + - id: CMS_res_j_3 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_res_j_3_2016APV + parameters: [nu_CMS_res_j_3] + - id: CMS_res_j_4 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_res_j_4_2016APV + parameters: [nu_CMS_res_j_4] + - id: CMS_res_j_5 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_res_j_5_2016APV + parameters: [nu_CMS_res_j_5] + - id: CMS_scale_j_FlavorPureBottom + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom + parameters: [nu_CMS_scale_j_FlavorPureBottom] + - id: CMS_scale_j_FlavorPureCharm + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm + parameters: [nu_CMS_scale_j_FlavorPureCharm] + - id: CMS_scale_j_FlavorPureGluon + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon + parameters: [nu_CMS_scale_j_FlavorPureGluon] + - id: CMS_scale_j_FlavorPureQuark + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark + parameters: [nu_CMS_scale_j_FlavorPureQuark] + - id: CMS_scale_j_Regrouped_Absolute_2016APV + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + - id: CMS_scale_j_Regrouped_Absolute + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + - id: CMS_scale_j_Regrouped_BBEC1_2016APV + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + - id: CMS_scale_j_Regrouped_BBEC1 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + - id: CMS_scale_j_Regrouped_EC2_2016APV + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + - id: CMS_scale_j_Regrouped_EC2 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + - id: CMS_scale_j_Regrouped_HF_2016APV + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + - id: CMS_scale_j_Regrouped_HF + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF + parameters: [nu_CMS_scale_j_Regrouped_HF] + - id: CMS_scale_j_Regrouped_RelativeBal + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + - id: CMS_scale_j_Regrouped_RelativeSample_2016 + type: pnn + job: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + - id: Uncl + type: pnn + job: pnn_TTLep_pow_2016APV_Uncl + parameters: [nu_Uncl] + + - id: SingleTop_2016APV + sample: SingleTop_2016APV + systematics: + - id: nu_norm_SingleTop + type: lnN + value: 0.08 + parameters: [nu_norm_SingleTop] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: DrellYan_LO_HTbinned_2016APV + sample: DrellYan_LO_HTbinned_2016APV + systematics: + - id: nu_norm_DrellYan + type: lnN + value: 0.06 + parameters: [nu_norm_DrellYan] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: TTSemi_pow_2016APV + sample: TTSemi_pow_2016APV + systematics: + - id: nu_norm_TTSemi + type: lnN + value: 0.13 + parameters: [nu_norm_TTSemi] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + +jobs: + + - id: tfmc_2016APV + type: classifier + region: SR_2016APV + framework: "tfmc" + data: + classes: [TTLep_pow_2016APV, SingleTop_2016APV, DrellYan_2016APV, TTSemi_pow_2016APV] + model: + activation: relu + hidden_layers: [64, 64] + optim: + epochs: 1000 + phaseout_epochs: 0 + learning_rate: 0.0002 + runtime: + batch_size: -1 # batch = shard (= 1 by default) + extras: + use_scaler: scaler_TTLep_pow_2016APV + output: + filename: "tfmc_2016APV.pkl" + + # combining backgrounds into total bkg component to assist in training + - id: tfmc_2016APV_totalbkg + type: classifier + region: SR_2016APV + framework: "tfmc" + data: + classes: [TTLep_pow_2016APV, Background_2016APV] + model: + activation: relu + hidden_layers: [64, 64] + l1: 0.2 + l2: 0.05 + dropout_rate: 0.25 + optim: + epochs: 1000 + phaseout_epochs: 0 + learning_rate: 0.0002 + runtime: + batch_size: -1 # batch = shard (= 1 by default) + extras: + use_scaler: scaler_TTLep_pow_2016APV + output: + filename: "tfmc_2016APV_totalbkg.pkl" + + - id: tfmc_2016APV_DY_LO + type: classifier + region: SR_2016APV + framework: "tfmc" + data: + classes: [TTLep_pow_2016APV, SingleTop_2016APV, DrellYan_LO_HTbinned_2016APV, TTSemi_pow_2016APV] + model: + activation: relu + hidden_layers: [64, 64] + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + extras: + use_scaler: scaler_TTLep_pow_2016APV + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + output: + filename: "tfmc_2016APV_DY_LO.pkl" + + - id: tfmc_2016APV_DY_LO_small + type: classifier + region: SR_2016APV + framework: "tfmc" + data: + classes: [TTLep_pow_2016APV, SingleTop_2016APV, DrellYan_LO_HTbinned_2016APV, TTSemi_pow_2016APV] + model: + activation: relu + hidden_layers: [128, 128, 128] + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + extras: + use_scaler: scaler_TTLep_pow_2016APV + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + output: + filename: "tfmc_2016APV_DY_LO_small.pkl" + + - id: tfmc_2016APV_DY_LO_strat + type: classifier + region: SR_2016APV + framework: "tfmc" + data: + classes: [TTLep_pow_2016APV, SingleTop_2016APV, DrellYan_LO_HTbinned_2016APV, TTSemi_pow_2016APV] + model: + activation: relu + hidden_layers: [128, 128, 128] + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + stratified: true + extras: + use_scaler: scaler_TTLep_pow_2016APV + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + output: + filename: "tfmc_2016APV_DY_LO_strat.pkl" + + - id: tfmc_2016APV_DY_LO_nologitpriors + type: classifier + region: SR_2016APV + framework: "tfmc" + data: + classes: [TTLep_pow_2016APV, SingleTop_2016APV, DrellYan_LO_HTbinned_2016APV, TTSemi_pow_2016APV] + model: + activation: relu + hidden_layers: [128, 128, 128] + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016APV + output: + filename: "tfmc_2016APV_DY_LO_nologitpriors.pkl" + + - id: tfmc_2016APV_bkgonly + type: classifier + region: SR_2016APV + framework: "tfmc" + data: + classes: [SingleTop_2016APV, DrellYan_LO_HTbinned_2016APV, TTSemi_pow_2016APV] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016APV + output: + filename: "tfmc_2016APV_bkgonly.pkl" + + - id: tfmc_2016APV_SB + type: classifier + region: SR_2016APV + framework: "tfmc" + data: + classes: [TTLep_pow_2016APV, Background_DrellYan_LO_HTbinned_2016APV] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016APV + output: + filename: "tfmc_2016APV_SB.pkl" + + - id: bit_NG_PDF4LHC21_6_TTLep_pow_2016APV + type: bit + region: SR_2016APV + process: TTLep_pow_2016APV + selection: null # optional extra selection layered on top + numba: True + pdf: + pdf_n: [1,2,3,4,5,6] + pdf_type: PODBasis + pdf_basis: gluon_POD_nongluon_PDF4LHC21 + model: + n_trees: 200 + learning_rate: 0.2 + loss: MSE # or "CrossEntropy" + learn_global_score: true + split_mode: "binned" + n_bins: 256 + quantile_bins: true # if True: quantile edges; else uniform edges + runtime: + training_plots: true # keep if you want training plots + output: + filename: "BIT_NG_PDF4LHC21_6_TTLep_pow_2016APV.pkl" + + - id: scaler_TTLep_pow_2016APV + type: scaler + process: TTLep_pow_2016APV + region: SR_2016APV + selection: null + output: + filename: "Scaler_TTLep_pow_2016APV.pkl" + + - id: icp_TTLep_pow_2016APV_L1Prefire + type: icp + region: SR_2016APV + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_L1Prefire.pkl + + - id: pnn_TTLep_pow_2016APV_L1Prefire + type: pnn + region: SR_2016APV + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_L1Prefire + + - id: icp_TTLep_pow_2016APV_PU + type: icp + region: SR_2016APV + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_PU.pkl + + - id: pnn_TTLep_pow_2016APV_PU + type: pnn + region: SR_2016APV + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_PU + + - id: icp_TTLep_pow_2016APV_MuSF + type: icp + region: SR_2016APV + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_MuSF.pkl + - id: pnn_TTLep_pow_2016APV_MuSF + type: pnn + region: SR_2016APV + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_MuSF + - id: icp_TTLep_pow_2016APV_EleSF + type: icp + region: SR_2016APV + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_EleSF.pkl + - id: pnn_TTLep_pow_2016APV_EleSF + type: pnn + region: SR_2016APV + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_EleSF + - id: icp_TTLep_pow_2016APV_BTag_b + type: icp + region: SR_2016APV + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_BTag_b.pkl + - id: pnn_TTLep_pow_2016APV_BTag_b + type: pnn + region: SR_2016APV + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_BTag_b + - id: icp_TTLep_pow_2016APV_BTag_l + type: icp + region: SR_2016APV + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_BTag_l.pkl + - id: pnn_TTLep_pow_2016APV_BTag_l + type: pnn + region: SR_2016APV + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_BTag_l + + - id: icp_TTLep_pow_2016APV_scales + type: icp + region: SR_2016APV + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_scales.pkl + + - id: pnn_TTLep_pow_2016APV_scales + type: pnn + region: SR_2016APV + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2016APV + addweights: ["scale_ren2p0_fac2p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_scales + + - id: icp_TTLep_pow_2016APV_showerISR + type: icp + region: SR_2016APV + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr2p0_fsr1p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_showerISR.pkl + + - id: pnn_TTLep_pow_2016APV_showerISR + type: pnn + region: SR_2016APV + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr2p0_fsr1p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_showerISR + + - id: icp_TTLep_pow_2016APV_showerFSR + type: icp + region: SR_2016APV + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr1p0_fsr2p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_showerFSR.pkl + + - id: pnn_TTLep_pow_2016APV_showerFSR + type: pnn + region: SR_2016APV + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["shower_isr1p0_fsr2p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_showerFSR + + - id: icp_TTLep_pow_2016APV_alphaS + type: icp + region: SR_2016APV + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["pdf_alphas_up"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_alphaS.pkl + + - id: pnn_TTLep_pow_2016APV_alphaS + type: pnn + region: SR_2016APV + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV + addweights: ["pdf_alphas_up"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_alphaS + + - id: icp_TTLep_pow_2016APV_CMS_res_j_0_2016APV + type: icp + region: SR_2016APV + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_0_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_0_2016APV_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_res_j_0_2016APV.pkl + + - id: pnn_TTLep_pow_2016APV_CMS_res_j_0_2016APV + type: pnn + region: SR_2016APV + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_0_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_0_2016APV_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_res_j_0_2016APV + + - id: icp_TTLep_pow_2016APV_CMS_res_j_1_2016APV + type: icp + region: SR_2016APV + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_1_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_1_2016APV_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_res_j_1_2016APV.pkl + - id: pnn_TTLep_pow_2016APV_CMS_res_j_1_2016APV + type: pnn + region: SR_2016APV + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_1_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_1_2016APV_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_res_j_1_2016APV + - id: icp_TTLep_pow_2016APV_CMS_res_j_2_2016APV + type: icp + region: SR_2016APV + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_2_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_2_2016APV_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_res_j_2_2016APV.pkl + - id: pnn_TTLep_pow_2016APV_CMS_res_j_2_2016APV + type: pnn + region: SR_2016APV + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_2_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_2_2016APV_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_res_j_2_2016APV + - id: icp_TTLep_pow_2016APV_CMS_res_j_3_2016APV + type: icp + region: SR_2016APV + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_3_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_3_2016APV_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_res_j_3_2016APV.pkl + - id: pnn_TTLep_pow_2016APV_CMS_res_j_3_2016APV + type: pnn + region: SR_2016APV + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_3_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_3_2016APV_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_res_j_3_2016APV + - id: icp_TTLep_pow_2016APV_CMS_res_j_4_2016APV + type: icp + region: SR_2016APV + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_4_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_4_2016APV_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_res_j_4_2016APV.pkl + - id: pnn_TTLep_pow_2016APV_CMS_res_j_4_2016APV + type: pnn + region: SR_2016APV + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_4_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_4_2016APV_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_res_j_4_2016APV + - id: icp_TTLep_pow_2016APV_CMS_res_j_5_2016APV + type: icp + region: SR_2016APV + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_5_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_5_2016APV_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_res_j_5_2016APV.pkl + - id: pnn_TTLep_pow_2016APV_CMS_res_j_5_2016APV + type: pnn + region: SR_2016APV + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_res_j_5_2016APV_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_res_j_5_2016APV_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_res_j_5_2016APV + - id: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom_up + + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom_up + + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureBottom + - id: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureCharm + - id: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureGluon + - id: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_FlavorPureQuark + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016 + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016 + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_2016 + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_up + + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute_up + + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_Absolute + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016 + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016 + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_2016 + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1 + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1 + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_BBEC1 + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016 + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016 + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_2016 + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2 + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2 + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_EC2 + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016 + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016 + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_2016 + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_HF + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeBal + - id: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016 + type: icp + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016_up + + train_ratio: true + output: + filename: + icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016.pkl + - id: pnn_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016 + type: pnn + region: SR_2016APV + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_CMS_scale_j_Regrouped_RelativeSample_2016 + - id: icp_TTLep_pow_2016APV_Uncl + type: icp + region: SR_2016APV + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_Uncl_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_Uncl_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016APV_Uncl.pkl + - id: pnn_TTLep_pow_2016APV_Uncl + type: pnn + region: SR_2016APV + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016APV_Uncl_down + - coords: [0] + loader: TTLep_pow_2016APV + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016APV_Uncl_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016APV + use_icp: icp_TTLep_pow_2016APV_Uncl + + - id: icp_SingleTop_2016APV_scales + type: icp + region: SR_2016APV + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: SingleTop_2016APV + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: SingleTop_2016APV + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: SingleTop_2016APV + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: SingleTop_2016APV + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: SingleTop_2016APV + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: SingleTop_2016APV + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: SingleTop_2016APV + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: SingleTop_2016APV + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: SingleTop_2016APV + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_SingleTop_2016APV_scales.pkl + + - id: icp_DY_LO_2016APV_scales + type: icp + region: SR_2016APV + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: DrellYan_LO_HTbinned_2016APV + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_DY_LO_2016APV_scales.pkl + + - id: icp_TTSemi_pow_2016APV_scales + type: icp + region: SR_2016APV + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTSemi_pow_2016APV + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_TTSemi_pow_2016APV_scales.pkl \ No newline at end of file diff --git a/configs/unbinned_v8_rate/unbinned_2016_rate.yaml b/configs/unbinned_v8_rate/unbinned_2016_rate.yaml new file mode 100644 index 00000000..51094212 --- /dev/null +++ b/configs/unbinned_v8_rate/unbinned_2016_rate.yaml @@ -0,0 +1,2367 @@ +version: unbinned_v8 + +defaults: + module_samples: "data.samples_RunII" + default_features: + - TOP_KINEMATICS + - LEPTON_KINEMATICS + - ASYMMETRY + + splitting: + enabled: true + uid_fields: ["run", "luminosityBlock", "event"] + seed: 42 + n_buckets: 10000 + + scheme: + pnn_train: { fraction: 0.50 } + pnn_val: { fraction: 0.10 } + c2st_train: { fraction: 0.15 } + c2st_val: { fraction: 0.05 } + final_eval: { fraction: 0.20 } + + early_stopping: + enabled: true + patience: 20 + min_delta: 0.0 # improvement threshold; keep 0.0 to match current behavior + mode: "min" # val_loss should decrease + warmup_epochs: 0 # optional: do not early-stop before this epoch + +likelihood: + regions: + - id: SR_2016 + data: + id: Data_2016 + sample: Data_2016 + classifier: + # does this make sense as "type"? shouldn't it be "framework" to match what's in the job ? + type: tfmc + job: tfmc_2016_DY_LO + asimov: [TTLep_pow_2016, SingleTop_2016, DrellYan_LO_HTbinned_2016, TTSemi_pow_2016] + classes: + - id: TTLep_pow_2016 + sample: TTLep_pow_2016 + POI: + job: bit_NG_PDF4LHC21_6_TTLep_pow_2016 + type: bit + parameters: [c0, c1, c2, c3, c4, c5] + + systematics: + - id: signal_strength + type: lnN + value: 0.036 # twice the relative uncertainty on the ATLAS measurement + parameters: [nu_norm_ttbar] + floating: true + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + - id: L1Prefire + type: pnn + job: pnn_TTLep_pow_2016_L1Prefire + parameters: [nu_l1prefire] + - id: PU + type: pnn + job: pnn_TTLep_pow_2016_PU + parameters: [nu_pu] + - id: MuSF + type: pnn + job: pnn_TTLep_pow_2016_MuSF + parameters: [nu_MuSF] + - id: EleSF + type: pnn + job: pnn_TTLep_pow_2016_EleSF + parameters: [nu_EleSF] + - id: BTag_b + type: pnn + job: pnn_TTLep_pow_2016_BTag_b + parameters: [nu_btag_b] + - id: BTag_l + type: pnn + job: pnn_TTLep_pow_2016_BTag_l + parameters: [nu_btag_l] + - id: Scales + type: pnn + job: pnn_TTLep_pow_2016_scales + shape_only: true + parameters: [nu_mu_ren, nu_mu_fac] + - id: ShowerISR + type: pnn + job: pnn_TTLep_pow_2016_showerISR + parameters: [nu_showerISR] + - id: ShowerFSR + type: pnn + job: pnn_TTLep_pow_2016_showerFSR + parameters: [nu_showerFSR] + - id: AlphaS + type: pnn + job: pnn_TTLep_pow_2016_alphaS + parameters: [nu_alphaS] + - id: CMS_res_j_0 + type: pnn + job: pnn_TTLep_pow_2016_CMS_res_j_0_2016 + parameters: [nu_CMS_res_j_0] + - id: CMS_res_j_1 + type: pnn + job: pnn_TTLep_pow_2016_CMS_res_j_1_2016 + parameters: [nu_CMS_res_j_1] + - id: CMS_res_j_2 + type: pnn + job: pnn_TTLep_pow_2016_CMS_res_j_2_2016 + parameters: [nu_CMS_res_j_2] + - id: CMS_res_j_3 + type: pnn + job: pnn_TTLep_pow_2016_CMS_res_j_3_2016 + parameters: [nu_CMS_res_j_3] + - id: CMS_res_j_4 + type: pnn + job: pnn_TTLep_pow_2016_CMS_res_j_4_2016 + parameters: [nu_CMS_res_j_4] + - id: CMS_res_j_5 + type: pnn + job: pnn_TTLep_pow_2016_CMS_res_j_5_2016 + parameters: [nu_CMS_res_j_5] + - id: CMS_scale_j_FlavorPureBottom + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_FlavorPureBottom + parameters: [nu_CMS_scale_j_FlavorPureBottom] + - id: CMS_scale_j_FlavorPureCharm + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_FlavorPureCharm + parameters: [nu_CMS_scale_j_FlavorPureCharm] + - id: CMS_scale_j_FlavorPureGluon + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_FlavorPureGluon + parameters: [nu_CMS_scale_j_FlavorPureGluon] + - id: CMS_scale_j_FlavorPureQuark + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_FlavorPureQuark + parameters: [nu_CMS_scale_j_FlavorPureQuark] + - id: CMS_scale_j_Regrouped_Absolute_2016 + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + - id: CMS_scale_j_Regrouped_Absolute + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + - id: CMS_scale_j_Regrouped_BBEC1_2016 + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + - id: CMS_scale_j_Regrouped_BBEC1 + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + - id: CMS_scale_j_Regrouped_EC2_2016 + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + - id: CMS_scale_j_Regrouped_EC2 + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + - id: CMS_scale_j_Regrouped_HF_2016 + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + - id: CMS_scale_j_Regrouped_HF + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_HF + parameters: [nu_CMS_scale_j_Regrouped_HF] + - id: CMS_scale_j_Regrouped_RelativeBal + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + - id: CMS_scale_j_Regrouped_RelativeSample_2016 + type: pnn + job: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + - id: Uncl + type: pnn + job: pnn_TTLep_pow_2016_Uncl + parameters: [nu_Uncl] + + - id: SingleTop_2016 + sample: SingleTop_2016 + systematics: + - id: nu_norm_SingleTop + type: lnN + value: 0.08 + parameters: [nu_norm_SingleTop] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: DrellYan_LO_HTbinned_2016 + sample: DrellYan_LO_HTbinned_2016 + systematics: + - id: nu_norm_DrellYan + type: lnN + value: 0.06 + parameters: [nu_norm_DrellYan] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: TTSemi_pow_2016 + sample: TTSemi_pow_2016 + systematics: + - id: nu_norm_TTSemi + type: lnN + value: 0.13 + parameters: [nu_norm_TTSemi] + - id: Lumi_1516 + type: lnN + value: 0.0118 + parameters: [nu_lumi_1516] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + +jobs: + + - id: tfmc_2016 + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_2016, SingleTop_2016, DrellYan_2016, TTSemi_pow_2016] + model: + activation: relu + hidden_layers: [64, 64] + optim: + epochs: 1000 + phaseout_epochs: 0 + learning_rate: 0.0002 + runtime: + batch_size: -1 # batch = shard (= 1 by default) + extras: + use_scaler: scaler_TTLep_pow_2016 + output: + filename: "tfmc_2016.pkl" + + - id: tfmc_2016_DY_LO + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_2016, SingleTop_2016, DrellYan_LO_HTbinned_2016, TTSemi_pow_2016] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016 + output: + filename: "tfmc_2016_DY_LO.pkl" + + - id: tfmc_2016_DY_LO_small + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_2016, SingleTop_2016, DrellYan_LO_HTbinned_2016, TTSemi_pow_2016] + model: + activation: relu + hidden_layers: [64, 64] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016 + output: + filename: "tfmc_2016_DY_LO_small.pkl" + + - id: tfmc_2016_DY_LO_strat + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_2016, SingleTop_2016, DrellYan_LO_HTbinned_2016, TTSemi_pow_2016] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + stratified: true + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016 + output: + filename: "tfmc_2016_DY_LO_strat.pkl" + + - id: tfmc_2016_DY_LO_nologitpriors + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_2016, SingleTop_2016, DrellYan_LO_HTbinned_2016, TTSemi_pow_2016] + model: + activation: relu + hidden_layers: [128, 128, 128] + optim: + epochs: 1000 + phaseout_epochs: 300 + learning_rate: 0.02 + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016 + output: + filename: "tfmc_2016_DY_LO_nologitpriors.pkl" + + - id: tfmc_2016_bkgonly + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [SingleTop_2016, DrellYan_LO_HTbinned_2016, TTSemi_pow_2016] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016 + output: + filename: "tfmc_2016_bkgonly.pkl" + + - id: tfmc_2016_SB + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_2016, Background_DrellYan_LO_HTbinned_2016] + model: + activation: relu + hidden_layers: [128, 128, 128] + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2016 + output: + filename: "tfmc_2016_SB.pkl" + + - id: tfmc_RunII_DY_LO_small + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_RunII, SingleTop_RunII, DrellYan_LO_HTbinned_RunII, TTSemi_pow_RunII] + model: + activation: relu + hidden_layers: [64, 64] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_RunII + output: + filename: "tfmc_RunII_DY_LO_small.pkl" + + - id: tfmc_RunII_bkgonly + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [SingleTop_RunII, DrellYan_LO_HTbinned_RunII, TTSemi_pow_RunII] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_RunII + output: + filename: "tfmc_RunII_bkgonly.pkl" + + - id: tfmc_RunII_SB + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_RunII, Background_DrellYan_LO_HTbinned_RunII] + model: + activation: relu + hidden_layers: [128, 128, 128] + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_RunII + output: + filename: "tfmc_RunII_SB.pkl" + + - id: tfmc_RunII_bkgonly_large + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [SingleTop_RunII, DrellYan_LO_HTbinned_RunII, TTSemi_pow_RunII] + model: + activation: relu + hidden_layers: [128, 128, 128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_RunII + output: + filename: "tfmc_RunII_bkgonly_large.pkl" + + - id: tfmc_RunII_SB_large + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_RunII, Background_DrellYan_LO_HTbinned_RunII] + model: + activation: relu + hidden_layers: [128, 128, 128, 128, 128] + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_RunII + output: + filename: "tfmc_RunII_large.pkl" + + - id: tfmc_RunII_bkgonly_small + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [SingleTop_RunII, DrellYan_LO_HTbinned_RunII, TTSemi_pow_RunII] + model: + activation: relu + hidden_layers: [64, 64] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_RunII + output: + filename: "tfmc_RunII_bkgonly_small.pkl" + + - id: tfmc_RunII_SB_small + type: classifier + region: SR_2016 + framework: "tfmc" + data: + classes: [TTLep_pow_RunII, Background_DrellYan_LO_HTbinned_RunII] + model: + activation: relu + hidden_layers: [64, 64] + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_RunII + output: + filename: "tfmc_RunII_SB_small.pkl" + + - id: bit_NG_PDF4LHC21_6_TTLep_pow_2016 + type: bit + region: SR_2016 + process: TTLep_pow_2016 + selection: null # optional extra selection layered on top + numba: True + pdf: + pdf_n: [1,2,3,4,5,6] + pdf_type: PODBasis + pdf_basis: gluon_POD_nongluon_PDF4LHC21 + model: + n_trees: 200 + learning_rate: 0.2 + loss: MSE # or "CrossEntropy" + learn_global_score: true + split_mode: "binned" + n_bins: 256 + quantile_bins: true # if True: quantile edges; else uniform edges + runtime: + training_plots: true # keep if you want training plots + output: + filename: "BIT_NG_PDF4LHC21_6_TTLep_pow_2016.pkl" + + - id: scaler_TTLep_pow_2016 + type: scaler + process: TTLep_pow_2016 + region: SR_2016 + selection: null + output: + filename: "Scaler_TTLep_pow_2016.pkl" + + - id: scaler_TTLep_pow_RunII + type: scaler + process: TTLep_pow_RunII + region: SR_2016 + selection: null + output: + filename: "Scaler_TTLep_pow_RunII.pkl" + + - id: icp_TTLep_pow_2016_L1Prefire + type: icp + region: SR_2016 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + train_ratio: true + output: + filename: icp_TTLep_pow_2016_L1Prefire.pkl + + - id: pnn_TTLep_pow_2016_L1Prefire + type: pnn + region: SR_2016 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_L1Prefire + + - id: icp_TTLep_pow_2016_PU + type: icp + region: SR_2016 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_PU.pkl + + - id: pnn_TTLep_pow_2016_PU + type: pnn + region: SR_2016 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_PU + + - id: icp_TTLep_pow_2016_MuSF + type: icp + region: SR_2016 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_MuSF.pkl + - id: pnn_TTLep_pow_2016_MuSF + type: pnn + region: SR_2016 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_MuSF + - id: icp_TTLep_pow_2016_EleSF + type: icp + region: SR_2016 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + train_ratio: true + output: + filename: icp_TTLep_pow_2016_EleSF.pkl + - id: pnn_TTLep_pow_2016_EleSF + type: pnn + region: SR_2016 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_EleSF + - id: icp_TTLep_pow_2016_BTag_b + type: icp + region: SR_2016 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + train_ratio: true + output: + filename: icp_TTLep_pow_2016_BTag_b.pkl + - id: pnn_TTLep_pow_2016_BTag_b + type: pnn + region: SR_2016 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_BTag_b + - id: icp_TTLep_pow_2016_BTag_l + type: icp + region: SR_2016 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_BTag_l.pkl + - id: pnn_TTLep_pow_2016_BTag_l + type: pnn + region: SR_2016 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_BTag_l + + - id: icp_TTLep_pow_2016_scales + type: icp + region: SR_2016 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_scales.pkl + + - id: pnn_TTLep_pow_2016_scales + type: pnn + region: SR_2016 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2016 + addweights: ["scale_ren2p0_fac2p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_scales + + - id: icp_TTLep_pow_2016_showerISR + type: icp + region: SR_2016 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr2p0_fsr1p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_showerISR.pkl + + - id: pnn_TTLep_pow_2016_showerISR + type: pnn + region: SR_2016 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr2p0_fsr1p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_showerISR + + - id: icp_TTLep_pow_2016_showerFSR + type: icp + region: SR_2016 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr1p0_fsr2p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_showerFSR.pkl + + - id: pnn_TTLep_pow_2016_showerFSR + type: pnn + region: SR_2016 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["shower_isr1p0_fsr2p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_showerFSR + + - id: icp_TTLep_pow_2016_alphaS + type: icp + region: SR_2016 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["pdf_alphas_up"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_alphaS.pkl + + - id: pnn_TTLep_pow_2016_alphaS + type: pnn + region: SR_2016 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016 + addweights: ["pdf_alphas_up"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_alphaS + + - id: icp_TTLep_pow_2016_CMS_res_j_0_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_0_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_0_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_res_j_0_2016.pkl + + - id: pnn_TTLep_pow_2016_CMS_res_j_0_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_0_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_0_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_res_j_0_2016 + + - id: icp_TTLep_pow_2016_CMS_res_j_1_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_1_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_1_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_res_j_1_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_res_j_1_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_1_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_1_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_res_j_1_2016 + - id: icp_TTLep_pow_2016_CMS_res_j_2_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_2_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_2_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_res_j_2_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_res_j_2_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_2_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_2_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_res_j_2_2016 + - id: icp_TTLep_pow_2016_CMS_res_j_3_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_3_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_3_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_res_j_3_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_res_j_3_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_3_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_3_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_res_j_3_2016 + - id: icp_TTLep_pow_2016_CMS_res_j_4_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_4_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_4_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_res_j_4_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_res_j_4_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_4_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_4_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_res_j_4_2016 + - id: icp_TTLep_pow_2016_CMS_res_j_5_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_5_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_5_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_res_j_5_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_res_j_5_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_res_j_5_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_res_j_5_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_res_j_5_2016 + - id: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureBottom + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureBottom_up + + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureBottom.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_FlavorPureBottom + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureBottom_up + + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureBottom + - id: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureCharm + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureCharm_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureCharm.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_FlavorPureCharm + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureCharm_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureCharm + - id: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureGluon + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureGluon_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureGluon.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_FlavorPureGluon + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureGluon_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureGluon + - id: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureQuark + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureQuark_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureQuark.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_FlavorPureQuark + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_FlavorPureQuark_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_FlavorPureQuark + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2016] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_2016 + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_up + + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute_up + + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_Absolute + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2016] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_2016 + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1 + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1 + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_BBEC1 + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2016] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_2016 + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2 + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2 + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_EC2_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_EC2 + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF_2016] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_HF_2016 + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_HF + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_HF.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_HF + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_HF_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_HF + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeBal + - id: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016 + type: icp + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016_up + + train_ratio: true + output: + filename: + icp_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016.pkl + - id: pnn_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016 + type: pnn + region: SR_2016 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2016] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2016]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_CMS_scale_j_Regrouped_RelativeSample_2016 + - id: icp_TTLep_pow_2016_Uncl + type: icp + region: SR_2016 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_Uncl_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_Uncl_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2016_Uncl.pkl + - id: pnn_TTLep_pow_2016_Uncl + type: pnn + region: SR_2016 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2016_Uncl_down + - coords: [0] + loader: TTLep_pow_2016 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2016_Uncl_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2016 + use_icp: icp_TTLep_pow_2016_Uncl + + - id: icp_SingleTop_2016_scales + type: icp + region: SR_2016 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: SingleTop_2016 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: SingleTop_2016 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: SingleTop_2016 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: SingleTop_2016 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: SingleTop_2016 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: SingleTop_2016 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: SingleTop_2016 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: SingleTop_2016 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: SingleTop_2016 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_SingleTop_2016_scales.pkl + + - id: icp_DY_LO_2016_scales + type: icp + region: SR_2016 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: DrellYan_LO_HTbinned_2016 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_DY_LO_2016_scales.pkl + + - id: icp_TTSemi_pow_2016_scales + type: icp + region: SR_2016 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTSemi_pow_2016 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_TTSemi_pow_2016_scales.pkl \ No newline at end of file diff --git a/configs/unbinned_v8_rate/unbinned_2017_rate.yaml b/configs/unbinned_v8_rate/unbinned_2017_rate.yaml new file mode 100644 index 00000000..52f50947 --- /dev/null +++ b/configs/unbinned_v8_rate/unbinned_2017_rate.yaml @@ -0,0 +1,2174 @@ +version: unbinned_v8 + +defaults: + module_samples: "data.samples_RunII" + default_features: + - TOP_KINEMATICS + - LEPTON_KINEMATICS + - ASYMMETRY + + splitting: + enabled: true + uid_fields: ["run", "luminosityBlock", "event"] + seed: 42 + n_buckets: 10000 + + scheme: + pnn_train: { fraction: 0.50 } + pnn_val: { fraction: 0.10 } + c2st_train: { fraction: 0.15 } + c2st_val: { fraction: 0.05 } + final_eval: { fraction: 0.20 } + + early_stopping: + enabled: true + patience: 20 # same as current hard-coded + min_delta: 0.0 # improvement threshold; keep 0.0 to match current behavior + mode: "min" # val_loss should decrease + warmup_epochs: 0 # optional: do not early-stop before this epoch + +likelihood: + regions: + - id: SR_2017 + data: + id: Data_2017 + sample: Data_2017 + classifier: + type: tfmc + job: tfmc_2017_DY_LO + asimov: [TTLep_pow_2017, SingleTop_2017, DrellYan_LO_HTbinned_2017, TTSemi_pow_2017] + classes: + - id: TTLep_pow_2017 + sample: TTLep_pow_2017 + POI: + job: bit_NG_PDF4LHC21_6_TTLep_pow_2017 + type: bit + parameters: [c0, c1, c2, c3, c4, c5] + + systematics: + - id: signal_strength + type: lnN + value: 0.036 # twice the relative uncertainty on the ATLAS measurement + parameters: [nu_norm_ttbar] + floating: true + - id: Lumi_151617 + type: lnN + value: 0.0055 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0061 + parameters: [nu_lumi_15161718] + - id: L1Prefire + type: pnn + job: pnn_TTLep_pow_2017_L1Prefire + parameters: [nu_l1prefire] + - id: PU + type: pnn + job: pnn_TTLep_pow_2017_PU + parameters: [nu_pu] + - id: MuSF + type: pnn + job: pnn_TTLep_pow_2017_MuSF + parameters: [nu_MuSF] + - id: EleSF + type: pnn + job: pnn_TTLep_pow_2017_EleSF + parameters: [nu_EleSF] + - id: BTag_b + type: pnn + job: pnn_TTLep_pow_2017_BTag_b + parameters: [nu_btag_b] + - id: BTag_l + type: pnn + job: pnn_TTLep_pow_2017_BTag_l + parameters: [nu_btag_l] + - id: Scales + type: pnn + job: pnn_TTLep_pow_2017_scales + shape_only: true + parameters: [nu_mu_ren, nu_mu_fac] + - id: ShowerISR + type: pnn + job: pnn_TTLep_pow_2017_showerISR + parameters: [nu_showerISR] + - id: ShowerFSR + type: pnn + job: pnn_TTLep_pow_2017_showerFSR + parameters: [nu_showerFSR] + - id: AlphaS + type: pnn + job: pnn_TTLep_pow_2017_alphaS + parameters: [nu_alphaS] + - id: CMS_res_j_0 + type: pnn + job: pnn_TTLep_pow_2017_CMS_res_j_0_2017 + parameters: [nu_CMS_res_j_0] + - id: CMS_res_j_1 + type: pnn + job: pnn_TTLep_pow_2017_CMS_res_j_1_2017 + parameters: [nu_CMS_res_j_1] + - id: CMS_res_j_2 + type: pnn + job: pnn_TTLep_pow_2017_CMS_res_j_2_2017 + parameters: [nu_CMS_res_j_2] + - id: CMS_res_j_3 + type: pnn + job: pnn_TTLep_pow_2017_CMS_res_j_3_2017 + parameters: [nu_CMS_res_j_3] + - id: CMS_res_j_4 + type: pnn + job: pnn_TTLep_pow_2017_CMS_res_j_4_2017 + parameters: [nu_CMS_res_j_4] + - id: CMS_res_j_5 + type: pnn + job: pnn_TTLep_pow_2017_CMS_res_j_5_2017 + parameters: [nu_CMS_res_j_5] + - id: CMS_scale_j_FlavorPureBottom + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_FlavorPureBottom + parameters: [nu_CMS_scale_j_FlavorPureBottom] + - id: CMS_scale_j_FlavorPureCharm + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_FlavorPureCharm + parameters: [nu_CMS_scale_j_FlavorPureCharm] + - id: CMS_scale_j_FlavorPureGluon + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_FlavorPureGluon + parameters: [nu_CMS_scale_j_FlavorPureGluon] + - id: CMS_scale_j_FlavorPureQuark + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_FlavorPureQuark + parameters: [nu_CMS_scale_j_FlavorPureQuark] + - id: CMS_scale_j_Regrouped_Absolute_2017 + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2017] + - id: CMS_scale_j_Regrouped_Absolute + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + - id: CMS_scale_j_Regrouped_BBEC1_2017 + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2017] + - id: CMS_scale_j_Regrouped_BBEC1 + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + - id: CMS_scale_j_Regrouped_EC2_2017 + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2017] + - id: CMS_scale_j_Regrouped_EC2 + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + - id: CMS_scale_j_Regrouped_HF_2017 + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017 + parameters: [nu_CMS_scale_j_Regrouped_HF_2017] + - id: CMS_scale_j_Regrouped_HF + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_HF + parameters: [nu_CMS_scale_j_Regrouped_HF] + - id: CMS_scale_j_Regrouped_RelativeBal + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + - id: CMS_scale_j_Regrouped_RelativeSample_2017 + type: pnn + job: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2017] + - id: Uncl + type: pnn + job: pnn_TTLep_pow_2017_Uncl + parameters: [nu_Uncl] + + - id: SingleTop_2017 + sample: SingleTop_2017 + systematics: + - id: nu_norm_SingleTop + type: lnN + value: 0.08 + parameters: [nu_norm_SingleTop] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: DrellYan_LO_HTbinned_2017 + sample: DrellYan_LO_HTbinned_2017 + systematics: + - id: nu_norm_DrellYan + type: lnN + value: 0.06 + parameters: [nu_norm_DrellYan] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: TTSemi_pow_2017 + sample: TTSemi_pow_2017 + systematics: + - id: nu_norm_TTSemi + type: lnN + value: 0.13 + parameters: [nu_norm_TTSemi] + - id: Lumi_151617 + type: lnN + value: 0.0004 + parameters: [nu_lumi_151617] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + +jobs: + + - id: tfmc_2017 + type: classifier + region: SR_2017 + framework: "tfmc" + data: + classes: [TTLep_pow_2017, SingleTop_2017, DrellYan_2017, TTSemi_pow_2017] + model: + activation: relu + hidden_layers: [64, 64] + optim: + epochs: 1000 + phaseout_epochs: 0 + learning_rate: 0.0002 + runtime: + batch_size: -1 # batch = shard (= 1 by default) + extras: + use_scaler: scaler_TTLep_pow_2017 + output: + filename: "tfmc_2017.pkl" + + + # combining backgrounds into total bkg component to assist in training + - id: tfmc_2017_totalbkg + type: classifier + region: SR_2017 + framework: "tfmc" + data: + classes: [TTLep_pow_2017, Background_2017] + model: + activation: relu + hidden_layers: [64, 64] + l1: 0.2 + l2: 0.05 + dropout_rate: 0.25 + optim: + epochs: 1000 + phaseout_epochs: 0 + learning_rate: 0.0002 + runtime: + batch_size: -1 # batch = shard (= 1 by default) + extras: + use_scaler: scaler_TTLep_pow_2017 + output: + filename: "tfmc_2017_totalbkg.pkl" + + - id: tfmc_2017_DY_LO + type: classifier + region: SR_2017 + framework: "tfmc" + data: + classes: [TTLep_pow_2017, SingleTop_2017, DrellYan_LO_HTbinned_2017, TTSemi_pow_2017] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2017 + output: + filename: "tfmc_2017_DY_LO.pkl" + + - id: tfmc_2017_DY_LO_small + type: classifier + region: SR_2017 + framework: "tfmc" + data: + classes: [TTLep_pow_2017, SingleTop_2017, DrellYan_LO_HTbinned_2017, TTSemi_pow_2017] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2017 + output: + filename: "tfmc_2017_DY_LO_small.pkl" + + - id: tfmc_2017_DY_LO_strat + type: classifier + region: SR_2017 + framework: "tfmc" + data: + classes: [TTLep_pow_2017, SingleTop_2017, DrellYan_LO_HTbinned_2017, TTSemi_pow_2017] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + stratified: true + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2017 + output: + filename: "tfmc_2017_DY_LO_strat.pkl" + + - id: tfmc_2017_DY_LO_nologitpriors + type: classifier + region: SR_2017 + framework: "tfmc" + data: + classes: [TTLep_pow_2017, SingleTop_2017, DrellYan_LO_HTbinned_2017, TTSemi_pow_2017] + model: + activation: relu + hidden_layers: [128, 128, 128] + optim: + epochs: 1000 + phaseout_epochs: 300 + learning_rate: 0.02 + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2017 + output: + filename: "tfmc_2017_DY_LO_nologitpriors.pkl" + + - id: tfmc_2017_bkgonly + type: classifier + region: SR_2017 + framework: "tfmc" + data: + classes: [SingleTop_2017, DrellYan_LO_HTbinned_2017, TTSemi_pow_2017] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2017 + output: + filename: "tfmc_2017_bkgonly.pkl" + + - id: tfmc_2017_SB + type: classifier + region: SR_2017 + framework: "tfmc" + data: + classes: [TTLep_pow_2017, Background_DrellYan_LO_HTbinned_2017] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2017 + output: + filename: "tfmc_2017_SB.pkl" + + - id: bit_NG_PDF4LHC21_6_TTLep_pow_2017 + type: bit + region: SR_2017 + process: TTLep_pow_2017 + selection: null # optional extra selection layered on top + numba: True + pdf: + pdf_n: [1,2,3,4,5,6] + pdf_type: PODBasis + pdf_basis: gluon_POD_nongluon_PDF4LHC21 + model: + n_trees: 200 + learning_rate: 0.2 + loss: MSE # or "CrossEntropy" + learn_global_score: true + split_mode: "binned" + n_bins: 256 + quantile_bins: true # if True: quantile edges; else uniform edges + runtime: + training_plots: true # keep if you want training plots + output: + filename: "BIT_NG_PDF4LHC21_6_TTLep_pow_2017.pkl" + + - id: scaler_TTLep_pow_2017 + type: scaler + process: TTLep_pow_2017 + region: SR_2017 + selection: null + output: + filename: "Scaler_TTLep_pow_2017.pkl" + + - id: icp_TTLep_pow_2017_L1Prefire + type: icp + region: SR_2017 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + train_ratio: true + output: + filename: icp_TTLep_pow_2017_L1Prefire.pkl + - id: pnn_TTLep_pow_2017_L1Prefire + type: pnn + region: SR_2017 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_L1Prefire + + - id: icp_TTLep_pow_2017_PU + type: icp + region: SR_2017 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_PU.pkl + + - id: pnn_TTLep_pow_2017_PU + type: pnn + region: SR_2017 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_PU + + - id: icp_TTLep_pow_2017_MuSF + type: icp + region: SR_2017 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_MuSF.pkl + - id: pnn_TTLep_pow_2017_MuSF + type: pnn + region: SR_2017 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_MuSF + - id: icp_TTLep_pow_2017_EleSF + type: icp + region: SR_2017 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + train_ratio: true + output: + filename: icp_TTLep_pow_2017_EleSF.pkl + - id: pnn_TTLep_pow_2017_EleSF + type: pnn + region: SR_2017 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_EleSF + - id: icp_TTLep_pow_2017_BTag_b + type: icp + region: SR_2017 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + train_ratio: true + output: + filename: icp_TTLep_pow_2017_BTag_b.pkl + - id: pnn_TTLep_pow_2017_BTag_b + type: pnn + region: SR_2017 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_BTag_b + - id: icp_TTLep_pow_2017_BTag_l + type: icp + region: SR_2017 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_BTag_l.pkl + - id: pnn_TTLep_pow_2017_BTag_l + type: pnn + region: SR_2017 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_BTag_l + + - id: icp_TTLep_pow_2017_scales + type: icp + region: SR_2017 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_scales.pkl + + - id: pnn_TTLep_pow_2017_scales + type: pnn + region: SR_2017 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2017 + addweights: ["scale_ren2p0_fac2p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_scales + + - id: icp_TTLep_pow_2017_showerISR + type: icp + region: SR_2017 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr2p0_fsr1p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_showerISR.pkl + + - id: pnn_TTLep_pow_2017_showerISR + type: pnn + region: SR_2017 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr2p0_fsr1p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_showerISR + + - id: icp_TTLep_pow_2017_showerFSR + type: icp + region: SR_2017 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr1p0_fsr2p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_showerFSR.pkl + + - id: pnn_TTLep_pow_2017_showerFSR + type: pnn + region: SR_2017 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["shower_isr1p0_fsr2p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_showerFSR + + - id: icp_TTLep_pow_2017_alphaS + type: icp + region: SR_2017 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["pdf_alphas_up"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_alphaS.pkl + + - id: pnn_TTLep_pow_2017_alphaS + type: pnn + region: SR_2017 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017 + addweights: ["pdf_alphas_up"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_alphaS + + - id: icp_TTLep_pow_2017_CMS_res_j_0_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_0_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_0_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_res_j_0_2017.pkl + + - id: pnn_TTLep_pow_2017_CMS_res_j_0_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_0_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_0_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_res_j_0_2017 + + - id: icp_TTLep_pow_2017_CMS_res_j_1_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_1_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_1_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_res_j_1_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_res_j_1_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_1_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_1_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_res_j_1_2017 + - id: icp_TTLep_pow_2017_CMS_res_j_2_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_2_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_2_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_res_j_2_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_res_j_2_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_2_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_2_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_res_j_2_2017 + - id: icp_TTLep_pow_2017_CMS_res_j_3_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_3_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_3_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_res_j_3_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_res_j_3_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_3_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_3_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_res_j_3_2017 + - id: icp_TTLep_pow_2017_CMS_res_j_4_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_4_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_4_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_res_j_4_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_res_j_4_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_4_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_4_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_res_j_4_2017 + - id: icp_TTLep_pow_2017_CMS_res_j_5_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_5_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_5_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_res_j_5_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_res_j_5_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_res_j_5_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_res_j_5_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_res_j_5_2017 + - id: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureBottom + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureBottom_up + + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureBottom.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_FlavorPureBottom + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureBottom_up + + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureBottom + - id: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureCharm + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureCharm_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureCharm.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_FlavorPureCharm + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureCharm_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureCharm + - id: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureGluon + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureGluon_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureGluon.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_FlavorPureGluon + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureGluon_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureGluon + - id: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureQuark + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureQuark_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureQuark.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_FlavorPureQuark + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_FlavorPureQuark_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_FlavorPureQuark + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2017] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2017] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_2017 + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_up + + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute_up + + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_Absolute + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2017] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2017] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_2017 + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1 + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1 + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_BBEC1 + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2017] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2017] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_2017 + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2 + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2 + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_EC2_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_EC2 + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_HF_2017] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_HF_2017] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_HF_2017 + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_HF + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_HF.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_HF + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_HF_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_HF + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeBal + - id: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017 + type: icp + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2017] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017_up + + train_ratio: true + output: + filename: + icp_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017.pkl + - id: pnn_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017 + type: pnn + region: SR_2017 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2017] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2017]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_CMS_scale_j_Regrouped_RelativeSample_2017 + - id: icp_TTLep_pow_2017_Uncl + type: icp + region: SR_2017 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_Uncl_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_Uncl_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2017_Uncl.pkl + - id: pnn_TTLep_pow_2017_Uncl + type: pnn + region: SR_2017 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2017_Uncl_down + - coords: [0] + loader: TTLep_pow_2017 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2017_Uncl_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2017 + use_icp: icp_TTLep_pow_2017_Uncl + + - id: icp_SingleTop_2017_scales + type: icp + region: SR_2017 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: SingleTop_2017 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: SingleTop_2017 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: SingleTop_2017 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: SingleTop_2017 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: SingleTop_2017 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: SingleTop_2017 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: SingleTop_2017 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: SingleTop_2017 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: SingleTop_2017 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_SingleTop_2017_scales.pkl + + - id: icp_DY_LO_2017_scales + type: icp + region: SR_2017 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: DrellYan_LO_HTbinned_2017 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_DY_LO_2017_scales.pkl + + - id: icp_TTSemi_pow_2017_scales + type: icp + region: SR_2017 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTSemi_pow_2017 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_TTSemi_pow_2017_scales.pkl \ No newline at end of file diff --git a/configs/unbinned_v8_rate/unbinned_2018_rate.yaml b/configs/unbinned_v8_rate/unbinned_2018_rate.yaml new file mode 100644 index 00000000..406e8736 --- /dev/null +++ b/configs/unbinned_v8_rate/unbinned_2018_rate.yaml @@ -0,0 +1,2220 @@ +version: unbinned_v8 + +defaults: + module_samples: "data.samples_RunII" + default_features: + - TOP_KINEMATICS + - LEPTON_KINEMATICS + - ASYMMETRY + + splitting: + enabled: true + uid_fields: ["run", "luminosityBlock", "event"] + seed: 42 + n_buckets: 10000 + + scheme: + pnn_train: { fraction: 0.50 } + pnn_val: { fraction: 0.10 } + c2st_train: { fraction: 0.15 } + c2st_val: { fraction: 0.05 } + final_eval: { fraction: 0.20 } + + early_stopping: + enabled: true + patience: 20 # same as current hard-coded + min_delta: 0.0 # improvement threshold; keep 0.0 to match current behavior + mode: "min" # val_loss should decrease + warmup_epochs: 0 # optional: do not early-stop before this epoch + +likelihood: + regions: + - id: SR_2018 + data: + id: Data_2018 + sample: Data_2018 + classifier: + type: tfmc + job: tfmc_2018_DY_LO + asimov: [TTLep_pow_2018, SingleTop_2018, DrellYan_LO_HTbinned_2018, TTSemi_pow_2018] + classes: + - id: TTLep_pow_2018 + sample: TTLep_pow_2018 + POI: + job: bit_NG_PDF4LHC21_6_TTLep_pow_2018 + type: bit + parameters: [c0, c1, c2, c3, c4, c5] + + systematics: + - id: signal_strength + type: lnN + value: 0.036 # twice the relative uncertainty on the ATLAS measurement + parameters: [nu_norm_ttbar] + floating: true + - id: Lumi_15161718 + type: lnN + value: 0.0084 + parameters: [nu_lumi_15161718] + - id: L1Prefire + type: pnn + job: pnn_TTLep_pow_2018_L1Prefire + parameters: [nu_l1prefire] + - id: PU + type: pnn + job: pnn_TTLep_pow_2018_PU + parameters: [nu_pu] + - id: MuSF + type: pnn + job: pnn_TTLep_pow_2018_MuSF + parameters: [nu_MuSF] + - id: EleSF + type: pnn + job: pnn_TTLep_pow_2018_EleSF + parameters: [nu_EleSF] + - id: BTag_b + type: pnn + job: pnn_TTLep_pow_2018_BTag_b + parameters: [nu_btag_b] + - id: BTag_l + type: pnn + job: pnn_TTLep_pow_2018_BTag_l + parameters: [nu_btag_l] + - id: Scales + type: pnn + job: pnn_TTLep_pow_2018_scales_no_pt_ttbar + shape_only: true + parameters: [nu_mu_ren, nu_mu_fac] + - id: ShowerISR + type: pnn + job: pnn_TTLep_pow_2018_showerISR + parameters: [nu_showerISR] + - id: ShowerFSR + type: pnn + job: pnn_TTLep_pow_2018_showerFSR + parameters: [nu_showerFSR] + - id: AlphaS + type: pnn + job: pnn_TTLep_pow_2018_alphaS + parameters: [nu_alphaS] + - id: CMS_res_j_0 + type: pnn + job: pnn_TTLep_pow_2018_CMS_res_j_0_2018 + parameters: [nu_CMS_res_j_0] + - id: CMS_res_j_1 + type: pnn + job: pnn_TTLep_pow_2018_CMS_res_j_1_2018 + parameters: [nu_CMS_res_j_1] + - id: CMS_res_j_2 + type: pnn + job: pnn_TTLep_pow_2018_CMS_res_j_2_2018 + parameters: [nu_CMS_res_j_2] + - id: CMS_res_j_3 + type: pnn + job: pnn_TTLep_pow_2018_CMS_res_j_3_2018 + parameters: [nu_CMS_res_j_3] + - id: CMS_res_j_4 + type: pnn + job: pnn_TTLep_pow_2018_CMS_res_j_4_2018 + parameters: [nu_CMS_res_j_4] + - id: CMS_res_j_5 + type: pnn + job: pnn_TTLep_pow_2018_CMS_res_j_5_2018 + parameters: [nu_CMS_res_j_5] + - id: CMS_scale_j_FlavorPureBottom + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_FlavorPureBottom + parameters: [nu_CMS_scale_j_FlavorPureBottom] + - id: CMS_scale_j_FlavorPureCharm + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_FlavorPureCharm + parameters: [nu_CMS_scale_j_FlavorPureCharm] + - id: CMS_scale_j_FlavorPureGluon + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_FlavorPureGluon + parameters: [nu_CMS_scale_j_FlavorPureGluon] + - id: CMS_scale_j_FlavorPureQuark + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_FlavorPureQuark + parameters: [nu_CMS_scale_j_FlavorPureQuark] + - id: CMS_scale_j_Regrouped_Absolute_2018 + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2018] + - id: CMS_scale_j_Regrouped_Absolute + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + - id: CMS_scale_j_Regrouped_BBEC1_2018 + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2018] + - id: CMS_scale_j_Regrouped_BBEC1 + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + - id: CMS_scale_j_Regrouped_EC2_2018 + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2018] + - id: CMS_scale_j_Regrouped_EC2 + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + - id: CMS_scale_j_Regrouped_HF_2018 + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018 + parameters: [nu_CMS_scale_j_Regrouped_HF_2018] + - id: CMS_scale_j_Regrouped_HF + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_HF + parameters: [nu_CMS_scale_j_Regrouped_HF] + - id: CMS_scale_j_Regrouped_RelativeBal + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + - id: CMS_scale_j_Regrouped_RelativeSample_2018 + type: pnn + job: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2018] + - id: Uncl + type: pnn + job: pnn_TTLep_pow_2018_Uncl + parameters: [nu_Uncl] + + - id: SingleTop_2018 + sample: SingleTop_2018 + systematics: + - id: nu_norm_SingleTop + type: lnN + value: 0.08 + parameters: [nu_norm_SingleTop] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: DrellYan_LO_HTbinned_2018 + sample: DrellYan_LO_HTbinned_2018 + systematics: + - id: nu_norm_DrellYan + type: lnN + value: 0.06 + parameters: [nu_norm_DrellYan] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + + - id: TTSemi_pow_2018 + sample: TTSemi_pow_2018 + systematics: + - id: nu_norm_TTSemi + type: lnN + value: 0.13 + parameters: [nu_norm_TTSemi] + - id: Lumi_15161718 + type: lnN + value: 0.0035 + parameters: [nu_lumi_15161718] + +jobs: + + - id: tfmc_2018 + type: classifier + region: SR_2018 + framework: "tfmc" + data: + classes: [TTLep_pow_2018, SingleTop_2018, DrellYan_2018, TTSemi_pow_2018] + model: + activation: relu + hidden_layers: [64, 64] + optim: + epochs: 1000 + phaseout_epochs: 0 + learning_rate: 0.0002 + runtime: + batch_size: -1 # batch = shard (= 1 by default) + extras: + use_scaler: scaler_TTLep_pow_2018 + output: + filename: "tfmc_2018.pkl" + + + # combining backgrounds into total bkg component to assist in training + - id: tfmc_2018_totalbkg + type: classifier + region: SR_2018 + framework: "tfmc" + data: + classes: [TTLep_pow_2018, Background_2018] + model: + activation: relu + hidden_layers: [64, 64] + l1: 0.2 + l2: 0.05 + dropout_rate: 0.25 + optim: + epochs: 1000 + phaseout_epochs: 0 + learning_rate: 0.0002 + runtime: + batch_size: -1 # batch = shard (= 1 by default) + extras: + use_scaler: scaler_TTLep_pow_2018 + output: + filename: "tfmc_2018_totalbkg.pkl" + + - id: tfmc_2018_DY_LO + type: classifier + region: SR_2018 + framework: "tfmc" + data: + classes: [TTLep_pow_2018, SingleTop_2018, DrellYan_LO_HTbinned_2018, TTSemi_pow_2018] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2018 + output: + filename: "tfmc_2018_DY_LO.pkl" + + - id: tfmc_2018_DY_LO_small + type: classifier + region: SR_2018 + framework: "tfmc" + data: + classes: [TTLep_pow_2018, SingleTop_2018, DrellYan_LO_HTbinned_2018, TTSemi_pow_2018] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2018 + output: + filename: "tfmc_2018_DY_LO_small.pkl" + + - id: tfmc_2018_DY_LO_strat + type: classifier + region: SR_2018 + framework: "tfmc" + data: + classes: [TTLep_pow_2018, SingleTop_2018, DrellYan_LO_HTbinned_2018, TTSemi_pow_2018] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + stratified: true + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2018 + output: + filename: "tfmc_2018_DY_LO_strat.pkl" + + - id: tfmc_2018_DY_LO_nologitpriors + type: classifier + region: SR_2018 + framework: "tfmc" + data: + classes: [TTLep_pow_2018, SingleTop_2018, DrellYan_LO_HTbinned_2018, TTSemi_pow_2018] + model: + activation: relu + hidden_layers: [128, 128, 128] + optim: + epochs: 1000 + phaseout_epochs: 300 + learning_rate: 0.02 + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2018 + output: + filename: "tfmc_2018_DY_LO_nologitpriors.pkl" + + - id: tfmc_2018_bkgonly + type: classifier + region: SR_2018 + framework: "tfmc" + data: + classes: [SingleTop_2018, DrellYan_LO_HTbinned_2018, TTSemi_pow_2018] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2018 + output: + filename: "tfmc_2018_bkgonly.pkl" + + - id: tfmc_2018_SB + type: classifier + region: SR_2018 + framework: "tfmc" + data: + classes: [TTLep_pow_2018, Background_DrellYan_LO_HTbinned_2018] + model: + activation: relu + hidden_layers: [128, 128, 128] + # dropout_rate: 0.25 + optim: + epochs: 500 + phaseout_epochs: 150 + learning_rate: 0.02 + set_logit_priors: true + runtime: + batch_size: 16384 + early_stopping: + enabled: true + patience: 50 + min_delta: 0.0 + mode: "min" + warmup_epochs: 100 + extras: + use_scaler: scaler_TTLep_pow_2018 + output: + filename: "tfmc_2018_SB.pkl" + + - id: bit_NG_PDF4LHC21_6_TTLep_pow_2018 + type: bit + region: SR_2018 + process: TTLep_pow_2018 + selection: null # optional extra selection layered on top + numba: True + pdf: + pdf_n: [1,2,3,4,5,6] + pdf_type: PODBasis + pdf_basis: gluon_POD_nongluon_PDF4LHC21 + model: + n_trees: 200 + learning_rate: 0.2 + loss: MSE # or "CrossEntropy" + learn_global_score: true + split_mode: "binned" + n_bins: 256 + quantile_bins: true # if True: quantile edges; else uniform edges + runtime: + training_plots: true # keep if you want training plots + output: + filename: "BIT_NG_PDF4LHC21_6_TTLep_pow_2018.pkl" + + - id: scaler_TTLep_pow_2018 + type: scaler + process: TTLep_pow_2018 + region: SR_2018 + selection: null + output: + filename: "Scaler_TTLep_pow_2018.pkl" + + - id: scaler_TTLep_pow_2018_no_pt_ttbar + type: scaler + process: TTLep_pow_2018 + region: SR_2018 + selection: null + features: ["TOP_KINEMATICS_NO_PT_TTBAR", "LEPTON_KINEMATICS","ASYMMETRY"] + output: + filename: "Scaler_TTLep_pow_2018_no_pt_ttbar.pkl" + + - id: icp_TTLep_pow_2018_L1Prefire + type: icp + region: SR_2018 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + train_ratio: true + output: + filename: icp_TTLep_pow_2018_L1Prefire.pkl + - id: pnn_TTLep_pow_2018_L1Prefire + type: pnn + region: SR_2018 + parameters: [nu_l1prefire] + combinations: [[nu_l1prefire]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Dn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["L1PreFiringWeight_Nom"] + addweights: ["L1PreFiringWeight_Up"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_L1Prefire + + - id: icp_TTLep_pow_2018_PU + type: icp + region: SR_2018 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_PU.pkl + + - id: pnn_TTLep_pow_2018_PU + type: pnn + region: SR_2018 + parameters: [nu_pu] + combinations: [[nu_pu]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["Pileup_SF"] + addweights: ["Pileup_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_PU + + - id: icp_TTLep_pow_2018_MuSF + type: icp + region: SR_2018 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_MuSF.pkl + - id: pnn_TTLep_pow_2018_MuSF + type: pnn + region: SR_2018 + parameters: [nu_MuSF] + combinations: [[nu_MuSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["lepMu_SF"] + addweights: ["lepMu_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_MuSF + - id: icp_TTLep_pow_2018_EleSF + type: icp + region: SR_2018 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + train_ratio: true + output: + filename: icp_TTLep_pow_2018_EleSF.pkl + - id: pnn_TTLep_pow_2018_EleSF + type: pnn + region: SR_2018 + parameters: [nu_EleSF] + combinations: [[nu_EleSF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["lepEle_SF"] + addweights: ["lepEle_SFUp"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_EleSF + - id: icp_TTLep_pow_2018_BTag_b + type: icp + region: SR_2018 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + train_ratio: true + output: + filename: icp_TTLep_pow_2018_BTag_b.pkl + - id: pnn_TTLep_pow_2018_BTag_b + type: pnn + region: SR_2018 + parameters: [nu_btag_b] + combinations: [[nu_btag_b]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_correlated_heavy_SFUp"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_BTag_b + - id: icp_TTLep_pow_2018_BTag_l + type: icp + region: SR_2018 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_BTag_l.pkl + - id: pnn_TTLep_pow_2018_BTag_l + type: pnn + region: SR_2018 + parameters: [nu_btag_l] + combinations: [[nu_btag_l]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFDn"] + - coords: [0.0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + removeweights: ["btagSF_fixedWP_SF"] + addweights: ["btagSF_fixedWP_SF__CMS_eff_b_light_SFUp"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_BTag_l + + - id: icp_TTLep_pow_2018_scales + type: icp + region: SR_2018 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_scales.pkl + + - id: pnn_TTLep_pow_2018_scales + type: pnn + region: SR_2018 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac2p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_scales + + - id: pnn_TTLep_pow_2018_scales_no_pt_ttbar + type: pnn + region: SR_2018 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTLep_pow_2018 + addweights: ["scale_ren2p0_fac2p0"] + features: ["TOP_KINEMATICS_NO_PT_TTBAR", "LEPTON_KINEMATICS","ASYMMETRY"] + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018_no_pt_ttbar + use_icp: icp_TTLep_pow_2018_scales + + - id: icp_TTLep_pow_2018_showerISR + type: icp + region: SR_2018 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr2p0_fsr1p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_showerISR.pkl + + - id: pnn_TTLep_pow_2018_showerISR + type: pnn + region: SR_2018 + parameters: [nu_showerISR] + combinations: [[nu_showerISR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr0p5_fsr1p0"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr2p0_fsr1p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_showerISR + + - id: icp_TTLep_pow_2018_showerFSR + type: icp + region: SR_2018 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr1p0_fsr2p0"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_showerFSR.pkl + + - id: pnn_TTLep_pow_2018_showerFSR + type: pnn + region: SR_2018 + parameters: [nu_showerFSR] + combinations: [[nu_showerFSR]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr1p0_fsr0p5"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["shower_isr1p0_fsr2p0"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_showerFSR + + - id: icp_TTLep_pow_2018_alphaS + type: icp + region: SR_2018 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["pdf_alphas_up"] + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_alphaS.pkl + + - id: pnn_TTLep_pow_2018_alphaS + type: pnn + region: SR_2018 + parameters: [nu_alphaS] + combinations: [[nu_alphaS]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018 + addweights: ["pdf_alphas_dn"] + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018 + addweights: ["pdf_alphas_up"] + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_alphaS + + - id: icp_TTLep_pow_2018_CMS_res_j_0_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_0_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_0_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_res_j_0_2018.pkl + + - id: pnn_TTLep_pow_2018_CMS_res_j_0_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_res_j_0] + combinations: [[nu_CMS_res_j_0]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_0_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_0_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_res_j_0_2018 + + - id: icp_TTLep_pow_2018_CMS_res_j_1_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_1_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_1_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_res_j_1_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_res_j_1_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_res_j_1] + combinations: [[nu_CMS_res_j_1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_1_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_1_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_res_j_1_2018 + - id: icp_TTLep_pow_2018_CMS_res_j_2_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_2_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_2_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_res_j_2_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_res_j_2_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_res_j_2] + combinations: [[nu_CMS_res_j_2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_2_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_2_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_res_j_2_2018 + - id: icp_TTLep_pow_2018_CMS_res_j_3_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_3_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_3_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_res_j_3_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_res_j_3_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_res_j_3] + combinations: [[nu_CMS_res_j_3]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_3_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_3_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_res_j_3_2018 + - id: icp_TTLep_pow_2018_CMS_res_j_4_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_4_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_4_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_res_j_4_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_res_j_4_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_res_j_4] + combinations: [[nu_CMS_res_j_4]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_4_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_4_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_res_j_4_2018 + - id: icp_TTLep_pow_2018_CMS_res_j_5_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_5_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_5_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_res_j_5_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_res_j_5_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_res_j_5] + combinations: [[nu_CMS_res_j_5]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_res_j_5_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_res_j_5_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_res_j_5_2018 + - id: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureBottom + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureBottom_up + + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureBottom.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_FlavorPureBottom + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureBottom] + combinations: [[nu_CMS_scale_j_FlavorPureBottom]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureBottom_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureBottom_up + + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureBottom + - id: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureCharm + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureCharm_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureCharm.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_FlavorPureCharm + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureCharm] + combinations: [[nu_CMS_scale_j_FlavorPureCharm]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureCharm_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureCharm_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureCharm + - id: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureGluon + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureGluon_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureGluon.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_FlavorPureGluon + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureGluon] + combinations: [[nu_CMS_scale_j_FlavorPureGluon]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureGluon_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureGluon_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureGluon + - id: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureQuark + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureQuark_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureQuark.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_FlavorPureQuark + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_FlavorPureQuark] + combinations: [[nu_CMS_scale_j_FlavorPureQuark]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureQuark_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_FlavorPureQuark_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_FlavorPureQuark + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2018] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_Absolute_2018] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_2018 + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_up + + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_Absolute] + combinations: [[nu_CMS_scale_j_Regrouped_Absolute]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute_up + + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_Absolute + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2018] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1_2018] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_2018 + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1 + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1 + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_BBEC1] + combinations: [[nu_CMS_scale_j_Regrouped_BBEC1]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_BBEC1 + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2018] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_EC2_2018] + combinations: [[nu_CMS_scale_j_Regrouped_EC2_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_2018 + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2 + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2 + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_EC2] + combinations: [[nu_CMS_scale_j_Regrouped_EC2]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_EC2_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_EC2 + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_HF_2018] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_HF_2018] + combinations: [[nu_CMS_scale_j_Regrouped_HF_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_HF_2018 + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_HF + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_HF.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_HF + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_HF] + combinations: [[nu_CMS_scale_j_Regrouped_HF]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_HF_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_HF + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_RelativeBal] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeBal]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeBal + - id: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018 + type: icp + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2018] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018_up + + train_ratio: true + output: + filename: + icp_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018.pkl + - id: pnn_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018 + type: pnn + region: SR_2018 + parameters: [nu_CMS_scale_j_Regrouped_RelativeSample_2018] + combinations: [[nu_CMS_scale_j_Regrouped_RelativeSample_2018]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_CMS_scale_j_Regrouped_RelativeSample_2018 + - id: icp_TTLep_pow_2018_Uncl + type: icp + region: SR_2018 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_Uncl_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_Uncl_up + + train_ratio: true + output: + filename: icp_TTLep_pow_2018_Uncl.pkl + - id: pnn_TTLep_pow_2018_Uncl + type: pnn + region: SR_2018 + parameters: [nu_Uncl] + combinations: [[nu_Uncl]] + base_points: + - coords: [-1.0] + loader: TTLep_pow_2018_Uncl_down + - coords: [0] + loader: TTLep_pow_2018 + nominal: true + - coords: [1.0] + loader: TTLep_pow_2018_Uncl_up + + model: + hidden_layers: + - 128 + - 128 + activation: relu + initialize_zero: true + optim: + epochs: 200 + phaseout_epochs: 50 + learning_rate: 0.001 + runtime: + n_split: 10 + rebin: 2 + extras: + use_scaler: scaler_TTLep_pow_2018 + use_icp: icp_TTLep_pow_2018_Uncl + + - id: icp_SingleTop_2018_scales + type: icp + region: SR_2018 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: SingleTop_2018 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: SingleTop_2018 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: SingleTop_2018 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: SingleTop_2018 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: SingleTop_2018 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: SingleTop_2018 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: SingleTop_2018 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: SingleTop_2018 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: SingleTop_2018 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_SingleTop_2018_scales.pkl + + - id: icp_DY_LO_2018_scales + type: icp + region: SR_2018 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: DrellYan_LO_HTbinned_2018 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_DY_LO_2018_scales.pkl + + - id: icp_TTSemi_pow_2018_scales + type: icp + region: SR_2018 + parameters: [nu_mu_ren, nu_mu_fac] + combinations: [[nu_mu_ren], [nu_mu_fac], [nu_mu_ren, nu_mu_ren], [nu_mu_ren, + nu_mu_fac], [nu_mu_fac, nu_mu_fac]] + base_points: + - coords: [-1.0, -1.0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren0p5_fac0p5"] + - coords: [-1.0, 0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren0p5_fac1p0"] + - coords: [-1.0, 1.0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren0p5_fac2p0"] + - coords: [0, -1.0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren1p0_fac0p5"] + - coords: [0, 0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren1p0_fac1p0"] + nominal: true + - coords: [0, 1.0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren1p0_fac2p0"] + - coords: [1.0, -1.0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren2p0_fac0p5"] + - coords: [1.0, 0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren2p0_fac1p0"] + - coords: [1.0, 1.0] + loader: TTSemi_pow_2018 + addweights: ["scale_ren2p0_fac2p0"] + + train_ratio: true + output: + filename: icp_TTSemi_pow_2018_scales.pkl \ No newline at end of file diff --git a/data/observables.py b/data/observables.py index 3a60c466..9a35f0b9 100644 --- a/data/observables.py +++ b/data/observables.py @@ -56,6 +56,15 @@ "tr_AntiTop_y", ] +TOP_KINEMATICS_NO_PT_TTBAR = [ + "tr_ttbar_mass", + "tr_ttbar_y", + "tr_Top_pt", + "tr_AntiTop_pt", + "tr_Top_y", + "tr_AntiTop_y", +] + LEPTON_KINEMATICS = [ "lep0_pt", "lep1_pt", diff --git a/fit/Likelihood.py b/fit/Likelihood.py index fc8ae61a..4c050ba1 100644 --- a/fit/Likelihood.py +++ b/fit/Likelihood.py @@ -159,20 +159,32 @@ def load_likelihood(cfg): S['parameters'] = pnn_params S['combinations'] = pnn_combs - # optional: check PNN↔ICP consistency if referenced - try: - extras = (pnn_job or {}).get('extras', {}) or {} - icp_id = extras.get('use_icp') - if isinstance(icp_id, str) and icp_id in id2job: - icp_job = id2job[icp_id] - icp = icp_job.get('predictor', None) - if icp is not None: - icp_params = list(getattr(icp, "parameters")) - icp_combs = [tuple(c) for c in getattr(icp, "combinations")] - if not (pnn_params == icp_params and pnn_combs == icp_combs): - logger.warning(f"[likelihood] PNN '{pnn_id}' params/combs differ from ICP '{icp_id}'.") - except Exception: - pass + if S.get('shape_only', False): + + logger.warning(f"[likelihood] PNN '{pnn_id}' will be used only for shape variations.") + + if S['predictor'] is not None: + + if not S['predictor'].has_icp(): + raise NotImplementedError("Currently, only allowing shape-only systematics for PNNs trained with ICP bias.") + + S['predictor'].remove_icp_bias() + + else: + # optional: check PNN↔ICP consistency if referenced + try: + extras = (pnn_job or {}).get('extras', {}) or {} + icp_id = extras.get('use_icp') + if isinstance(icp_id, str) and icp_id in id2job: + icp_job = id2job[icp_id] + icp = icp_job.get('predictor', None) + if icp is not None: + icp_params = list(getattr(icp, "parameters")) + icp_combs = [tuple(c) for c in getattr(icp, "combinations")] + if not (pnn_params == icp_params and pnn_combs == icp_combs): + logger.warning(f"[likelihood] PNN '{pnn_id}' params/combs differ from ICP '{icp_id}'.") + except Exception: + pass # collect nuisance names for nm in (S.get("parameters") or []): @@ -984,14 +996,15 @@ def _prepare_binned_structure(self): pred = S.get('predictor', None) if pred is None: raise RuntimeError(f"[binned] Missing ICPH predictor for {rid}/{cid}/{S.get('id','?')}") - # stash a meta dict we’ll enrich with deltas as numpy arrays for fast math + # stash a meta dict we'll enrich with deltas as numpy arrays for fast math gm = { 'id': S['id'], 'params': list(S.get('parameters', []) or []), 'combs': [list(t) for t in (getattr(pred, "combinations", []) or [])], - # We store deltas as (nB, nb1) or (nB, nb1, nb2) in float64 - '_deltas': np.asarray(pred.deltas, dtype=np.float64), + # Always copy so shape_only normalization below does not mutate the loaded surrogate + '_deltas': np.array(pred.deltas, dtype=np.float64), '_obj': pred, + 'shape_only': bool(S.get('shape_only', False)), } icph_groups.append({'_meta': gm}) @@ -1249,23 +1262,40 @@ def _compute_lambda_binned(self, rid: str, hypothesis) -> np.ndarray: cvec = self._assemble_c_vector_for_ich(rid, hypothesis, cid) sigma_hist = ich.predict(cvec) # shape (nb1,) or (nb1,nb2) - # accumulate nuisance exponent per bin from all ICPh groups - # we’ll form a flat vector exp(exponent + ln_bias[cid]) + # accumulate nuisance exponent per bin from all ICPh groups, + # separating shape-only groups (exact runtime renormalization) from the rest if sigma_hist.ndim == 1: nb1 = sigma_hist.shape[0] - expo = np.zeros(nb1, dtype=np.float64) + expo_norm = np.zeros(nb1, dtype=np.float64) + expo_shape = np.zeros(nb1, dtype=np.float64) for gm, nuA in nuA_per_group[cid]: dA = gm['_deltas'] # shape (nB, nb1) - expo = expo + (nuA @ dA) # (nb1,) - lam = lam + sigma_hist * np.exp(expo + ln_bias[cid]) + if gm.get('shape_only', False): + expo_shape = expo_shape + (nuA @ dA) + else: + expo_norm = expo_norm + (nuA @ dA) + shape_factor = np.exp(expo_shape) + shape_sum = sigma_hist @ shape_factor + if shape_sum > 0: + shape_factor *= sigma_hist.sum() / shape_sum + lam = lam + sigma_hist * np.exp(expo_norm + ln_bias[cid]) * shape_factor else: nb1, nb2 = sigma_hist.shape - expo2d = np.zeros((nb1, nb2), dtype=np.float64) + expo_norm2d = np.zeros((nb1, nb2), dtype=np.float64) + expo_shape2d = np.zeros((nb1, nb2), dtype=np.float64) for gm, nuA in nuA_per_group[cid]: dA = gm['_deltas'] # shape (nB, nb1, nb2) - # tensordot over combination axis -> (nb1,nb2) - expo2d = expo2d + np.tensordot(nuA, dA, axes=(0, 0)) - lam = lam + sigma_hist.reshape(-1) * np.exp(expo2d.reshape(-1) + ln_bias[cid]) + contrib = np.tensordot(nuA, dA, axes=(0, 0)) # (nb1, nb2) + if gm.get('shape_only', False): + expo_shape2d = expo_shape2d + contrib + else: + expo_norm2d = expo_norm2d + contrib + shape_factor2d = np.exp(expo_shape2d) + sig_flat = sigma_hist.reshape(-1) + shape_sum = sig_flat @ shape_factor2d.reshape(-1) + if shape_sum > 0: + shape_factor2d *= sig_flat.sum() / shape_sum + lam = lam + sig_flat * np.exp(expo_norm2d.reshape(-1) + ln_bias[cid]) * shape_factor2d.reshape(-1) return lam @@ -1970,7 +2000,7 @@ def fcn(*x): h_final.print() return m -def run_minuit_fit(n2ll, hypothesis, *, step=None, print_every=25, +def run_autograd_fit(n2ll, hypothesis, *, step=None, print_every=25, do_migrad=True, do_hesse=True, do_minos=False, minosNP=None ,verbosity=1): # -- collect free parameters (works for rotated or plain) -- @@ -2336,6 +2366,9 @@ def plot_correlation_root(out_dir, base, rotated, names, corr, suffix=""): import common.yaml_loader as yaml_loader + if not (args.minuit or _HAS_AUTOGRAD): + raise ImportError("Trying to run autograd fit but autograd was not imported properly.") + # doing it this way, since print_summary and load_surrogates # use the path of the configs to give info to the user list_configs = [] @@ -2605,7 +2638,7 @@ def plot_correlation_root(out_dir, base, rotated, names, corr, suffix=""): # which sets step to 0.1 for all parameters # (see function definition) # step can also be a single value or a dictionary - _fitter = run_iminuit_fit if args.minuit else run_minuit_fit + _fitter = run_iminuit_fit if args.minuit else run_autograd_fit if args.minuit: print("[opts] Using iminuit/MIGRAD backend (--minuit)") else: diff --git a/fit/Modeling.py b/fit/Modeling.py index 1d2548e4..ed6e134e 100644 --- a/fit/Modeling.py +++ b/fit/Modeling.py @@ -1,7 +1,25 @@ import copy import logging + +import json + +# inverting structure used in Likelihood.py: +# instead of having autograd.numpy as np and +# changing the calls to the vanilla numpy to onp, +# keeping normal numpy as np, import numpy as np +try: + import autograd.numpy as anp + from autograd.tracer import getval + _HAS_AUTOGRAD = True +except ImportError: + import numpy as anp + _HAS_AUTOGRAD = False + + def getval(value): + return value + logger = logging.getLogger(__name__) @@ -217,10 +235,6 @@ def print(self): print() for j, p in enumerate(self.nuisances, start=len(self.POIs)): print(f"{j:02d} {p}") -import json -import numpy as np -import json -import numpy as np class Rotated(Hypothesis): """ @@ -345,13 +359,13 @@ def _solve_c_from_d(self, d_target: np.ndarray) -> np.ndarray: m, K = D.shape if m == K: try: - return np.linalg.solve(D, d_target) - except np.linalg.LinAlgError: + return anp.linalg.solve(D, d_target) + except anp.linalg.LinAlgError: pass - return np.linalg.pinv(D, rcond=self._rcond) @ d_target + return anp.linalg.pinv(D, rcond=self._rcond) @ d_target def _apply_d_update(self, d_new: np.ndarray, *, tol_frozen: float = 0.0) -> None: - d_new = np.asarray(d_new, dtype=np.float64) + # d_new = np.asarray(d_new, dtype=np.float64) if d_new.shape != (self._D.shape[0],): raise RuntimeError("[Rotated] d_new has wrong shape.") @@ -361,16 +375,16 @@ def _apply_d_update(self, d_new: np.ndarray, *, tol_frozen: float = 0.0) -> None # check frozen POIs on base for nm, vo, vn in zip(self._c_names, c_old, c_new): bp = getattr(self._base, nm) - if bp.isFrozen and (abs(float(vn) - float(vo)) > tol_frozen): + if bp.isFrozen and (abs(getval(vn) - getval(vo)) > tol_frozen): raise RuntimeError(f"[Rotated] Attempt to change frozen base POI '{nm}': {vo} → {vn}") # write POIs back to base for nm, vn in zip(self._c_names, c_new): - getattr(self._base, nm).val = float(vn) + getattr(self._base, nm).val = vn # sync local displayed d values for j, p in enumerate(self.parameters[:self._D.shape[0]]): - p.val = float(d_new[j]) + p.val = d_new[j] # ---------- public API ---------- def penalty(self) -> float: @@ -384,30 +398,30 @@ def set_vector(self, names: list[str], values: list[float], *, tol_frozen: float raise RuntimeError("[Rotated.set_vector] names and values length mismatch.") # start from current values - d_cur = self._compute_d_from_base() + d_cur_list = list(self._compute_d_from_base()) # We will also track nuisance updates nuis_updates = {} for nm, v in zip(names, values): if nm in self._d_index: - d_cur[self._d_index[nm]] = float(v) + d_cur_list[self._d_index[nm]] = v elif nm in self._nuis_index: - nuis_updates[nm] = float(v) + nuis_updates[nm] = v else: raise KeyError(f"[Rotated.set_vector] Unknown parameter '{nm}' (neither rotated POI nor nuisance).") # apply rotated POI updates - self._apply_d_update(d_cur, tol_frozen=tol_frozen) + self._apply_d_update(anp.array(d_cur_list), tol_frozen=tol_frozen) # apply nuisance updates to base for nm, val in nuis_updates.items(): bp = getattr(self._base, nm) - bp.val = float(val) + bp.set(val)# = float(val) # sync local nuisance values for printing n0 = self._D.shape[0] for i, nm in enumerate(self._nuis_names): - self.parameters[n0 + i].val = float(getattr(self._base, nm).val) + self.parameters[n0 + i].val = getattr(self._base, nm).val def modify(self, **kwargs): if not kwargs: @@ -452,24 +466,24 @@ def print(self): # sync rotated POIs from base d_vals = self._compute_d_from_base() for j, p in enumerate(self.parameters[:self._D.shape[0]]): - p.val = float(d_vals[j]) + p.val = d_vals[j] # sync nuisances from base n0 = self._D.shape[0] for i, nm in enumerate(self._nuis_names): - self.parameters[n0 + i].val = float(getattr(self._base, nm).val) + self.parameters[n0 + i].val = getattr(self._base, nm).val title = self.name if self.name else "rotated" print(f"Rotated Hypothesis ({title})") print("\n [rotated POIs]") for i, p in enumerate(self.parameters[:self._D.shape[0]]): - print(f"{i:02d} {p}") + print(f"{i:02d} {p.name} = {getval(p.val): .6e}") print("\n [nuisances (passthrough)]") for j, p in enumerate(self.parameters[self._D.shape[0]:], start=self._D.shape[0]): - print(f"{j:02d} {p}") + print(f"{j:02d} {p.name} = {getval(p.val): .6e}") print("\n[base] Current base POIs:") for nm in self._c_names: - print(f" {nm:>16s} = {float(getattr(self._base, nm).val): .6e}") + print(f" {nm:>16s} = {getval(getattr(self._base, nm).val): .6e}") def clone(self): base_clone = self._base.clone() diff --git a/plot/pdf/pdf_postfit.py b/plot/pdf/pdf_postfit.py index f05d5f8e..5a0b67de 100644 --- a/plot/pdf/pdf_postfit.py +++ b/plot/pdf/pdf_postfit.py @@ -23,7 +23,8 @@ # ---------------- args ---------------- p = argparse.ArgumentParser(description="Gluon PDF plotting") -p.add_argument("config", help="Path to global YAML config") +p.add_argument("configs", nargs="+", help="Path to global YAML configs") +p.add_argument("--base", help="") p.add_argument("--yes", "-y", action="store_true", help="Automatically run missing surrogate trainings without asking") p.add_argument("--postfit", required=True, @@ -32,6 +33,7 @@ help="A txt string") p.add_argument("--freezePOI", action="store_true", help="Do not sample POIs, use only central values") +p.add_argument("--ntoys", type=int, default=10000) p.add_argument("--Q", type=float, default=1.65, help="Scale Q for PDF evaluation (same units as PDF grid, default: 1.65)") p.add_argument("--rotate", action="store", default=None, help="Point to a rotate JSON") @@ -43,50 +45,59 @@ # ---------------- load YAML CFG ---------------- -print(f"[info] Loading config from: {args.config}") -cfg = yaml_loader.load_yaml(args.config) +print(f"[info] Loading configs from: {args.configs}") +print(f"[info] Not checking surrogate information, as they're not used downstream") +list_configs = [] +for config_path in args.configs: + aux_cfg = yaml_loader.load_yaml(config_path) + yaml_loader.print_summary(aux_cfg, config_path, yaml_loader._INCLUDE_TRACE) + # missing_cmds = yaml_loader.load_surrogates(aux_cfg, config_path, overwrite=False) + + list_configs.append(aux_cfg) + + # # Are there missing commands? If so, let's do those. Ask the user (or require --yes) + # if missing_cmds: + # print(f"[info] Found {len(missing_cmds)} missing surrogate trainings.") + # if not args.yes: + # ans = input(f"{len(missing_cmds)} surrogates missing. Run training now? [y/N] ") + # if ans.lower() not in ("y", "yes"): + # raise SystemError("[info] Not running trainings, exiting.") + + # for cmd in missing_cmds: + # print("[info] Running:", cmd) + # ret = subprocess.run(cmd, shell=True) + # if ret.returncode != 0: + # raise RuntimeError(f"[error] Command failed with exit code {ret.returncode}") + + # # try again + # print("[info] Re-checking for missing surrogates after training...") + # missing_cmds = yaml_loader.load_surrogates( + # cfg, + # args.config, + # overwrite=False, + # ) + # if missing_cmds: + # print("[error] Still missing surrogates after running trainings:") + # for cmd in missing_cmds: + # print(" ", cmd) + # raise RuntimeError + +cfg = yaml_loader.combine_configs(list_configs) +# print("[info] All required surrogates available. Loading likelihood...") +like_info = load_likelihood(cfg) -yaml_loader.print_summary(cfg, args.config, yaml_loader._INCLUDE_TRACE) -missing_cmds = yaml_loader.load_surrogates( - cfg, - args.config, - overwrite=False, -) +# base from mangling together configs or given by user +base_list = [] +for config_path in args.configs: + base_list.append(os.path.splitext(os.path.basename(config_path))[0]) -# Are there missing commands? If so, let's do those. Ask the user (or require --yes) -if missing_cmds: - print(f"[info] Found {len(missing_cmds)} missing surrogate trainings.") - if not args.yes: - ans = input(f"{len(missing_cmds)} surrogates missing. Run training now? [y/N] ") - if ans.lower() not in ("y", "yes"): - print("[info] Not running trainings, exiting.") - sys.exit(1) - - for cmd in missing_cmds: - print("[info] Running:", cmd) - ret = subprocess.run(cmd, shell=True) - if ret.returncode != 0: - print(f"[error] Command failed with exit code {ret.returncode}") - sys.exit(ret.returncode) - - # try again - print("[info] Re-checking for missing surrogates after training...") - missing_cmds = yaml_loader.load_surrogates( - cfg, - args.config, - overwrite=False, - ) - if missing_cmds: - print("[error] Still missing surrogates after running trainings:") - for cmd in missing_cmds: - print(" ", cmd) - sys.exit(1) - -print("[info] All required surrogates available. Loading likelihood...") -like_info = load_likelihood(cfg) +base = "_".join(base_list) + +if args.base: + base = args.base # output directory for PDF plots -pdf_plot_directory = os.path.join(user.plot_directory, plot_label, args.subdir, os.path.splitext(os.path.basename(args.config))[0]) +pdf_plot_directory = os.path.join(user.plot_directory, plot_label, args.subdir, base) if "nosyst" in args.postfit and ("no_syst" not in pdf_plot_directory): pdf_plot_directory += "_no_syst" os.makedirs(pdf_plot_directory, exist_ok=True) @@ -167,12 +178,13 @@ # ---------------------------------------------------------------------- # Find first POI-dependent BIT/ICH entry in likelihood and corresponding job +# only used to get the PDF basis information such that it can be evaluated. # ---------------------------------------------------------------------- like_params = None poi_job_id = None region_string = None -# binned +# POI definition, to get the PDF information for evaluation if like_info.get("regions", []): region_string = "regions" poi_type = "bit" @@ -193,12 +205,11 @@ break if like_params is None or poi_job_id is None: - print("[error] Could not find a POI-dependent term in the likelihood.") - sys.exit(1) + raise RuntimeError("[error] Could not find a POI-dependent term in the likelihood.") print(f"[info] Using POI-dependent job '{poi_job_id}' with POIs: {', '.join(like_params)}") -# find corresponding job J in cfg['jobs'] +# find first job J in cfg['jobs'] which matches the expected POI definition J = None for job in cfg.get("jobs", []): if job.get("id") == poi_job_id: @@ -206,8 +217,7 @@ break if J is None: - print(f"[error] No job with id '{poi_job_id}' found in cfg['jobs'].") - sys.exit(1) + raise RuntimeError(f"[error] No job with id '{poi_job_id}' found in cfg['jobs'].") pdf_cfg = J.get("pdf", {}) pdf_n = pdf_cfg.get("pdf_n", None) @@ -216,8 +226,7 @@ pdf_rescale_pod_amplitudes = pdf_cfg.get("rescale_pod_amplitudes", True) if pdf_n is None or pdf_type is None: - print(f"[error] Job '{poi_job_id}' has no 'pdf' configuration (pdf_n / pdf_type).") - sys.exit(1) + raise RuntimeError(f"[error] Job '{poi_job_id}' has no 'pdf' configuration (pdf_n / pdf_type).") print(f"[info] PDF configuration: pdf_n={pdf_n}, pdf_type={pdf_type}") @@ -246,7 +255,7 @@ print("[error] These POIs are missing in the fit result parameter list:") for name in poi_names_missing: print(" ", name) - sys.exit(1) + raise ValueError poi_indices = [idx_map[name] for name in poi_names_in_fit] @@ -264,7 +273,7 @@ cov_poi = cov[np.ix_(poi_indices, poi_indices)] if poi_indices else np.zeros((0, 0), dtype=float) # knobs for sampling -n_toys = 10000 +n_toys = args.ntoys fit_rng_seed = 42 # sample POIs unless freezePOI is set diff --git a/plot/postfitsys/compare_correlations.py b/plot/postfitsys/compare_correlations.py index 40814d92..73b160c2 100644 --- a/plot/postfitsys/compare_correlations.py +++ b/plot/postfitsys/compare_correlations.py @@ -118,28 +118,46 @@ def main() -> None: parser = argparse.ArgumentParser( description="Compare correlation matrices across two JSON files" ) + parser.add_argument( - "fit_a", - help="Path to first fit JSON file" + 'fit_files', + nargs='+', + help='Path(s) to fit result JSON file(s)' ) + parser.add_argument( - "fit_b", - help="Path to second fit JSON file" + "-l","--labels", + nargs="+", + type=str, + help="Optional labels for plots. If not given, uses version name." ) + parser.add_argument( "-o", "--output", help="Output directory (relative to user.plot_directory)", ) args = parser.parse_args() - fit_a_path = args.fit_a - fit_b_path = args.fit_b + if len(args.fit_files) != 2: + raise ValueError("Need to pass two fit files.") + + fit_a_path = args.fit_files[0] + fit_b_path = args.fit_files[1] + + label_a = os.path.basename(fit_a_path).replace(".json", "") + label_b = os.path.basename(fit_b_path).replace(".json", "") + + if args.labels: + if len(args.labels) != 2: + raise ValueError("If passing labels, should pass both labels") + + label_a = args.labels[0] + label_b = args.labels[1] + output_name = args.output if output_name is None: - base_a = os.path.basename(fit_a_path).replace(".json", "") - base_b = os.path.basename(fit_b_path).replace(".json", "") - output_name = f"correlation_comparison_{base_a}_vs_{base_b}" + output_name = f"correlation_comparison_{label_a}_vs_{label_b}" output_dir = os.path.join(user.plot_directory, "fit_comparison" ,output_name) @@ -155,13 +173,11 @@ def main() -> None: ) diff_matrix = matrix_a - matrix_b - base_a = os.path.basename(fit_a_path).replace(".json", "") - base_b = os.path.basename(fit_b_path).replace(".json", "") - create_comparison_canvas(order_a, matrix_a, matrix_b, output_dir, base_a, base_b, diff_matrix) - create_difference_heatmap(order_a, diff_matrix, output_dir, base_a, base_b) + create_comparison_canvas(order_a, matrix_a, matrix_b, output_dir, label_a, label_b, diff_matrix) + create_difference_heatmap(order_a, diff_matrix, output_dir, label_a, label_b) - diff_filename = f"correlation_only_diff_{base_a}_vs_{base_b}.json" + diff_filename = f"correlation_only_diff_{label_a}_vs_{label_b}.json" os.makedirs(output_dir, exist_ok=True) payload = { "correlation": { diff --git a/plot/postfitsys/compare_fits.py b/plot/postfitsys/compare_fits.py index 464a2f45..8b2725e6 100644 --- a/plot/postfitsys/compare_fits.py +++ b/plot/postfitsys/compare_fits.py @@ -137,7 +137,7 @@ def save_plot_for_parameters(param_names: Sequence[str], output_basename: str) - ax.set_xlabel('Parameter value', fontsize=11) ax.legend(loc='upper right', fontsize=14) ax.grid(axis='x', alpha=0.3) - x_range = max(abs(x_min),abs(x_max),1.5) + x_range = min(max(abs(x_min),abs(x_max)), 2.) ax.set_xlim(-x_range*1.2, x_range*1.2) ax.axvline(x=0, color='black', linestyle='--', linewidth=0.8, alpha=0.5) diff --git a/plot/postfitsys/unbinned_fromfit.py b/plot/postfitsys/unbinned_fromfit.py index ba6bd82d..04dc9c14 100644 --- a/plot/postfitsys/unbinned_fromfit.py +++ b/plot/postfitsys/unbinned_fromfit.py @@ -710,13 +710,14 @@ def evaluate_class_cached(shard_cache: dict[str, Any], h_base: Any) -> np.ndarra c.cd() c.Update() - out_name = os.path.join(outdir, f"{_safe_name(region_id)}") - helpers.copyIndexPHP(out_name) + plot_dir = os.path.join(outdir, f"{_safe_name(region_id)}/") + helpers.copyIndexPHP(plot_dir) + out_name = f"{plot_dir}/{_safe_name(feature_name)}" if args.prefit: - out_name += f"{_safe_name(feature_name)}__prefit" + out_name += f"__prefit" else: - out_name += f"{_safe_name(feature_name)}__postfit" + out_name += f"__postfit" c.SaveAs(f"{out_name}.png") c.SaveAs(f"{out_name}.pdf") diff --git a/user/ricardo/ht_reweighting/README.md b/user/ricardo/ht_reweighting/README.md new file mode 100644 index 00000000..9b28a9b2 --- /dev/null +++ b/user/ricardo/ht_reweighting/README.md @@ -0,0 +1,6 @@ +### HT reweighting + +The low statistics of the DY NLO samples and the large amount of negative weights make the training of the DCR estimator with DY quite challenging. For this reason, it was decided to instead use the DY LO HT-binned samples, which have much larger statistics and (likely) a negligible fraction of negative weights. + +This sample has a known mismodelling in high-pT jets from ISR (only possible source of jets in a DY). The [four-top analysis](https://cms.cern.ch/iCMS/analysisadmin/cadilines?line=TOP-24-008) employed a data-driven correction based on HT to correct for this mismodelling. Their corrections are not directly usable in our sample, as they were only derived for 4+ jet events, while our phase-space has a much lower jet multiplicity. The code in this repository is a minimal implementation of the code to derive that correction. + diff --git a/user/ricardo/ht_reweighting/ht_reweighting.py b/user/ricardo/ht_reweighting/ht_reweighting.py new file mode 100644 index 00000000..f6cf2bba --- /dev/null +++ b/user/ricardo/ht_reweighting/ht_reweighting.py @@ -0,0 +1,440 @@ +"""Compare data and MC and derive a reweighting for Drell-Yan.""" + +from __future__ import annotations + +import argparse +import json +import logging +import re +from pathlib import Path +from typing import Iterable, cast +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import mplhep as hep +import numpy as np + +import common.user as user +from common.helpers import copyIndexPHP +from data.plot_options import plot_options +from data.samples_RunII import BASE_DIRECTORY, Factory, process_labels +import common.syncer as syncer + +logger = logging.getLogger(__name__) + +hep.style.use("CMS") + + +DEFAULT_FEATURES = ["ht", "dilep_mass", "dilep_pt", "lep0_pt", "lep1_pt", "nSelJet", "nBJet"] +DEFAULT_PROCESSES = ["TTLep_pow", "SingleTop", "TTSemi_pow", "DrellYan_LO_HTbinned"] +DEFAULT_ERAS = ["2016", "2016APV", "2017", "2018", "RunII"] +DEFAULT_REWEIGHT_FEATURE = "ht" + +def parse_args() -> argparse.Namespace: + """Parse CLI arguments for the HT reweighting workflow.""" + parser = argparse.ArgumentParser(description="Compare data and MC and derive a reweighting of the Drell-Yan sample.") + parser.add_argument("--eras", nargs="+", default=["RunII"], choices=DEFAULT_ERAS) + parser.add_argument("--processes", nargs="+", default=DEFAULT_PROCESSES) + parser.add_argument("--features", nargs="+", default=DEFAULT_FEATURES) + parser.add_argument("--selection") + parser.add_argument( + "--selection-branches", + nargs="+", + default=None, + help="Branches needed by --selection. Required when --selection is used.", + ) + parser.add_argument( + "--derive_reweighting", + action="store_true", + help="Derive a normalized reweighting curve for the Drell-Yan sample.", + ) + parser.add_argument( + "--reweight_feature", + default=DEFAULT_REWEIGHT_FEATURE, + help="Feature used to derive the reweighting curve.", + ) + parser.add_argument( + "--output_tag", + default=None, + help="Optional tag appended to the output directory name.", + ) + return parser.parse_args() + + +def slugify(text: str) -> str: + """Create a filesystem-friendly tag from free-form text.""" + text = text.strip() + text = text.replace(">=","GEQ") + text = text.replace("<=","LEQ") + text = text.replace("==","") + text = text.replace("<","LT") + text = text.replace(">","GT") + if not text: + return "default" + + text = re.sub(r"[^A-Za-z0-9]+", "_", text) + return text.strip("_") or "default" + +def edges_from_binning(binning: object) -> np.ndarray: + """Convert a plot_options binning specification into bin edges.""" + if isinstance(binning, (list, tuple)) and len(binning) == 3 and isinstance(binning[0], int): + nbins, x_min, x_max = binning + return np.linspace(float(x_min), float(x_max), int(nbins) + 1, dtype=np.float64) + if isinstance(binning, np.ndarray): + return np.asarray(binning, dtype=np.float64) + return np.asarray(tuple(cast(Iterable[float], binning)), dtype=np.float64) + +def hist_with_flow(values: np.ndarray, weights: np.ndarray, edges: np.ndarray) -> tuple[np.ndarray, np.ndarray]: + """Fill a 1D histogram and fold under/overflow into the edge bins.""" + nbins = len(edges) - 1 + indices = np.searchsorted(edges, values, side="right") - 1 + + in_range = (indices >= 0) & (indices < nbins) + sumw = np.bincount(indices[in_range], weights=weights[in_range], minlength=nbins).astype(np.float64) + sumw2 = np.bincount(indices[in_range], weights=weights[in_range] ** 2, minlength=nbins).astype(np.float64) + + under = indices < 0 + if np.any(under): + under_weights = weights[under] + sumw[0] += np.sum(under_weights) + sumw2[0] += np.sum(under_weights * under_weights) + + over = indices >= nbins + if np.any(over): + over_weights = weights[over] + sumw[-1] += np.sum(over_weights) + sumw2[-1] += np.sum(over_weights * over_weights) + + return sumw, sumw2 + + +def normalize_histogram(sumw: np.ndarray) -> np.ndarray: + """Return a unit-area histogram, guarding against empty input.""" + total = float(np.sum(sumw)) + if total <= 0.0: + return np.zeros_like(sumw, dtype=np.float64) + return np.asarray(sumw, dtype=np.float64) / total + + +def sanitize_selection_branches(selection: str | None, selection_branches: list[str] | None) -> list[str] | None: + """Require explicit selection branches when a custom selection is provided.""" + if selection and not selection_branches: + raise RuntimeError("Provide --selection-branches when using --selection so the loader can request the right branches.") + return selection_branches + + +def configure_loader(loader, features: list[str], selection: str | None, selection_branches: list[str] | None): + """Clear the built-in selection and configure the loader for this script.""" + # Clear any selections that the loader came with (must be done before + # materialization). We do this to ensure the CLI-provided `--selection` + # fully replaces defaults. + + branches = list(features) + if selection and selection_branches: + branches += list(selection_branches) + + ordered_branches = list(dict.fromkeys(branches)) + loader.setFeatures(feature_names=ordered_branches) + + # if selections not given, uses the default selection + if selection: + loader.clearSelections() + loader.addSelection(selection, required_branches=selection_branches) + + return loader + + +def load_histogram(loader, feature: str, edges: np.ndarray) -> tuple[np.ndarray, np.ndarray]: + """Accumulate a weighted histogram over all shards of a loader.""" + sumw = np.zeros(len(edges) - 1, dtype=np.float64) + sumw2 = np.zeros(len(edges) - 1, dtype=np.float64) + + for shard in range(len(loader)): + values = loader.features(shard=shard, feature_names=[feature])[:, 0].astype(np.float64, copy=False) + weights = loader.weight_vector(shard=shard).astype(np.float64, copy=False) + mask = np.isfinite(values) & np.isfinite(weights) + shard_sumw, shard_sumw2 = hist_with_flow(values[mask], weights[mask], edges) + sumw += shard_sumw + sumw2 += shard_sumw2 + + return sumw, sumw2 + + +def plot_feature(output_path: str, feature: str, edges: np.ndarray, data_sumw: np.ndarray, data_sumw2: np.ndarray, + mc_sumw_by_process: dict[str, np.ndarray], mc_sumw2_by_process: dict[str, np.ndarray], + logy: bool) -> None: + """Draw a data/MC comparison for one feature.""" + fig, (ax_top, ax_ratio) = plt.subplots( + 2, + 1, + figsize=(8.5, 7.5), + sharex=True, + gridspec_kw={"height_ratios": [3.2, 1.0]}, + ) + + centers = 0.5 * (edges[:-1] + edges[1:]) + widths = np.diff(edges) + yerr_data = np.sqrt(np.maximum(data_sumw2, 0.0)) + + stack_order = list(mc_sumw_by_process.keys()) + stack_order.sort(key=lambda proc: float(np.sum(mc_sumw_by_process[proc]))) + + stack_components = [] + stack_labels = [] + stack_colours = [] + for process in stack_order: + stack_components.append(mc_sumw_by_process[process]) + process_label = process_labels.get(process, process) + if "#" in process_label: + process_label = "$" + process_label.replace("#","\\") + "$" + stack_labels.append(process_label) + from data.colors import get_color_mpl + stack_colours.append(get_color_mpl(process)) + + ax_top.hist( + [centers] * len(stack_components), + bins=edges, + weights=stack_components, + histtype="barstacked", + label=stack_labels, + color=stack_colours, + ) + + total_mc = np.sum(np.vstack(list(mc_sumw_by_process.values())), axis=0) if mc_sumw_by_process else np.zeros_like(data_sumw) + total_mc_err = np.sqrt(np.sum(np.vstack(list(mc_sumw2_by_process.values())), axis=0)) if mc_sumw2_by_process else np.zeros_like(data_sumw) + + ax_top.stairs(total_mc, edges, color="black", linewidth=0.8) + + ax_top.fill_between( + edges[:-1], + total_mc - total_mc_err, + total_mc + total_mc_err, + step="post", + color="0.5", + alpha=0.25, + label="MC stat. unc.", + ) + + ax_top.errorbar( + centers, + data_sumw, + yerr=yerr_data, + xerr=0.5 * widths, + fmt="o", + color="black", + markersize=4.5, + linewidth=1.0, + label="Data", + ) + + if logy: + ax_top.set_yscale("log") + + ax_top.set_ylabel("Events") + ax_top.legend(frameon=False, ncol=2, fontsize=10) + ax_top.grid(False) + + ratio = np.divide(data_sumw, total_mc, out=np.zeros_like(data_sumw), where=total_mc > 0) + ratio_err = np.divide(yerr_data, total_mc, out=np.zeros_like(yerr_data), where=total_mc > 0) + + ax_ratio.axhline(1.0, color="0.2", linewidth=1.0) + ax_ratio.errorbar( + centers, + ratio, + yerr=ratio_err, + xerr=0.5 * widths, + fmt="o", + color="black", + markersize=4.0, + linewidth=1.0, + ) + + max_dev = np.max(np.abs(ratio - 1.0)) + if max_dev <= 0.0: + r_min, r_max = 0.9, 1.1 + else: + half_range = 1.3 * max_dev + r_min = 1.0 - half_range + r_max = 1.0 + half_range + + ax_ratio.set_ylim(r_min, r_max) + ax_ratio.set_ylabel("Data/MC") + xlabel = "$" + plot_options[feature]["tex"].replace("#","\\") + "$" + ax_ratio.set_xlabel(xlabel) + ax_ratio.grid(False) + + hep.cms.label("Internal", data=True, ax=ax_top, loc=0) + fig.tight_layout() + plt.savefig(output_path) + plt.savefig(output_path.replace(".pdf", ".png"), dpi=200) + plt.close(fig) + + +def plot_reweighting(output_path: str, feature: str, edges: np.ndarray, data_norm: np.ndarray, mc_norm: np.ndarray, + dy_norm: np.ndarray, weights: np.ndarray) -> None: + """Draw the derived reweighting curve and the weighted comparison.""" + fig, (ax_top, ax_ratio) = plt.subplots( + 2, + 1, + figsize=(8.5, 7.5), + sharex=True, + gridspec_kw={"height_ratios": [3.2, 1.0]}, + ) + + centers = 0.5 * (edges[:-1] + edges[1:]) + ratio = np.divide(data_norm, mc_norm, out=np.zeros_like(data_norm), where=mc_norm > 0) + + ax_top.step(centers, ratio, where="mid", color="black", linewidth=2.0, label="Raw data/MC shape ratio") + ax_top.step(centers, weights, where="mid", color="#d73027", linewidth=2.0, label="Normalized DY weight") + ax_top.set_ylabel("Weight") + ax_top.legend(frameon=False) + ax_top.grid(False) + + weighted_dy = dy_norm * weights + weighted_mc = (mc_norm - dy_norm) + weighted_dy + weighted_ratio = np.divide(data_norm, weighted_mc, out=np.zeros_like(data_norm), where=weighted_mc > 0) + + ax_ratio.axhline(1.0, color="0.2", linewidth=1.0) + ax_ratio.step(centers, weighted_ratio, where="mid", color="black", linewidth=2.0) + ax_ratio.set_ylim(0.0, 2.0) + ax_ratio.set_ylabel("Data/MC") + xlabel = "$" + plot_options[feature]["tex"].replace("#","\\") + "$" + ax_ratio.set_xlabel(xlabel) + ax_ratio.grid(False) + + hep.cms.label("Internal", data=True, ax=ax_top, loc=0) + fig.tight_layout() + plt.savefig(output_path) + plt.savefig(output_path.replace(".pdf", ".png"), dpi=200) + plt.close(fig) + + +def main() -> None: + """Run the data/MC comparison and optional reweighting derivation.""" + args = parse_args() + selection_branches = sanitize_selection_branches(args.selection, args.selection_branches) + + features = list(dict.fromkeys(list(args.features) + [args.reweight_feature])) + for feature in features: + if feature not in plot_options: + raise RuntimeError(f"Feature {feature!r} is not defined in data.plot_options.") + + plot_root = Path(user.plot_directory) / "DY_reweighting" + output_root = Path(user.output_directory) / "DY_reweighting" + output_tag = (args.output_tag or slugify(args.selection or "default_selection"))+"_"+"_".join(args.eras) + plot_dir = plot_root / output_tag + output_dir = output_root / output_tag + plot_dir.mkdir(parents=True, exist_ok=True) + output_dir.mkdir(parents=True, exist_ok=True) + copyIndexPHP(str(plot_dir)) + + dy_samples = [process for process in args.processes if (("DrellYan" in process) or ("DY" in process))] + if len(dy_samples) == 0: + raise ValueError("You don't have a Drell Yan sample in your process list") + + if len(dy_samples) > 1: + raise ValueError("You have more than one Drell Yan sample in your process list. If using samples with multiple slices, define first a group in data.samples_RunII-") + + dy_process = dy_samples[0] + + factory = Factory(BASE_DIRECTORY=str(BASE_DIRECTORY)) + + data_loaders = {} + mc_loaders = {} + + logger.info("Configuring loaders.") + for era in args.eras: + data_loader = configure_loader(factory.get(f"Data_{era}"), features, args.selection, selection_branches) + data_loaders[era] = data_loader + + for process in args.processes: + loader = configure_loader(factory.get(f"{process}_{era}"), features, args.selection, selection_branches) + mc_loaders[(era, process)] = loader + + feature_edges = {feature: edges_from_binning(plot_options[feature]["binning"]) for feature in features} + feature_logy = {feature: bool(plot_options[feature].get("logY", False)) for feature in features} + + logger.info("Looping over features for plotting") + for feature in features: + edges = feature_edges[feature] + + data_sumw = np.zeros(len(edges) - 1, dtype=np.float64) + data_sumw2 = np.zeros(len(edges) - 1, dtype=np.float64) + mc_sumw_by_process = {process: np.zeros(len(edges) - 1, dtype=np.float64) for process in args.processes} + mc_sumw2_by_process = {process: np.zeros(len(edges) - 1, dtype=np.float64) for process in args.processes} + + for era in args.eras: + era_data_sumw, era_data_sumw2 = load_histogram(data_loaders[era], feature, edges) + data_sumw += era_data_sumw + data_sumw2 += era_data_sumw2 + + for process in args.processes: + era_mc_sumw, era_mc_sumw2 = load_histogram(mc_loaders[(era, process)], feature, edges) + mc_sumw_by_process[process] += era_mc_sumw + mc_sumw2_by_process[process] += era_mc_sumw2 + + plot_path = plot_dir / f"{feature}.pdf" + plot_feature( + str(plot_path), + feature, + edges, + data_sumw, + data_sumw2, + mc_sumw_by_process, + mc_sumw2_by_process, + feature_logy[feature], + ) + + if feature == args.reweight_feature and args.derive_reweighting: + data_norm = normalize_histogram(data_sumw) + mc_total_sumw = np.sum(np.vstack(list(mc_sumw_by_process.values())), axis=0) + mc_norm = normalize_histogram(mc_total_sumw) + + dy_norm = normalize_histogram(mc_sumw_by_process[dy_process]) + ratio = np.divide(data_norm, mc_norm, out=np.zeros_like(data_norm), where=mc_norm > 0) + + if np.any((mc_norm > 0) & ~np.isfinite(ratio)): + raise RuntimeError("Derived ratio contains non-finite values.") + + raw_yield = float(np.sum(dy_norm * ratio)) + if raw_yield <= 0.0: + raise RuntimeError("Could not normalize the derived DY weights because the raw yield is non-positive.") + weights = ratio / raw_yield + + weighted_path = plot_dir / f"{feature}_reweighted.pdf" + plot_reweighting(str(weighted_path), feature, edges, data_norm, mc_norm, dy_norm, weights) + + np.savez( + output_dir / f"{feature}_reweighting.npz", + feature=feature, + selection=args.selection, + selection_branches=np.array(selection_branches or [], dtype=object), + edges=edges, + data_normalized=data_norm, + mc_normalized=mc_norm, + dy_normalized=dy_norm, + raw_ratio=ratio, + weights=weights, + ) + + with open(output_dir / f"{feature}_reweighting.json", "w", encoding="utf-8") as handle: + json.dump( + { + "feature": feature, + "selection": args.selection, + "selection_branches": selection_branches or [], + "edges": edges.tolist(), + "weights": weights.tolist(), + }, + handle, + indent=2, + sort_keys=True, + ) + + logger.info(f"Wrote plots and derived weights to: {plot_dir}") + + +if __name__ == "__main__": + main() + syncer.sync() diff --git a/user/ricardo/poi_n2ll_scans.py b/user/ricardo/poi_n2ll_scans.py deleted file mode 100644 index 42a8a0be..00000000 --- a/user/ricardo/poi_n2ll_scans.py +++ /dev/null @@ -1,258 +0,0 @@ -#!/usr/bin/env python3 -"""Scan the Asimov negative log-likelihood over one or several fixed POIs.""" - -from __future__ import annotations - -import argparse -import copy -import itertools -import json -import os -import sys -from typing import Any, Optional -from common import user, helpers - -import numpy as np - -import importlib - -import pprint - -REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) -sys.path.insert(0, REPO_ROOT) - -from common import yaml_loader -from fit.Likelihood import N2LL, build_hypothesis_from_likelihood, load_likelihood - -import matplotlib.pyplot as plt - -import common.syncer as syncer - -def scan_likelihood_unprofiled(args:argparse.Namespace) -> Optional[list[dict[str, Any]]]: - - expanded_config_path = os.path.expanduser(os.path.expandvars(args.config)) - base = os.path.splitext(os.path.basename(expanded_config_path))[0] - config = yaml_loader.load_yaml(expanded_config_path) - yaml_loader.print_summary(config, expanded_config_path, yaml_loader._INCLUDE_TRACE) - yaml_loader.load_surrogates(config, expanded_config_path, overwrite=False) - - like_info = load_likelihood(config) - - asimov_hypothesis = build_hypothesis_from_likelihood( - like_info, - name="asimov_reference", - poi_init=0.0, - nuis_init=0.0, - ) - - asimov_hypothesis.print() - - # Make sample loader factory from default config - samples_mod = importlib.import_module(config["defaults"]["module_samples"]) - - from common.yaml_loader import _resolve_features_list - default_features = config["defaults"].get("default_features", None) - features = _resolve_features_list( default_features ) if default_features else None - factory = samples_mod.Factory( - features = features, - selection = config["defaults"].get("default_selection", None), - selection_features = config["defaults"].get("default_selection_features", None), - ) - - n2ll = N2LL( - like_info, - factory = factory, - cache_subdir=os.path.join("NN2LCache", base, config["version"]), - cache_root=None, - ) - - # if hasattr(n2ll, "build_cache"): - n2ll.build_cache() - n2ll.prepare_runtime() - n2ll.setAsimov() - - if not args.scan: - available_parameters = list(asimov_hypothesis.parameters) - print("Available parameters:") - for parameter_name in available_parameters: - print(f" {parameter_name}") - return None - - # to fix any parameter outside of the Asimov hypothesis - fixed_parameter_values: dict[str, float] = {} - for fixed_definition in args.fix: - parameter_name, parameter_value = fixed_definition.split("=", 1) - fixed_parameter_values[parameter_name] = float(parameter_value) - - scan_axes: dict[str, np.ndarray] = {} - for scan_definition in args.scan: - parameter_name, minimum, maximum, n_points = scan_definition.split(":") - scan_axes[parameter_name] = np.linspace( - float(minimum), - float(maximum), - int(n_points), - ) - - nominal_n2ll = float(n2ll(asimov_hypothesis)) - print(f"{nominal_n2ll=}") - - scan_parameter_names = list(scan_axes.keys()) - if len(scan_parameter_names) > 2: - raise ValueError("Visually, only makes sense to plot up to two-dimensional scans.") - - scan_parameter_grids = [scan_axes[parameter_name] for parameter_name in scan_parameter_names] - - results: list[dict[str, Any]] = [] - for scan_point_values in itertools.product(*scan_parameter_grids): - scan_parameter_values = { - scan_parameter_names[index]: float(scan_point_values[index]) - for index in range(len(scan_parameter_names)) - } - - scan_hypothesis = asimov_hypothesis.cloneModify(**fixed_parameter_values) - scan_hypothesis.modify(**scan_parameter_values) - - scan_n2ll = float(n2ll(scan_hypothesis)) - results.append( - { - "scan_parameters": scan_parameter_values, - "n2ll": scan_n2ll, - # "delta_n2ll_to_nominal": scan_n2ll - nominal_n2ll, - } - ) - - # grid_min_n2ll = min(result["n2ll"] for result in results) - # for result in results: - # result["delta_n2ll_to_grid_min"] = result["n2ll"] - grid_min_n2ll - - best_result = min(results, key=lambda result: result["n2ll"]) - - print(f"Nominal Asimov N2LL: {nominal_n2ll}") - print(f"Evaluated {len(results)} scan points") - print(f"Best grid point: {best_result['scan_parameters']}") - print(f"Best grid N2LL: {best_result['n2ll']}") - - # if args.output: - # output_path = os.path.join(user.output_directory, os.path.expanduser(os.path.expandvars(args.output))) - # output_directory = os.path.dirname(output_path) - # if output_directory: - # os.makedirs(output_directory, exist_ok=True) - - # output_payload = { - # "config": expanded_config_path, - # "fixed_parameters": fixed_parameter_values, - # "scan_axes": { - # parameter_name: scan_axes[parameter_name].tolist() - # for parameter_name in scan_parameter_names - # }, - # "nominal_n2ll": nominal_n2ll, - # "grid_min_n2ll": grid_min_n2ll, - # "results": results, - # } - - # with open(output_path, "w") as output_file: - # json.dump(output_payload, output_file, indent=2) - - return results - -def plot_n2ll_scan(results: list[dict[str, Any]], plot_directory: str) -> None: - """Plot the N2LL scan results for one- or two-dimensional scans and save to disk.""" - scan_parameter_names = list(results[0]["scan_parameters"].keys()) - n2ll_values = np.array([result["n2ll"] for result in results]) - delta_n2ll = n2ll_values - n2ll_values.min() - - plot_filename = "n2ll_scan_" + "_".join(scan_parameter_names) + ".pdf" - plot_path = os.path.join(plot_directory, plot_filename) - os.makedirs(plot_directory, exist_ok=True) - - if len(scan_parameter_names) == 1: - poi_name = scan_parameter_names[0] - poi_values = np.array([result["scan_parameters"][poi_name] for result in results]) - - fig, ax = plt.subplots() - # reducing large scans to scans with a small range - delta_n2ll_reduced_range_mask = np.argwhere(delta_n2ll <= 10.0).flatten() - poi_values_reduced_range = poi_values[delta_n2ll_reduced_range_mask] - n2ll_values_reduced_range = n2ll_values[delta_n2ll_reduced_range_mask] - - ax.plot(poi_values_reduced_range, n2ll_values_reduced_range, linestyle='dashed', linewidth=2) - ax.set_xlabel(poi_name) - ax.set_ylabel(r"$\Delta$ N2LL") - - quadratic_polynomial_scaled = np.polynomial.Polynomial.fit(poi_values_reduced_range,n2ll_values_reduced_range,deg=2) - quadratic_polynomial = quadratic_polynomial_scaled.convert() - - cl68_polynomial = quadratic_polynomial - np.polynomial.Polynomial([1.0]) - cl95_polynomial = quadratic_polynomial - np.polynomial.Polynomial([3.84]) - - cl68_edges = cl68_polynomial.roots() - cl95_edges = cl95_polynomial.roots() - - ax.axhline(1.0, color="gray", linestyle="--", - label=f"68% CL: [{cl68_edges[0]:.3f}, {cl68_edges[-1]:.3f}]") - ax.axhline(3.84, color="gray", linestyle=":", - label=f"95% CL: [{cl95_edges[0]:.3f}, {cl95_edges[-1]:.3f}]") - ax.legend() - - elif len(scan_parameter_names) == 2: - poi_x, poi_y = scan_parameter_names - x_values = np.unique([result["scan_parameters"][poi_x] for result in results]) - y_values = np.unique([result["scan_parameters"][poi_y] for result in results]) - delta_n2ll_grid = delta_n2ll.reshape(len(x_values), len(y_values)) - - delta_n2ll_reduced_range_mask = delta_n2ll_grid < 10 - x_reduced_range_mask = delta_n2ll_reduced_range_mask.any(axis=1) - y_reduced_range_mask = delta_n2ll_reduced_range_mask.any(axis=0) - - x_values_reduced_range = x_values[x_reduced_range_mask] - y_values_reduced_range = y_values[y_reduced_range_mask] - delta_n2ll_grid_reduced_range = delta_n2ll_grid[np.ix_(x_reduced_range_mask, y_reduced_range_mask)] - - fig, ax = plt.subplots() - mesh = ax.pcolormesh(x_values_reduced_range, y_values_reduced_range, delta_n2ll_grid_reduced_range.T, shading="auto") - ax.contour(x_values_reduced_range, y_values_reduced_range, delta_n2ll_grid_reduced_range.T, levels=[2.30, 6.18], colors="white", linestyles=["--", ":"]) - fig.colorbar(mesh, ax=ax, label=r"$\Delta$ N2LL") - ax.set_xlabel(poi_x) - ax.set_ylabel(poi_y) - - plt.tight_layout() - plt.savefig(plot_path) - plt.savefig(plot_path.replace(".pdf",".png")) - plt.close(fig) - print(f"Saved plot to: {plot_path}") - -if __name__ == "__main__": - - """Run a fixed-parameter Asimov likelihood scan.""" - parser = argparse.ArgumentParser( - description="Scan the Asimov N2LL over one or several POIs without profiling" - ) - parser.add_argument("config", help="Path to the global YAML config") - parser.add_argument( - "--scan", - nargs="*", - default=[], - help="Scan definitions such as c0:-2:2:41. Currently supporting only one- or two-dimensional scans.", - ) - parser.add_argument( - "--fix", - nargs="*", - default=[], - help="Fixed parameter values such as c2=0.3 theta_pdf=0.0. If not given, parameters retain their Asimov values.", - ) - parser.add_argument( - "--output", - default=None, - help="Optional JSON output path, relative to user.output_directory", - ) - args = parser.parse_args() - - results = scan_likelihood_unprofiled(args) - - # pprint.pprint(results) - - if results and args.output: - plot_directory = os.path.join(user.plot_directory, args.output) - plot_n2ll_scan(results, plot_directory) - helpers.copyIndexPHP(plot_directory) - syncer.sync() \ No newline at end of file