Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion rate-estimation/menu2lib/menu2lib.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

"""L1 trigger menu to C++ library for rate estimations."""

import argparse
Expand Down Expand Up @@ -145,7 +146,7 @@ def hasCorrelationCuts(condition):

for cut in condition.getCuts():
if cut.getCutType() in (tmEventSetup.DeltaEta, tmEventSetup.OvRmDeltaR, tmEventSetup.Mass, tmEventSetup.MassUpt,
tmEventSetup.OvRmDeltaEta, tmEventSetup.DeltaR):
tmEventSetup.OvRmDeltaEta, tmEventSetup.DeltaR, tmEventSetup.MassDeltaR):
requireDeltaEta = True

if requireDeltaEta:
Expand Down Expand Up @@ -332,6 +333,8 @@ def getLookUpTable(scaleMap, obj1, obj2):
precisionMath = getPrecision(scaleMap, obj1, obj2, 'Math')
precisionPt = getPrecision(scaleMap, obj1, obj2, 'MassPt')

precisionInvDeltaR = getPrecision(scaleMap, obj1, obj2, 'InverseDeltaRMath')

has_deta = not (isVectorSum(obj1) or isVectorSum(obj2))
convert = ((obj1.getType() != obj2.getType())
and
Expand All @@ -347,6 +350,7 @@ def getLookUpTable(scaleMap, obj1, obj2):
rc['PREC_MASS'] = 2*precisionPt + precisionMath
rc['COS_DPHI'] = "LUT_COS_DPHI_%s_%s" % (getObjectName(obj1), getObjectName(obj2))


if has_unconstrained_pt:
rc['UPT0'] = "LUT_%s_UPT" % getObjectName(obj1)
rc['UPT1'] = "LUT_%s_UPT" % getObjectName(obj2)
Expand All @@ -356,6 +360,8 @@ def getLookUpTable(scaleMap, obj1, obj2):
rc['COSH_DETA'] = "LUT_COSH_DETA_%s_%s" % (getObjectName(obj1), getObjectName(obj2))
rc['PREC_DR'] = 2*precisionDelta

rc['PREC_MASSDR'] = 2*precisionPt + precisionMath + precisionInvDeltaR

if convert:
if obj1.getType() == tmEventSetup.Muon:
rc['CONV_PHI'] = 'LUT_PHI_%s2%s' % (getObjectName(obj2), getObjectName(obj1))
Expand All @@ -378,6 +384,10 @@ def toDeltaR(value):
return "%.2f" % math.sqrt(value)


def toMassDeltaR(value):
return "%.2f" % math.sqrt(2.*value)


def warning(message):
print(message)
return ''
Expand All @@ -403,6 +413,7 @@ def render(menu, template):
j2_env.filters['warning'] = warning
j2_env.filters['toMass'] = toMass
j2_env.filters['toDeltaR'] = toDeltaR
j2_env.filters['toMassDeltaR'] = toMassDeltaR
j2_env.filters['chkChgCor'] = chkChgCor
j2_env.filters['getPrefix'] = getPrefix
j2_env.filters['isMuon'] = isMuon
Expand Down
2 changes: 1 addition & 1 deletion rate-estimation/menu2lib/templates/MenuTemplate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ PermutationFactory::cache_t PermutationFactory::cache_ = {};
{% include 'CaloCaloCorrelationTemplate.cc' %}
{% endif %}

{% elif cond.getType() in (tmEventSetup.InvariantMassUpt, ) %}
{% elif cond.getType() in (tmEventSetup.InvariantMassUpt, tmEventSetup.InvariantMassDeltaR) %}
{% set objects = cond.getObjects() %}
{% set combination = tmEventSetup.getObjectCombination(objects[0].getType(), objects[1].getType()) %}
{% if combination == tmEventSetup.MuonMuonCombination %}
Expand Down
13 changes: 13 additions & 0 deletions rate-estimation/menu2lib/templates/MuonMuonLUT.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,17 @@ const int LUT_MU_UPT[] = {
{{x}}{% if not loop.last %},{% endif %}
{%- endfor -%}
};

{# inverse deltaR #}
const int prec_mu_mu_invdelta = {{ scaleMap | getPrecisionByName('MU', 'MU', 'InverseDeltaRMath') }};
const int prec_mu_mu_massdr = prec_mu_mu_mass * prec_mu_mu_invdelta;

{# {% set mu_mu_invdelta = scaleMap | getDeltaLut(tmGrammar.MU, tmGrammar.MU, tmGrammar.INVERSE_DR) %} #}
{# const int LUT_INVDR_MU_MU[] = { #}
{# {% for x in mu_mu_invdelta[tmGrammar.INVERSE_DR] -%} #}
{# {{x}}{% if not loop.last %},{% endif %} #}
{# {%- endfor -%} #}
{# }; #}

{# eof #}

17 changes: 17 additions & 0 deletions rate-estimation/menu2lib/templates/macros.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,18 @@
const long long mass2 = upt0 * upt1 * (coshDeltaEta - cosDeltaPhi);
{%- endmacro -%}

{#
# set mass2 over delta R2
#}
{%- macro setMass2DeltaR2(prefix0, prefix1, idx0, idx1, LUTS, iPi, useDelta=True) -%}
{{ setMass2(prefix0, prefix1, idx0, idx1, LUTS, iPi, useDelta) }}
const long long inversedR2 = {{LUTS.COS_DPHI}}[deltaIPhi];
{# dummy LUT for now #}
const long long mass2deltaR2 = mass2 * inversedR2;
{%- endmacro -%}
{# get actual LUT name #}


{#
# set mass3
#}
Expand Down Expand Up @@ -287,6 +299,11 @@
{{ setMassUpt2(prefix, prefix, idx0, idx1, LUTS, iPi, False) }}
{{ applyFunctionCut('mass2', cut, LUTS.PREC_MASS) }}

{% elif cut.getCutType() == tmEventSetup.MassDeltaR %}
// {{ cut.getMinimum().value | toMassDeltaR }} <= massdr <= {{ cut.getMaximum().value | toMassDeltaR}}
{{ setMass2DeltaR2(prefix, prefix, idx0, idx1, LUTS, iPi, False) }}
{{ applyFunctionCut('mass2deltaR2', cut, LUTS.PREC_MASSDR) }}

{% elif cut.getCutType() == tmEventSetup.ChargeCorrelation %}
if (data->{{prefix}}Chg.at({{idx0}}) == 0) continue; // charge valid bit not set
if (data->{{prefix}}Chg.at({{idx1}}) == 0) continue; // charge valid bit not set
Expand Down