def __init__(self, filename, disable_morphing=False, include_nuisance_parameters=True): # Save setup self.include_nuisance_parameters = include_nuisance_parameters self.madminer_filename = filename # Load data logger.info("Loading data from %s", filename) ( self.parameters, self.benchmarks, self.benchmark_is_nuisance, self.morphing_components, self.morphing_matrix, self.observables, self.n_samples, _, self.reference_benchmark, self.nuisance_parameters, self.n_events_generated_per_benchmark, self.n_events_backgrounds, ) = load_madminer_settings( filename, include_nuisance_benchmarks=include_nuisance_parameters) self.n_parameters = len(self.parameters) self.n_benchmarks = len(self.benchmarks) self.n_benchmarks_phys = np.sum( np.logical_not(self.benchmark_is_nuisance)) self.n_observables = 0 if self.observables is None else len( self.observables) self.n_nuisance_parameters = 0 if self.nuisance_parameters is not None and include_nuisance_parameters: self.n_nuisance_parameters = len(self.nuisance_parameters) else: self.nuisance_parameters = None # Morphing self.morpher = None if self.morphing_matrix is not None and self.morphing_components is not None and not disable_morphing: self.morpher = PhysicsMorpher(self.parameters) self.morpher.set_components(self.morphing_components) self.morpher.set_basis(self.benchmarks, morphing_matrix=self.morphing_matrix) # Nuisance morphing self.nuisance_morpher = None if self.nuisance_parameters is not None: self.nuisance_morpher = NuisanceMorpher( self.nuisance_parameters, list(self.benchmarks.keys()), self.reference_benchmark) else: self.include_nuisance_parameters = False # Check event numbers self._check_n_events() self._report_setup()
def __init__(self, filename): # Initialize samples self.lhe_sample_filenames = [] self.sample_k_factors = [] self.sample_is_backgrounds = [] self.sampling_benchmarks = [] self.sample_systematics = [] # Initialize observables self.observables = OrderedDict() self.observables_required = OrderedDict() self.observables_defaults = OrderedDict() # Initialize cuts self.cuts = [] self.cuts_default_pass = [] # Initialize efficiencies self.efficiencies = [] self.efficiencies_default_pass = [] # Smearing function parameters self.energy_resolution = {} self.pt_resolution = {} self.eta_resolution = {} self.phi_resolution = {} pdgids = [1, -1, 2, -2, 3, -3, 4, -4, 5, -5, 6, -6, 9] pdgids += [ 11, -11, 12, -12, 13, -13, 14, -14, 15, -15, 16, -16, 21, 22, 23, 24, -24, 25 ] for pdgid in pdgids: self.energy_resolution[pdgid] = (0.0, 0.0) self.pt_resolution[pdgid] = (0.0, 0.0) self.eta_resolution[pdgid] = (0.0, 0.0) self.phi_resolution[pdgid] = (0.0, 0.0) self.pt_resolution["met"] = (0.0, 0.0) # Initialize samples self.reference_benchmark = None self.observations = None self.weights = None self.events_sampling_benchmark_ids = None # Initialize event summary self.signal_events_per_benchmark = None self.background_events = None # Information from .h5 file self.filename = filename (parameters, benchmarks, _, _, _, _, _, self.systematics, _, _, _, _, _, _) = load_madminer_settings(filename, include_nuisance_benchmarks=False) self.benchmark_names_phys = list(benchmarks.keys()) self.n_benchmarks_phys = len(benchmarks) # Initialize nuisance parameters self.nuisance_parameters = OrderedDict()
def __init__(self, filename): # Initialize samples self.hepmc_sample_filenames = [] self.hepmc_sample_weight_labels = [] self.hepmc_sampled_from_benchmark = [] self.hepmc_is_backgrounds = [] self.lhe_sample_filenames = [] self.lhe_sample_filenames_for_weights = [] self.delphes_sample_filenames = [] self.sample_k_factors = [] self.sample_systematics = [] # Initialize observables self.observables = OrderedDict() self.observables_required = OrderedDict() self.observables_defaults = OrderedDict() # Initialize cuts self.cuts = [] self.cuts_default_pass = [] # Initialize acceptance cuts self.acceptance_pt_min_e = None self.acceptance_pt_min_mu = None self.acceptance_pt_min_a = None self.acceptance_pt_min_j = None self.acceptance_eta_max_e = None self.acceptance_eta_max_mu = None self.acceptance_eta_max_a = None self.acceptance_eta_max_j = None # Initialize samples self.reference_benchmark = None self.observations = None self.weights = None self.events_sampling_benchmark_ids = None # Initialize event summary self.signal_events_per_benchmark = None self.background_events = None # Information from .h5 file self.filename = filename (parameters, benchmarks, _, _, _, _, _, self.systematics, _, _, _, _, _, _) = load_madminer_settings(filename, include_nuisance_benchmarks=False) self.benchmark_names_phys = list(benchmarks.keys()) self.n_benchmarks_phys = len(benchmarks) # Initialize nuisance parameters self.nuisance_parameters = OrderedDict()
def load(self, filename, disable_morphing=False): """ Loads MadMiner setup from a file. All parameters, benchmarks, and morphing settings are overwritten. See `save` for more details. Parameters ---------- filename : str Path to the MadMiner file. disable_morphing : bool, optional If True, the morphing setup is not loaded from the file. Default value: False. Returns ------- None """ # Load data ( self.parameters, self.benchmarks, _, morphing_components, morphing_matrix, _, _, self.systematics, _, _, ) = load_madminer_settings(filename, include_nuisance_benchmarks=False) logger.info("Found %s parameters:", len(self.parameters)) for key, values in six.iteritems(self.parameters): logger.info( " %s (LHA: %s %s, maximal power in squared ME: %s, range: %s)", key, values[0], values[1], values[2], values[3], ) logger.info("Found %s benchmarks:", len(self.benchmarks)) for key, values in six.iteritems(self.benchmarks): logger.info(" %s: %s", key, format_benchmark(values)) if self.default_benchmark is None: self.default_benchmark = key # Morphing self.morpher = None self.export_morphing = False if morphing_matrix is not None and morphing_components is not None and not disable_morphing: self.morpher = Morpher(self.parameters) self.morpher.set_components(morphing_components) self.morpher.set_basis(self.benchmarks, morphing_matrix=morphing_matrix) self.export_morphing = True logger.info("Found morphing setup with %s components", len(morphing_components)) else: logger.info("Did not find morphing setup.") # Systematics setup if self.systematics is None: logger.info("Did not find systematics setup.") else: logger.info( "Found systematics setup with %s nuisance parameter groups", len(self.systematics)) for key, value in six.iteritems(self.systematics): logger.debug(" %s: %s", key, value)
def __init__(self, filename, disable_morphing=False, include_nuisance_parameters=True): # Save setup self.include_nuisance_parameters = include_nuisance_parameters self.madminer_filename = filename logger.info("Loading data from %s", filename) # Load data ( self.parameters, self.benchmarks, self.benchmark_is_nuisance, self.morphing_components, self.morphing_matrix, self.observables, self.n_samples, _, self.reference_benchmark, self.nuisance_parameters, ) = load_madminer_settings( filename, include_nuisance_benchmarks=include_nuisance_parameters) self.n_parameters = len(self.parameters) self.n_benchmarks = len(self.benchmarks) self.n_benchmarks_phys = np.sum( np.logical_not(self.benchmark_is_nuisance)) self.n_observables = len(self.observables) self.n_nuisance_parameters = 0 if self.nuisance_parameters is not None and include_nuisance_parameters: self.n_nuisance_parameters = len(self.nuisance_parameters) else: self.nuisance_parameters = None logger.info("Found %s parameters", self.n_parameters) for key, values in six.iteritems(self.parameters): logger.debug( " %s (LHA: %s %s, maximal power in squared ME: %s, range: %s)", key, values[0], values[1], values[2], values[3], ) if self.nuisance_parameters is not None: logger.info("Found %s nuisance parameters", self.n_nuisance_parameters) for key, values in six.iteritems(self.nuisance_parameters): logger.debug(" %s (%s)", key, values) else: logger.info("Did not find nuisance parameters") logger.info("Found %s benchmarks, of which %s physical", self.n_benchmarks, self.n_benchmarks_phys) for (key, values), is_nuisance in zip(six.iteritems(self.benchmarks), self.benchmark_is_nuisance): if is_nuisance: logger.debug(" %s: systematics", key) else: logger.debug(" %s: %s", key, format_benchmark(values)) logger.info("Found %s observables", len(self.observables)) for i, obs in enumerate(self.observables): logger.debug(" %2.2s %s", i, obs) logger.info("Found %s events", self.n_samples) # Morphing self.morpher = None if self.morphing_matrix is not None and self.morphing_components is not None and not disable_morphing: self.morpher = PhysicsMorpher(self.parameters) self.morpher.set_components(self.morphing_components) self.morpher.set_basis(self.benchmarks, morphing_matrix=self.morphing_matrix) logger.info("Found morphing setup with %s components", len(self.morphing_components)) else: logger.info("Did not find morphing setup.") # Nuisance morphing self.nuisance_morpher = None if self.nuisance_parameters is not None: self.nuisance_morpher = NuisanceMorpher( self.nuisance_parameters, list(self.benchmarks.keys()), self.reference_benchmark) logger.info("Found nuisance morphing setup")