Skip to content

Commit

Permalink
Implement floor/ceil for min/max cuts + increase relative isolation r…
Browse files Browse the repository at this point in the history
…esolution
  • Loading branch information
Benjamin Huber committed Feb 29, 2024
1 parent b29c58e commit 3dc38e2
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 74 deletions.
50 changes: 34 additions & 16 deletions L1Trigger/Phase2L1GT/interface/L1GTScales.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace l1t {
class L1GTScales {
static constexpr int RELATIVE_ISOLATION_RESOLUTION = 10; // Resolution = 1/2^RELATIVE_ISOLATION_RESOLUTION
static constexpr int RELATIVE_ISOLATION_RESOLUTION = 15; // Resolution = 1/2^RELATIVE_ISOLATION_RESOLUTION

public:
/* INV_MASS_SQR_OVER_2_DR_SQR_RESOLUTION originates from a simple analysis that yielded that the smallest
Expand All @@ -34,23 +34,23 @@ namespace l1t {

static void fillPSetDescription(edm::ParameterSetDescription &);

int to_hw_pT(double value) const { return std::round(value / pT_lsb_); };
int to_hw_phi(double value) const { return std::round(value / phi_lsb_); };
int to_hw_eta(double value) const { return std::round(value / eta_lsb_); };
int to_hw_z0(double value) const { return std::round(value / z0_lsb_); };
// int to_hw_d0(double value) const { return std::round(value / d0_lsb_); };
int to_hw_relative_isolationPT(double value) const {
return std::round(pT_lsb_ * value * std::pow(2, isolation_shift_) / isolationPT_lsb_);
int to_hw_pT_ceil(double value) const { return std::ceil(value / pT_lsb_); };
int to_hw_phi_ceil(double value) const { return std::ceil(value / phi_lsb_); };
int to_hw_eta_ceil(double value) const { return std::ceil(value / eta_lsb_); };
int to_hw_z0_ceil(double value) const { return std::ceil(value / z0_lsb_); };
// int to_hw_d0(double value) const { return std::ceil(value / d0_lsb_); };
int to_hw_relative_isolationPT_ceil(double value) const {
return std::ceil(pT_lsb_ * value * std::pow(2, isolation_shift_) / isolationPT_lsb_);
}
int to_hw_isolationPT(double value) const { return std::round(value / isolationPT_lsb_); }
int to_hw_beta(double value) const { return std::round(value / beta_lsb_); };
int to_hw_mass(double value) const { return std::round(value / mass_lsb_); };
int to_hw_seed_pT(double value) const { return std::round(value / seed_pT_lsb_); };
int to_hw_seed_z0(double value) const { return std::round(value / seed_z0_lsb_); };
int to_hw_scalarSumPT(double value) const { return std::round(value / scalarSumPT_lsb_); };
int to_hw_sum_pT_pv(double value) const { return std::round(value / sum_pT_pv_lsb_); };
int to_hw_isolationPT_ceil(double value) const { return std::ceil(value / isolationPT_lsb_); }
int to_hw_beta_ceil(double value) const { return std::ceil(value / beta_lsb_); };
int to_hw_mass_ceil(double value) const { return std::ceil(value / mass_lsb_); };
int to_hw_seed_pT_ceil(double value) const { return std::ceil(value / seed_pT_lsb_); };
int to_hw_seed_z0_ceil(double value) const { return std::ceil(value / seed_z0_lsb_); };
int to_hw_scalarSumPT_ceil(double value) const { return std::ceil(value / scalarSumPT_lsb_); };
int to_hw_sum_pT_pv_ceil(double value) const { return std::ceil(value / sum_pT_pv_lsb_); };

int to_hw_dRSquared(double value) const { return std::round(value * value / (eta_lsb_ * eta_lsb_)); }
int to_hw_dRSquared_ceil(double value) const { return std::ceil(value * value / (eta_lsb_ * eta_lsb_)); }

double to_hw_InvMassSqrDiv2(double value) const { return value * value / (2 * pT_lsb_ * pT_lsb_); }
double to_hw_TransMassSqrDiv2(double value) const { return value * value / (2 * pT_lsb_ * pT_lsb_); }
Expand All @@ -61,6 +61,24 @@ namespace l1t {
(2 * pT_lsb_ * pT_lsb_);
}

int to_hw_pT_floor(double value) const { return std::floor(value / pT_lsb_); };
int to_hw_phi_floor(double value) const { return std::floor(value / phi_lsb_); };
int to_hw_eta_floor(double value) const { return std::floor(value / eta_lsb_); };
int to_hw_z0_floor(double value) const { return std::floor(value / z0_lsb_); };
// int to_hw_d0(double value) const { return std::floor(value / d0_lsb_); };
int to_hw_relative_isolationPT_floor(double value) const {
return std::floor(pT_lsb_ * value * std::pow(2, isolation_shift_) / isolationPT_lsb_);
}
int to_hw_isolationPT_floor(double value) const { return std::floor(value / isolationPT_lsb_); }
int to_hw_beta_floor(double value) const { return std::floor(value / beta_lsb_); };
int to_hw_mass_floor(double value) const { return std::floor(value / mass_lsb_); };
int to_hw_seed_pT_floor(double value) const { return std::floor(value / seed_pT_lsb_); };
int to_hw_seed_z0_floor(double value) const { return std::floor(value / seed_z0_lsb_); };
int to_hw_scalarSumPT_floor(double value) const { return std::floor(value / scalarSumPT_lsb_); };
int to_hw_sum_pT_pv_floor(double value) const { return std::floor(value / sum_pT_pv_lsb_); };

int to_hw_dRSquared_floor(double value) const { return std::floor(value * value / (eta_lsb_ * eta_lsb_)); }

double to_pT(int value) const { return value * pT_lsb_; };
double to_phi(int value) const { return value * phi_lsb_; };
double to_eta(int value) const { return value * eta_lsb_; };
Expand Down
8 changes: 4 additions & 4 deletions L1Trigger/Phase2L1GT/plugins/L1GT3BodyCut.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ namespace l1t {
return std::max<int>(
std::ceil(std::log2(minInvMassSqrDiv2_.value() * cosPhiLUT_.output_scale() + 1.0)) - 16, 0);
} else if (maxInvMassSqrDiv2_) {
return std::max<int>(
std::ceil(std::log2(maxInvMassSqrDiv2_.value() * cosPhiLUT_.output_scale() + 1.0)) - 16, 0);
return std::max<int>(std::ceil(std::log2(maxInvMassSqrDiv2_.value() * cosPhiLUT_.output_scale())) - 16,
0);
} else {
return 0;
}
Expand All @@ -68,8 +68,8 @@ namespace l1t {
return std::max<int>(
std::ceil(std::log2(minTransMassSqrDiv2_.value() * cosPhiLUT_.output_scale() + 1.0)) - 16, 0);
} else if (maxTransMassSqrDiv2_) {
return std::max<int>(
std::ceil(std::log2(maxTransMassSqrDiv2_.value() * cosPhiLUT_.output_scale() + 1.0)) - 16, 0);
return std::max<int>(std::ceil(std::log2(maxTransMassSqrDiv2_.value() * cosPhiLUT_.output_scale())) - 16,
0);
} else {
return 0;
}
Expand Down
40 changes: 20 additions & 20 deletions L1Trigger/Phase2L1GT/plugins/L1GTCorrelationalCut.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@ namespace l1t {
coshEtaLUT2_(lutConfig.getParameterSet("cosh_eta_lut2")),
cosPhiLUT_(lutConfig.getParameterSet("cos_phi_lut")),
minDEta_(getOptionalParam<int, double>(
"minDEta", config, [&scales](double value) { return scales.to_hw_eta(value); })),
"minDEta", config, [&scales](double value) { return scales.to_hw_eta_floor(value); })),
maxDEta_(getOptionalParam<int, double>(
"maxDEta", config, [&scales](double value) { return scales.to_hw_eta(value); })),
"maxDEta", config, [&scales](double value) { return scales.to_hw_eta_ceil(value); })),
minDPhi_(getOptionalParam<int, double>(
"minDPhi", config, [&scales](double value) { return scales.to_hw_phi(value); })),
"minDPhi", config, [&scales](double value) { return scales.to_hw_phi_floor(value); })),
maxDPhi_(getOptionalParam<int, double>(
"maxDPhi", config, [&scales](double value) { return scales.to_hw_phi(value); })),
"maxDPhi", config, [&scales](double value) { return scales.to_hw_phi_ceil(value); })),
minDz_(getOptionalParam<int, double>(
"minDz", config, [&scales](double value) { return scales.to_hw_z0(value); })),
"minDz", config, [&scales](double value) { return scales.to_hw_z0_floor(value); })),
maxDz_(getOptionalParam<int, double>(
"maxDz", config, [&scales](double value) { return scales.to_hw_z0(value); })),
"maxDz", config, [&scales](double value) { return scales.to_hw_z0_ceil(value); })),
minDRSquared_(getOptionalParam<int, double>(
"minDR", config, [&scales](double value) { return scales.to_hw_dRSquared(value); })),
"minDR", config, [&scales](double value) { return scales.to_hw_dRSquared_floor(value); })),
maxDRSquared_(getOptionalParam<int, double>(
"maxDR", config, [&scales](double value) { return scales.to_hw_dRSquared(value); })),
"maxDR", config, [&scales](double value) { return scales.to_hw_dRSquared_ceil(value); })),
minInvMassSqrDiv2_(getOptionalParam<double, double>(
"minInvMass", config, [&scales](double value) { return scales.to_hw_InvMassSqrDiv2(value); })),
maxInvMassSqrDiv2_(getOptionalParam<double, double>(
Expand All @@ -52,22 +52,22 @@ namespace l1t {
"minTransMass",
config,
[&](double value) {
return std::round(scales.to_hw_TransMassSqrDiv2(value) * cosPhiLUT_.output_scale());
return std::floor(scales.to_hw_TransMassSqrDiv2(value) * cosPhiLUT_.output_scale());
})),
maxTransMassSqrDiv2_(getOptionalParam<int64_t, double>(
"maxTransMass",
config,
[&](double value) {
return std::round(scales.to_hw_TransMassSqrDiv2(value) * cosPhiLUT_.output_scale());
return std::ceil(scales.to_hw_TransMassSqrDiv2(value) * cosPhiLUT_.output_scale());
})),
minPTSquared_(getOptionalParam<int64_t, double>(
"minCombPt",
config,
[&](double value) { return std::round(scales.to_hw_PtSquared(value) * cosPhiLUT_.output_scale()); })),
[&](double value) { return std::floor(scales.to_hw_PtSquared(value) * cosPhiLUT_.output_scale()); })),
maxPTSquared_(getOptionalParam<int64_t, double>(
"maxCombPt",
config,
[&](double value) { return std::round(scales.to_hw_PtSquared(value) * cosPhiLUT_.output_scale()); })),
[&](double value) { return std::ceil(scales.to_hw_PtSquared(value) * cosPhiLUT_.output_scale()); })),
minInvMassSqrOver2DRSqr_(getOptionalParam<double, double>(
"minInvMassOverDR", config, [&scales](double value) { return scales.to_hw_InvMassSqrDiv2(value); })),
maxInvMassSqrOver2DRSqr_(getOptionalParam<double, double>(
Expand Down Expand Up @@ -163,19 +163,19 @@ namespace l1t {
// dEta [0, 2pi)
invMassSqrDiv2 = obj1.hwPT().to_int64() * obj2.hwPT().to_int64() * (lutCoshDEta - lutCosDPhi);
res &= minInvMassSqrDiv2_
? invMassSqrDiv2 > std::round(minInvMassSqrDiv2_.value() * coshEtaLUT_.output_scale())
? invMassSqrDiv2 > std::floor(minInvMassSqrDiv2_.value() * coshEtaLUT_.output_scale())
: true;
res &= maxInvMassSqrDiv2_
? invMassSqrDiv2 < std::round(maxInvMassSqrDiv2_.value() * coshEtaLUT_.output_scale())
? invMassSqrDiv2 < std::ceil(maxInvMassSqrDiv2_.value() * coshEtaLUT_.output_scale())
: true;
} else {
// dEta [2pi, 4pi), ignore cos
invMassSqrDiv2 = obj1.hwPT().to_int64() * obj2.hwPT().to_int64() * lutCoshDEta;
res &= minInvMassSqrDiv2_
? invMassSqrDiv2 > std::round(minInvMassSqrDiv2_.value() * coshEtaLUT2_.output_scale())
? invMassSqrDiv2 > std::floor(minInvMassSqrDiv2_.value() * coshEtaLUT2_.output_scale())
: true;
res &= maxInvMassSqrDiv2_
? invMassSqrDiv2 < std::round(maxInvMassSqrDiv2_.value() * coshEtaLUT2_.output_scale())
? invMassSqrDiv2 < std::ceil(maxInvMassSqrDiv2_.value() * coshEtaLUT2_.output_scale())
: true;
}

Expand Down Expand Up @@ -219,23 +219,23 @@ namespace l1t {
if (dEta < L1GTSingleInOutLUT::DETA_LUT_SPLIT) {
res &= minInvMassSqrOver2DRSqr_
? invMassSqrDiv2Shift >
ap_uint<64>(std::round(minInvMassSqrOver2DRSqr_.value() * coshEtaLUT_.output_scale())) *
ap_uint<64>(std::floor(minInvMassSqrOver2DRSqr_.value() * coshEtaLUT_.output_scale())) *
dRSquared
: true;
res &= maxInvMassSqrOver2DRSqr_
? invMassSqrDiv2Shift <
ap_uint<64>(std::round(maxInvMassSqrOver2DRSqr_.value() * coshEtaLUT_.output_scale())) *
ap_uint<64>(std::ceil(maxInvMassSqrOver2DRSqr_.value() * coshEtaLUT_.output_scale())) *
dRSquared
: true;
} else {
res &= minInvMassSqrOver2DRSqr_
? invMassSqrDiv2Shift >
ap_uint<64>(std::round(minInvMassSqrOver2DRSqr_.value() * coshEtaLUT2_.output_scale())) *
ap_uint<64>(std::floor(minInvMassSqrOver2DRSqr_.value() * coshEtaLUT2_.output_scale())) *
dRSquared
: true;
res &= maxInvMassSqrOver2DRSqr_
? invMassSqrDiv2Shift <
ap_uint<64>(std::round(maxInvMassSqrOver2DRSqr_.value() * coshEtaLUT2_.output_scale())) *
ap_uint<64>(std::ceil(maxInvMassSqrOver2DRSqr_.value() * coshEtaLUT2_.output_scale())) *
dRSquared
: true;
}
Expand Down
42 changes: 21 additions & 21 deletions L1Trigger/Phase2L1GT/plugins/L1GTSingleCollectionCut.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,57 +36,57 @@ namespace l1t {
: scales_(scales),
tag_(config.getParameter<edm::InputTag>("tag")),
minPt_(getOptionalParam<int, double>(
"minPt", config, [&scales](double value) { return scales.to_hw_pT(value); })),
"minPt", config, [&scales](double value) { return scales.to_hw_pT_floor(value); })),
maxPt_(getOptionalParam<int, double>(
"maxPt", config, [&scales](double value) { return scales.to_hw_pT(value); })),
"maxPt", config, [&scales](double value) { return scales.to_hw_pT_ceil(value); })),
minEta_(getOptionalParam<int, double>(
"minEta", config, [&scales](double value) { return scales.to_hw_eta(value); })),
"minEta", config, [&scales](double value) { return scales.to_hw_eta_floor(value); })),
maxEta_(getOptionalParam<int, double>(
"maxEta", config, [&scales](double value) { return scales.to_hw_eta(value); })),
"maxEta", config, [&scales](double value) { return scales.to_hw_eta_ceil(value); })),
minPhi_(getOptionalParam<int, double>(
"minPhi", config, [&scales](double value) { return scales.to_hw_phi(value); })),
"minPhi", config, [&scales](double value) { return scales.to_hw_phi_floor(value); })),
maxPhi_(getOptionalParam<int, double>(
"maxPhi", config, [&scales](double value) { return scales.to_hw_phi(value); })),
"maxPhi", config, [&scales](double value) { return scales.to_hw_phi_ceil(value); })),
minZ0_(getOptionalParam<int, double>(
"minZ0", config, [&scales](double value) { return scales.to_hw_z0(value); })),
"minZ0", config, [&scales](double value) { return scales.to_hw_z0_floor(value); })),
maxZ0_(getOptionalParam<int, double>(
"maxZ0", config, [&scales](double value) { return scales.to_hw_z0(value); })),
"maxZ0", config, [&scales](double value) { return scales.to_hw_z0_ceil(value); })),
minScalarSumPt_(getOptionalParam<int, double>(
"minScalarSumPt", config, [&scales](double value) { return scales.to_hw_pT(value); })),
"minScalarSumPt", config, [&scales](double value) { return scales.to_hw_pT_floor(value); })),
maxScalarSumPt_(getOptionalParam<int, double>(
"maxScalarSumPt", config, [&scales](double value) { return scales.to_hw_pT(value); })),
"maxScalarSumPt", config, [&scales](double value) { return scales.to_hw_pT_ceil(value); })),
minQualityScore_(getOptionalParam<unsigned int>("minQualityScore", config)),
maxQualityScore_(getOptionalParam<unsigned int>("maxQualityScore", config)),
qualityFlags_(getOptionalParam<unsigned int>("qualityFlags", config)),
minAbsEta_(getOptionalParam<int, double>(
"minAbsEta", config, [&scales](double value) { return scales.to_hw_eta(value); })),
"minAbsEta", config, [&scales](double value) { return scales.to_hw_eta_floor(value); })),
maxAbsEta_(getOptionalParam<int, double>(
"maxAbsEta", config, [&scales](double value) { return scales.to_hw_eta(value); })),
"maxAbsEta", config, [&scales](double value) { return scales.to_hw_eta_ceil(value); })),
minIsolationPT_(getOptionalParam<int, double>(
"minRelIsolationPT", config, [&scales](double value) { return scales.to_hw_isolationPT(value); })),
"minRelIsolationPT", config, [&scales](double value) { return scales.to_hw_isolationPT_floor(value); })),
maxIsolationPT_(getOptionalParam<int, double>(
"maxRelIsolationPT", config, [&scales](double value) { return scales.to_hw_isolationPT(value); })),
"maxRelIsolationPT", config, [&scales](double value) { return scales.to_hw_isolationPT_ceil(value); })),
minRelIsolationPT_(getOptionalParam<int, double>(
"minRelIsolationPT",
config,
[&scales](double value) { return scales.to_hw_relative_isolationPT(value); })),
[&scales](double value) { return scales.to_hw_relative_isolationPT_floor(value); })),
maxRelIsolationPT_(getOptionalParam<int, double>(
"maxRelIsolationPT",
config,
[&scales](double value) { return scales.to_hw_relative_isolationPT(value); })),
[&scales](double value) { return scales.to_hw_relative_isolationPT_ceil(value); })),
regionsAbsEtaLowerBounds_(getParamVector<int, double>(
"regionsAbsEtaLowerBounds", config, [&scales](double value) { return scales.to_hw_eta(value); })),
"regionsAbsEtaLowerBounds", config, [&scales](double value) { return scales.to_hw_eta_floor(value); })),
regionsMinPt_(getParamVector<int, double>(
"regionsMinPt", config, [&scales](double value) { return scales.to_hw_pT(value); })),
"regionsMinPt", config, [&scales](double value) { return scales.to_hw_pT_floor(value); })),
regionsMaxRelIsolationPT_(getParamVector<int, double>(
"regionsMaxRelIsolationPT",
config,
[&scales](double value) { return scales.to_hw_relative_isolationPT(value); })),
[&scales](double value) { return scales.to_hw_relative_isolationPT_ceil(value); })),
regionsQualityFlags_(config.getParameter<std::vector<unsigned int>>("regionsQualityFlags")),
minPrimVertDz_(getOptionalParam<int, double>(
"minPrimVertDz", config, [&scales](double value) { return scales.to_hw_z0(value); })),
"minPrimVertDz", config, [&scales](double value) { return scales.to_hw_z0_floor(value); })),
maxPrimVertDz_(getOptionalParam<int, double>(
"maxPrimVertDz", config, [&scales](double value) { return scales.to_hw_z0(value); })),
"maxPrimVertDz", config, [&scales](double value) { return scales.to_hw_z0_ceil(value); })),
primVertex_(getOptionalParam<unsigned int>("primVertex", config)) {}

bool checkObject(const P2GTCandidate& obj) const {
Expand Down
Loading

0 comments on commit 3dc38e2

Please sign in to comment.