Skip to content

Conversation

@jchismar
Copy link

@jchismar jchismar commented Jul 28, 2025

This PR introduces the T4 (quadruplet) object to increase efficiency at large displacement. T4s are built from two T3s that share a common LS. Only T3s that are not used in pT5s, pT3s or T5s are considered, and the T3s must start in either the endcap or on barrel layer 3 to reduce duplicates with the other objects. T4s are added as an additional track candidate so that the final TC collection is in the following order: pT5, pT3, T5, T4, and pLS. Motivation for the introduction of T4s was presented at the Tracking POG meeting on 30 Sep 2025.

5 selections are applied to T4s: requiring that the charges of the two T3s must be the same, a DNN classifier, a beta cut for consistency with a circle in r-phi (identical to that used for T5s), a chi-squared cut for consistency with a helix in r-z, and a cut on the impact parameter (dxy). The T4 DNN uses a multi-class architecture (similar to the T3 DNN) which classifies T4s as fake, real prompt, and real displaced. The DNN and dxy cut values are set to keep real displaced tracks while rejecting fake and real prompt tracks.

The displaced efficiency gain on a 50cm cube muon gun sample is shown below, where the current configuration is shown in blue and the addition of T4s is shown in red.
eff_v_simDistPos

Full plots can be found here for ttbar PU200 and 50cm cube muon gun.

@jchismar
Copy link
Author

/run all

@github-actions
Copy link

The PR was built and ran successfully in standalone mode. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
   avg     28.6    374.4    184.7    115.0     48.3    714.2    126.9    134.8    178.5      1.6    1907.0    1164.1+/- 279.4     555.8   explicit[s=4] (target branch)
   avg     28.3    376.9    184.4    111.4     54.4    717.4     25.8    128.7    136.0    198.5      2.1    1964.0    1218.3+/- 295.8     576.0   explicit[s=4] (this PR)

@github-actions
Copy link

There was a problem while building and running with CMSSW. The logs can be found here.

@jchismar
Copy link
Author

/run cmssw

@github-actions
Copy link

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@jchismar
Copy link
Author

jchismar commented Aug 1, 2025

/run all

@github-actions
Copy link

github-actions bot commented Aug 1, 2025

The PR was built and ran successfully in standalone mode. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
   avg     28.2    372.6    185.0    108.9     48.5    717.1    127.1    134.3    176.7      1.7    1900.0    1154.7+/- 274.6     556.1   explicit[s=4] (target branch)
   avg     28.1    375.1    188.5    111.9     53.7    705.4     24.9    126.7    134.4    192.4      2.1    1943.1    1209.5+/- 287.6     572.0   explicit[s=4] (this PR)

@github-actions
Copy link

github-actions bot commented Aug 1, 2025

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@jchismar
Copy link
Author

jchismar commented Aug 4, 2025

/run gpu-all

@github-actions
Copy link

github-actions bot commented Aug 4, 2025

The PR was built and ran successfully in standalone mode on GPU. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
[target branch]
   avg     15.2      0.4      0.3      0.6      0.8      0.3      0.7      0.4      0.8      0.0      19.4       3.9+/-  0.7      19.4   explicit[s=1]
   avg      0.9      0.6      0.4      0.8      1.0      0.3      1.0      0.4      1.1      0.0       6.5       5.3+/-  1.0       3.3   explicit[s=2]
   avg      1.6      0.9      0.7      1.2      1.5      0.5      1.6      0.7      1.9      0.0      10.5       8.5+/-  1.7       2.7   explicit[s=4]
   avg      2.2      1.3      1.1      1.8      2.1      0.6      2.2      0.9      2.5      0.0      14.8      11.9+/-  2.8       2.5   explicit[s=6]
   avg      2.8      1.7      1.6      2.3      2.7      0.8      2.8      1.2      3.2      0.0      19.2      15.6+/-  3.8       2.5   explicit[s=8]
[this PR]
   avg     18.4      0.4      0.3      0.6      0.8      0.3      0.4      0.7      0.4      1.2      0.0      23.4       4.7+/-  1.3      23.4   explicit[s=1]
   avg      0.9      0.6      0.4      0.8      0.9      0.3      0.6      0.9      0.4      1.7      0.0       7.6       6.4+/-  1.6       3.8   explicit[s=2]
   avg      1.5      0.8      0.7      1.2      1.4      0.4      1.1      1.4      0.6      2.7      0.0      11.9      10.0+/-  2.4       3.0   explicit[s=4]
   avg      2.2      1.2      1.0      1.6      2.0      0.6      1.7      2.1      1.0      3.4      0.0      16.7      14.0+/-  3.6       2.9   explicit[s=6]
   avg      3.0      1.8      1.4      2.2      2.5      0.7      2.2      2.7      1.2      4.3      0.0      22.1      18.4+/-  4.7       2.8   explicit[s=8]

@github-actions
Copy link

github-actions bot commented Aug 4, 2025

The PR was built and ran successfully with CMSSW on GPU. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@jchismar
Copy link
Author

jchismar commented Aug 6, 2025

/run all

@github-actions
Copy link

github-actions bot commented Aug 6, 2025

The PR was built and ran successfully in standalone mode. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
   avg     28.3    373.6    185.5    110.1     49.3    720.0    126.6    135.4    178.2      1.7    1908.8    1160.4+/- 274.8     556.9   explicit[s=4] (target branch)
   avg     28.6    381.3    184.9    111.8     55.1    710.0     21.4    126.8    138.8    188.2      2.1    1949.0    1210.4+/- 290.9     575.1   explicit[s=4] (this PR)

@github-actions
Copy link

github-actions bot commented Aug 6, 2025

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@slava77
Copy link

slava77 commented Aug 6, 2025

/run gpu-all

@github-actions
Copy link

github-actions bot commented Aug 6, 2025

The PR was built and ran successfully in standalone mode on GPU. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
[target branch]
   avg     15.0      0.4      0.3      0.6      0.8      0.3      0.6      0.4      0.9      0.0      19.2       3.9+/-  0.7      19.3   explicit[s=1]
   avg      0.8      0.6      0.4      0.8      1.0      0.3      1.0      0.5      1.3      0.0       6.7       5.5+/-  1.0       3.4   explicit[s=2]
   avg      1.5      0.9      0.8      1.2      1.5      0.4      1.7      0.7      2.0      0.0      10.8       8.8+/-  1.7       2.7   explicit[s=4]
   avg      2.2      1.2      1.1      1.9      2.2      0.7      2.4      1.0      2.7      0.0      15.5      12.6+/-  2.7       2.6   explicit[s=6]
   avg      2.9      1.8      1.5      2.4      2.9      0.8      3.0      1.4      3.5      0.0      20.3      16.5+/-  3.9       2.6   explicit[s=8]
[this PR]
   avg     18.4      0.4      0.3      0.6      0.8      0.3      0.4      0.6      0.4      1.2      0.0      23.3       4.6+/-  0.9      23.3   explicit[s=1]
   avg      0.9      0.6      0.4      0.8      1.0      0.3      0.6      1.0      0.4      1.6      0.0       7.6       6.4+/-  1.2       3.8   explicit[s=2]
   avg      1.7      0.9      0.7      1.2      1.5      0.4      1.2      1.5      0.6      2.5      0.0      12.2      10.1+/-  2.1       3.1   explicit[s=4]
   avg      2.4      1.3      1.1      1.7      2.0      0.6      1.7      2.2      1.0      3.5      0.0      17.4      14.4+/-  3.3       3.0   explicit[s=6]
   avg      2.9      1.8      1.5      2.3      2.6      0.8      2.3      2.8      1.3      4.3      0.0      22.5      18.9+/-  4.4       2.9   explicit[s=8]

@github-actions
Copy link

github-actions bot commented Aug 6, 2025

The PR was built and ran successfully with CMSSW on GPU. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@jchismar
Copy link
Author

jchismar commented Aug 7, 2025

/run cmssw

@slava77
Copy link

slava77 commented Aug 7, 2025

instead of adding T4s in parallel in CMSSW, I'd rather we keep them together with T5s.
Maintenance of the LST candidate split is already quite tedious and I don't see a strong reason to have a split.
Renaming corresponding T5 cmssw collections to T45 or T4T5 then would be enough.

@github-actions
Copy link

github-actions bot commented Aug 7, 2025

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@jchismar
Copy link
Author

jchismar commented Aug 7, 2025

instead of adding T4s in parallel in CMSSW, I'd rather we keep them together with T5s. Maintenance of the LST candidate split is already quite tedious and I don't see a strong reason to have a split. Renaming corresponding T5 cmssw collections to T45 or T4T5 then would be enough.

Got it, I'll do that instead.

@jchismar
Copy link
Author

jchismar commented Aug 8, 2025

/run cmssw

@github-actions
Copy link

github-actions bot commented Aug 8, 2025

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@GNiendorf
Copy link
Member

GNiendorf commented Aug 22, 2025

Adding the charge cut to the T5's causes a big drop in efficiency? Any ideas why it works for T4s? @slava77
To give context to Jade, currently looking at quick cuts that could be added to the T5's counting kernel.

Commit here, added to counting + creation kernels: d9b77ef

I get the same plots only adding the cut to the creation kernel.

TC_base_0_0_eff_pt

@slava77
Copy link

slava77 commented Aug 22, 2025

Adding the charge cut to the T5's causes a big drop in efficiency? Any ideas why it works for T4s? @slava77

How large is the inefficiency?
One plot posted is not enough to see a change (I'm not sure which setup that is).

I can speculate that at T4 level some inefficiency was acceptable; also, having two MDs in common probably reduces the inefficiency of this cut

@GNiendorf
Copy link
Member

Adding the charge cut to the T5's causes a big drop in efficiency? Any ideas why it works for T4s? @slava77

How large is the inefficiency? One plot posted is not enough to see a change (I'm not sure which setup that is).

This is just the normal PU200 setup, you can see the pT5 efficiency drops drastically. pT5 markers are at like ~20% above.

Here is the same plot without that charge cut for comparison:

TC_base_0_0_eff_pt-1

@slava77
Copy link

slava77 commented Aug 22, 2025

This is just the normal PU200 setup, you can see the pT5 efficiency drops drastically. pT5 markers are at like ~20% above.

ah, indeed, this looks broken

@slava77
Copy link

slava77 commented Aug 22, 2025

Commit here, added to counting + creation kernels: d9b77ef

I didn't notice a bug.
You may want to recompile from scratch and add some printouts (debug)

@github-actions
Copy link

The PR was built and ran successfully in standalone mode. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
   avg     30.8    365.9    271.4    122.1     46.1    849.8    125.5    131.1    192.0      1.6    2136.2    1255.6+/- 295.7     643.9   explicit[s=4] (target branch)
   avg     28.6    363.9    284.8    128.7     49.2    591.2     12.1    125.0    133.4    170.9      1.5    1889.2    1269.4+/- 301.8     588.4   explicit[s=4] (this PR)

@github-actions
Copy link

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

Copy link

@slava77 slava77 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

many comments related to formatting are not repeated; please check for similar patterns in the added code

namespace lst {
using QuadrupletsHostCollection = PortableHostMultiCollection<QuadrupletsSoA, QuadrupletsOccupancySoA>;
} // namespace lst
#endif No newline at end of file
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

end line is missing

Comment on lines 97 to 101
struct Params_T4 {
static constexpr int kLayers = 4, kHits = 8;
using ArrayU8xLayers = edm::StdArray<uint8_t, kLayers>;
using ArrayU16xLayers = edm::StdArray<uint16_t, kLayers>;
using ArrayUxHits = edm::StdArray<unsigned int, kHits>;
};
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd move this up, between T3 and T5 to be in more logical order

// only when required by a flag for other pT objects.
if (includeNonpLSTSs_ || lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5) {
if (includeNonpLSTSs_ || (lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5) ||
(lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T4)) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

6 lines below is if (lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5) {
I think that this check should stay for T4s that still have 2 first PS layers, if that logic is still required.
The barrel-3 T4s should be OK to require just the first P-side hit and pick up the second only on the next layer.

OTOH, perhaps it's worth to revisit that P-side selection for the first two hits, if it is still required.
I recall that it was needed due to the features of the initial state estimator (done using the first two hits) in the seed generator from hits (used below).
But maybe things changed since the initial introduction of this code.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an old comment but I think it might be still relevant. Currently the T4s aren't included in the check for having the first 2 hits be PS (in L218-222 in the current LSTOutputConverter.cc). Should I include them? From my understanding if it's just checking the first 2 hits then it should have no impact on any of the T4s.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this comment was indeed from the time when I started the review in August

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(since the very early version), now that all barrel T4s start from B3, this requirement would kill all T4s.
The fact that we see something (visible in the fake+dr plots though) looks like using P+S for the first two hits still works.

But it could be that the lack of any change in efficiency is still indicative of a problem.

The logic should be less that "the first two should be P-side", but rather that if one of the two first hits is "S", it has to be on another layer and not in the same doublet module stack.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jchismar
what do you see in the cube sample vs eta in CMSSW? (just to use a sample where T4s are expected to contribute)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't checked on the cube sample in CMSSW, only ttbar with and without PU. I don't think I know which input file to use for the cube sample, do you know of one?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may need to be remade.
@VourMa @GNiendorf did you make a cube sample relatively recently (to perhaps still have the step1 config around) ?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since the goal for the test in my question/request is not so much the cube but rather to see T4s vs eta, perhaps running a local test on ttbar with T5s disabled (during building) would be enough ... or even also pT3s as well.
This way the potential issue with the hit selection in the output converter would be more clear.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ttbar with T5s disabled (during building) would be enough ... or even also pT3s as well.

uhm, no, don't disable pT3s: the reference should have something to compare with

const int flatThreadExtent = blockSize; // total threads per block

for (int iter : cms::alpakatools::uniform_groups_z(acc, nEligibleT4Modules)) {
uint16_t lowerModule1 = ranges.indicesOfEligibleT4Modules()[iter];
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
uint16_t lowerModule1 = ranges.indicesOfEligibleT4Modules()[iter];
const uint16_t lowerModule1 = ranges.indicesOfEligibleT4Modules()[iter];

check the rest of the code to more systematically keep things const if they are supposed to be

Comment on lines 654 to 655
unsigned int innerOuterInnerMiniDoubletIndex =
segments.mdIndices()[secondSegmentIndex][0]; //inner triplet outer segment inner MD index
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please try to keep the names more compact or at least more readable: innerOuterInner requires the comment to be understood.

if the name was more clear the comment is not necessary

Suggested change
unsigned int innerOuterInnerMiniDoubletIndex =
segments.mdIndices()[secondSegmentIndex][0]; //inner triplet outer segment inner MD index
unsigned int innerT3OuterLSInnerMDIndex = segments.mdIndices()[secondSegmentIndex][0];

or

Suggested change
unsigned int innerOuterInnerMiniDoubletIndex =
segments.mdIndices()[secondSegmentIndex][0]; //inner triplet outer segment inner MD index
unsigned int innerT3MD2Index = segments.mdIndices()[secondSegmentIndex][0];

}

//___________________________________________________________________________________________________________________________________________________________________________________________
float runQuadruplet(LSTEvent* event) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

keep this close to T5s

timing_total_short += timing[7] * 1000; // pT3
timing_total_short += timing[8] * 1000; // TC
timing_total_short += timing[9] * 1000; // Reset
timing_total += timing[0] * 1000; // Hits
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is this not a loop

}

//________________________________________________________________________________________________________________________________
void createQuadrupletBranches() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

keep closer to T5 (similar code to be closer together)

}

//________________________________________________________________________________________________________________________________
std::map<unsigned int, unsigned int> setQuadrupletBranches(LSTEvent* event,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

keep closer to T5 code

std::vector<float> const& trk_ph2_z) {
auto const trackCandidatesExtended = event->getTrackCandidatesExtended();
auto const quadruplets = event->getQuadruplets<QuadrupletsSoA>();
unsigned int T4 = trackCandidatesExtended.directObjectIndices()[idx];
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
unsigned int T4 = trackCandidatesExtended.directObjectIndices()[idx];
unsigned int t4 = trackCandidatesExtended.directObjectIndices()[idx];

here and elsewhere to match the CMSSW code style (only types are capitalized first letter)

Comment on lines 219 to 225
auto hType = tracker.getDetectorType(hit.geographicalId());
if (hType != TrackerGeometry::ModuleType::Ph2PSP && n < 2)
continue; // the first two should be P
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do I recall correctly that all T4s start on a PS layer?
In this case the logic may be just if (hType == TrackerGeometry::ModuleType::Ph2PSS && n < 1) continue;
and change the comment to assume the first layer is a PS; skip the first S-side hit

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, no, if (hType == TrackerGeometry::ModuleType::Ph2PSS && n < 1) is not enough to skip the first S; need to count the total hits so far.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Manos pointed me to here to get the layer info. I'll take a look at it tomorrow, and also double check about T4s only starting on a PS layer.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

During the meeting I was talking about layer index that we can get given a detId; it needs a tracker topology though.
Need to add const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tTopoToken_; to the member data and call esConsumes on it in the constructor (similar to the geometry token). Then
const TrackerTopology& tTopo = iSetup.getData(tTopoToken_); at the start of ::produce and then tTopo.layer(hit.geographicalId()) will give you the layer.

I'd then get the first hit layer index and if (hType == TrackerGeometry::ModuleType::Ph2PSS && hitLayer == firstLayer) continue;

@jchismar
Copy link
Author

/run all

@github-actions
Copy link

There was a problem while building and running in standalone mode. The logs can be found here.

@jchismar
Copy link
Author

/run all

@jchismar
Copy link
Author

/run all

@github-actions
Copy link

The PR was built and ran successfully in standalone mode. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
   avg     27.8    366.1    294.0    118.7     45.2    665.9    119.2    125.2    162.5      1.5    1926.1    1232.4+/- 294.1     584.8   explicit[s=4] (target branch)
   avg     30.1    369.3    266.7    114.8     51.6    684.6     11.7    119.8    130.3    184.9      1.5    1965.5    1250.7+/- 297.0     603.6   explicit[s=4] (this PR)

@github-actions
Copy link

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@jchismar
Copy link
Author

/run all

@github-actions
Copy link

The PR was built and ran successfully in standalone mode. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
   avg     28.5    378.5    302.0    124.3     48.0    686.6    123.1    131.0    166.7      1.6    1990.2    1275.1+/- 298.9     609.6   explicit[s=4] (target branch)
   avg     30.7    376.9    274.2    119.4     53.5    702.1     11.9    123.4    134.7    189.8      1.5    2018.1    1285.4+/- 304.4     626.7   explicit[s=4] (this PR)

@github-actions
Copy link

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@slava77
Copy link

slava77 commented Dec 4, 2025

/run all
/run gpu-all

@github-actions
Copy link

github-actions bot commented Dec 4, 2025

The PR was built and ran successfully in standalone mode. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
   avg     28.7    375.7    298.7    121.6     46.1    680.8    122.0    127.9    167.4      2.1    1970.9    1261.5+/- 300.0     602.4   explicit[s=4] (target branch)
   avg     30.4    379.4    271.9    117.7     52.0    700.5     11.7    121.7    131.7    189.5      1.5    2008.0    1277.0+/- 305.8     620.0   explicit[s=4] (this PR)

@github-actions
Copy link

github-actions bot commented Dec 4, 2025

The PR was built and ran successfully in standalone mode on GPU. Here are some of the comparison plots.

Efficiency vs pT comparison Efficiency vs eta comparison
Fake rate vs pT comparison Fake rate vs eta comparison
Duplicate rate vs pT comparison Duplicate rate vs eta comparison

The full set of validation and comparison plots can be found here.

Here is a timing comparison:

   Evt    Hits       MD       LS      T3       T5       pLS       pT5      pT3      TC       Reset    Event     Short             Rate
[target branch]
   avg     24.5      0.4      0.4      0.5      0.9      0.3      0.6      0.4      0.9      0.0      28.9       4.1+/-  1.7      28.9   explicit[s=1]
   avg      1.1      0.6      0.6      0.7      1.1      0.3      1.0      0.5      1.3      0.0       7.1       5.7+/-  1.9       3.6   explicit[s=2]
   avg      2.2      0.9      1.0      1.2      1.6      0.4      1.5      0.6      2.0      0.0      11.5       8.9+/-  2.6       3.0   explicit[s=4]
   avg      3.0      1.3      1.5      1.8      2.3      0.6      2.1      0.9      2.7      0.0      16.1      12.6+/-  3.4       2.8   explicit[s=6]
   avg      4.3      1.8      2.1      2.5      3.0      0.7      2.7      1.2      3.3      0.0      21.7      16.7+/-  3.6       2.8   explicit[s=8]
[this PR]
   avg     33.9      0.4      0.4      0.5      0.9      0.3      0.6      0.6      0.4      1.2      0.0      39.2       5.0+/-  2.6      39.2   explicit[s=1]
   avg      1.3      0.6      0.6      0.7      1.1      0.3      0.9      0.9      0.4      1.6      0.0       8.3       6.7+/-  3.0       4.3   explicit[s=2]
   avg      2.5      0.8      0.9      1.2      1.6      0.4      1.4      1.5      0.7      2.5      0.0      13.6      10.6+/-  3.8       3.5   explicit[s=4]
   avg      3.2      1.3      1.5      1.8      2.2      0.6      2.0      1.9      0.8      3.3      0.0      18.6      14.8+/-  4.4       3.2   explicit[s=6]
   avg      4.1      1.7      2.0      2.5      2.8      0.7      2.6      2.6      1.2      4.4      0.0      24.5      19.7+/-  5.6       3.1   explicit[s=8]

@slava77
Copy link

slava77 commented Dec 4, 2025

Here is a timing comparison:

image

it looks like s=8 is slower by about 10%.
@jchismar do you have results from a local run?

@github-actions
Copy link

github-actions bot commented Dec 4, 2025

The PR was built and ran successfully with CMSSW on GPU. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@jchismar
Copy link
Author

jchismar commented Dec 4, 2025

Here is a timing comparison:

image it looks like s=8 is slower by about 10%. @jchismar do you have results from a local run?

Here is the timing from a local run:
Baseline
baselineTiming
This PR
t4PRtiming

@github-actions
Copy link

github-actions bot commented Dec 4, 2025

The PR was built and ran successfully with CMSSW. Here are some plots.

OOTB All Tracks
Efficiency and fake rate vs pT, eta, and phi

The full set of validation and comparison plots can be found here.

@github-actions github-actions bot merged commit f759879 into master Dec 9, 2025
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants