Skip to content

Commit

Permalink
Implement new Phase 2 Standalone Muon seeder
Browse files Browse the repository at this point in the history
- Takes full advantage of the Phase 2 L1 Tracker Muon information
- Direct match between L1 stubs and segments in DTs/CSCs
- Extract stubs from L1Tk Muon, only checks segments in the same chamber as the stub to match
- Match based on dphi, dtheta and number of hits in the segment
- In the barrel, if no match is found in a given station, a rough extrapolation is attempted from the closest station with a match
- At most one seed per L1Tk Muon produced in a single seeding step, with the possibility to extend to exotic signatures
  • Loading branch information
Parsifal-2045 committed Dec 10, 2024
1 parent 6f69340 commit 047b04e
Show file tree
Hide file tree
Showing 8 changed files with 1,055 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import FWCore.ParameterSet.Config as cms

# this modifier is for enabling Phase 2 L2 Muon seeding from L1Tk Muons
# and the simplified L3 Tracker Muon reconstruction (Inside-Out first)
phase2L2AndL3Muons = cms.Modifier()
9 changes: 8 additions & 1 deletion DataFormats/MuonSeed/interface/L2MuonTrajectorySeed.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h"
#include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h"
#include "DataFormats/L1TMuonPhase2/interface/TrackerMuon.h"
#include "DataFormats/L1Trigger/interface/Muon.h"
#include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
#include "DataFormats/TrajectoryState/interface/PTrajectoryStateOnDet.h"
Expand All @@ -31,6 +32,11 @@ class L2MuonTrajectorySeed : public TrajectorySeed {
PropagationDirection dir,
l1t::MuonRef l1Ref);

L2MuonTrajectorySeed(PTrajectoryStateOnDet const& ptsos,
RecHitContainer const& rh,
PropagationDirection dir,
l1t::TrackerMuonRef l1TkMuRef);

/// Destructor
~L2MuonTrajectorySeed() override {}

Expand All @@ -39,10 +45,11 @@ class L2MuonTrajectorySeed : public TrajectorySeed {
/// Get L1 info
inline l1extra::L1MuonParticleRef l1Particle() const { return theL1Particle; }
inline l1t::MuonRef l1tParticle() const { return theL1TParticle; }
inline l1t::TrackerMuonRef l1TkMu() const { return theL1TkMu; }

protected:
private:
l1extra::L1MuonParticleRef theL1Particle;
l1t::MuonRef theL1TParticle;
l1t::TrackerMuonRef theL1TkMu;
};
#endif
8 changes: 8 additions & 0 deletions DataFormats/MuonSeed/src/L2MuonTrajectorySeed.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,11 @@ L2MuonTrajectorySeed::L2MuonTrajectorySeed(PTrajectoryStateOnDet const& ptsos,
: TrajectorySeed(ptsos, rh, dir) {
theL1TParticle = l1Ref;
}

L2MuonTrajectorySeed::L2MuonTrajectorySeed(PTrajectoryStateOnDet const& ptsos,
RecHitContainer const& rh,
PropagationDirection dir,
l1t::TrackerMuonRef l1TkMuRef)
: TrajectorySeed(ptsos, rh, dir) {
theL1TkMu = l1TkMuRef;
}
3 changes: 2 additions & 1 deletion DataFormats/MuonSeed/src/classes_def.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<lcgdict>
<class name="L2MuonTrajectorySeed" ClassVersion="12">
<class name="L2MuonTrajectorySeed" ClassVersion="13">
<version ClassVersion="13" checksum="2121764882"/>
<version ClassVersion="12" checksum="2773784798"/>
<version ClassVersion="11" checksum="541533207"/>
<version ClassVersion="10" checksum="2502730614"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,26 @@
UseOfflineSeed = cms.untracked.bool(True),
UseUnassociatedL1 = cms.bool(False)
)

phase2HltL2MuonSeedsFromL1TkMuon = cms.EDProducer('Phase2L2MuonSeedCreator',
InputObjects = cms.InputTag('l1tTkMuonsGmt'),
CSCRecSegmentLabel = cms.InputTag('hltCscSegments'),
DTRecSegmentLabel = cms.InputTag('hltDt4DSegments'),
MinPL1Tk = cms.double(3.5),
MaxPL1Tk = cms.double(200),
stubMatchDPhi = cms.double(0.05),
stubMatchDTheta = cms.double(0.1),
extrapolationWindowClose = cms.double(0.2),
extrapolationWindowFar = cms.double(0.1),
maximumEtaBarrel = cms.double(0.7),
maximumEtaOverlap = cms.double(1.3),
Propagator = cms.string('SteppingHelixPropagatorAny'),
ServiceParameters = cms.PSet(
Propagators = cms.untracked.vstring('SteppingHelixPropagatorAny'),
RPCLayers = cms.bool(True),
UseMuonNavigation = cms.untracked.bool(True)
)
)

from Configuration.ProcessModifiers.phase2L2AndL3Muons_cff import phase2L2AndL3Muons
phase2L2AndL3Muons.toReplaceWith(hltL2MuonSeedsFromL1TkMuon, phase2HltL2MuonSeedsFromL1TkMuon)
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,16 @@
from ..modules.hltL2OfflineMuonSeeds_cfi import *
from ..sequences.HLTMuonlocalrecoSequence_cfi import *

HLTL2MuonsFromL1TkSequence = cms.Sequence(HLTMuonlocalrecoSequence+hltL2OfflineMuonSeeds+hltL2MuonSeedsFromL1TkMuon+hltL2MuonsFromL1TkMuon)
HLTL2MuonsFromL1TkSequence = cms.Sequence(
HLTMuonlocalrecoSequence
+ hltL2OfflineMuonSeeds
+ hltL2MuonSeedsFromL1TkMuon
+ hltL2MuonsFromL1TkMuon
)

from Configuration.ProcessModifiers.phase2L2AndL3Muons_cff import phase2L2AndL3Muons

phase2L2AndL3Muons.toReplaceWith(
HLTL2MuonsFromL1TkSequence,
HLTL2MuonsFromL1TkSequence.copyAndExclude([hltL2OfflineMuonSeeds]),
)
Loading

0 comments on commit 047b04e

Please sign in to comment.