Source code for columnflow.production.cms.mc_weight

# coding: utf-8

"""
Methods for dealing with MC weights.
"""

from columnflow.production import Producer, producer
from columnflow.util import maybe_import
from columnflow.columnar_util import set_ak_column, has_ak_column, optional_column as optional

np = maybe_import("numpy")
ak = maybe_import("awkward")


[docs]@producer( uses={"genWeight", optional("LHEWeight.originalXWGTUP")}, produces={"mc_weight"}, # only run on mc mc_only=True, ) def mc_weight(self: Producer, events: ak.Array, **kwargs) -> ak.Array: """ Reads the genWeight and LHEWeight columns and makes a decision about which one to save. This should have been configured centrally [1] and stored in genWeight, but there are some samples where this failed. Strategy: 1. Use LHEWeight.originalXWGTUP when it exists and genWeight is always 1. 2. In all other cases, use genWeight. [1] https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookNanoAOD?rev=99#Weigths """ # determine the mc_weight mc_weight = events.genWeight if has_ak_column(events, "LHEWeight.originalXWGTUP") and ak.all(events.genWeight == 1.0): mc_weight = events.LHEWeight.originalXWGTUP # store the column events = set_ak_column(events, "mc_weight", mc_weight, value_type=np.float32) return events