21 #include "Math/VectorUtil.h" 50 primaryVerticesToken_(
52 reducedEndcapRecHitCollectionToken_(
54 reducedBarrelRecHitCollectionToken_(
60 muonPathsToPass_(iConfig.getParameter<std::vector<std::string>>(
"muonPathsToPass")),
61 minMuPt_(iConfig.getParameter<
double>(
"minMuPt")),
62 maxMuEta_(iConfig.getParameter<
double>(
"maxMuEta")),
63 minTrackEta_(iConfig.getParameter<
double>(
"minTrackEta")),
64 maxTrackEta_(iConfig.getParameter<
double>(
"maxTrackEta")),
65 minTrackPt_(iConfig.getParameter<
double>(
"minTrackPt")),
66 maxTransDCA_(iConfig.getParameter<
double>(
"maxTransDCA")),
67 maxLongDCA_(iConfig.getParameter<
double>(
"maxLongDCA")),
68 maxVtxChi_(iConfig.getParameter<
double>(
"maxVtxChi")),
69 minInvMass_(iConfig.getParameter<
double>(
"minInvMass")),
70 maxInvMass_(iConfig.getParameter<
double>(
"maxInvMass")),
71 trackIsoConesize_(iConfig.getParameter<
double>(
"trackIsoConesize")),
72 trackIsoInnerCone_(iConfig.getParameter<
double>(
"trackIsoInnerCone")),
73 ecalIsoConesize_(iConfig.getParameter<
double>(
"ecalIsoConesize")),
74 minEcalHitE_(iConfig.getParameter<
double>(
"minEcalHitE")),
75 maxTrackIso_(iConfig.getParameter<
double>(
"maxTrackIso")),
76 maxEcalIso_(iConfig.getParameter<
double>(
"maxEcalIso")),
77 minSigInvMass_(iConfig.getParameter<
double>(
"minSigInvMass")),
78 maxSigInvMass_(iConfig.getParameter<
double>(
"maxSigInvMass")),
79 minStandaloneDr_(iConfig.getParameter<
double>(
"minStandaloneDr")),
80 maxStandaloneDE_(iConfig.getParameter<
double>(
"maxStandaloneDE")),
81 keepOffPeak_(iConfig.getParameter<
bool>(
"keepOffPeak")),
82 keepSameSign_(iConfig.getParameter<
bool>(
"keepSameSign")),
83 keepTotalRegion_(iConfig.getParameter<
bool>(
"keepTotalRegion")),
84 keepPartialRegion_(iConfig.getParameter<
bool>(
"keepPartialRegion")) {}
96 bool totalRegion =
false;
97 bool sameSign =
false;
99 bool partialRegion =
false;
115 int nMuonTrackCand = 0;
116 float MuonTrackMass = 0.;
119 for (std::vector<reco::Muon>::const_iterator iMuon = recoMuons->begin(); iMuon != recoMuons->end(); iMuon++) {
120 if (!(iMuon->isPFMuon() && iMuon->isGlobalMuon()))
130 for (std::vector<reco::Track>::const_iterator iTrack = thePATTrackHandle->begin();
131 iTrack != thePATTrackHandle->end();
140 bool foundtrack =
false;
142 for (
unsigned int i = 0;
i <
vertices->size();
i++) {
144 if (!
vtx->isValid()) {
147 for (
unsigned int j = 0;
j <
vtx->tracksSize();
j++) {
148 double dPt = fabs(
vtx->trackRefAt(
j)->pt() - iTrack->pt()) / iTrack->pt();
151 double dR2 =
deltaR2(
vtx->trackRefAt(
j)->eta(),
vtx->trackRefAt(
j)->phi(), iTrack->eta(), iTrack->phi());
152 if (dR2 < 0.001 * 0.001) {
172 std::vector<reco::TransientTrack> tracksToVertex;
173 tracksToVertex.push_back(transientTrackBuilder->
build(*iTrack));
174 tracksToVertex.push_back(transientTrackBuilder->
build(iMuon->globalTrack()));
187 tracksToVertex[0].trajectoryStateClosestToPoint(fittedVertex.
position());
189 tracksToVertex[1].trajectoryStateClosestToPoint(fittedVertex.
position());
193 double total_energy =
sqrt(one_momentum.
mag2() + 0.106 * 0.106) +
sqrt(two_momentum.
mag2() + 0.106 * 0.106);
194 double total_px = one_momentum.
x() + two_momentum.
x();
195 double total_py = one_momentum.
y() + two_momentum.
y();
196 double total_pz = one_momentum.
z() + two_momentum.
z();
197 MuonTrackMass =
sqrt(
pow(total_energy, 2) -
pow(total_px, 2) -
pow(total_py, 2) -
pow(total_pz, 2));
204 if (MuonTrackMass < minInvMass_ || MuonTrackMass >
maxInvMass_)
216 if (iMuon->charge() == iTrack->charge()) {
221 double staMinDr2 = 1000;
222 double staMinDEoverE = -10;
224 for (reco::TrackCollection::const_iterator staTrack =
staTracks->begin(); staTrack !=
staTracks->end();
227 double dR2 =
deltaR2(
track.impactPointTSCP().momentum().eta(),
228 track.impactPointTSCP().momentum().phi(),
231 double staDE = (
std::sqrt(
track.impactPointTSCP().momentum().mag2()) - (*iTrack).p()) / (*iTrack).p();
232 if (dR2 < staMinDr2) {
236 if (dR2 < minStandaloneDr_ * minStandaloneDr_ && staDE > staMinDEoverE) {
237 staMinDEoverE = staDE;
242 if (MuonTrackMass < minSigInvMass_ || MuonTrackMass >
maxSigInvMass_) {
249 if (MuonTrackMass < minSigInvMass_ || MuonTrackMass >
maxSigInvMass_) {
252 partialRegion =
true;
260 if (nMuonTrackCand == 0)
284 std::vector<std::string> m_muonPathsToPass) {
291 for (
auto&
pathName : m_muonPathsToPass) {
305 std::vector<reco::Track>::const_iterator& iTrack) {
306 bool foundtrack =
false;
307 unsigned int vtxindex = -1;
308 unsigned int trackindex = -1;
309 double Isolation = 0;
310 for (
unsigned int i = 0;
i < vtxHandle->size();
i++) {
312 if (!
vtx->isValid()) {
315 for (
unsigned int j = 0;
j <
vtx->tracksSize();
j++) {
316 double dPt = fabs(
vtx->trackRefAt(
j)->pt() - iTrack->pt()) / iTrack->pt();
319 double dR2 =
deltaR2(
vtx->trackRefAt(
j)->eta(),
vtx->trackRefAt(
j)->phi(), iTrack->eta(), iTrack->phi());
320 if (dR2 < 0.001 * 0.001) {
336 for (
unsigned int i = 0;
i < primaryVtx->tracksSize();
i++) {
340 if (
deltaR2(iTrack->eta(), iTrack->phi(), secondarytrack->
eta(), secondarytrack->
phi()) >
342 deltaR2(iTrack->eta(), iTrack->phi(), secondarytrack->
eta(), secondarytrack->
phi()) <
345 Isolation += secondarytrack->
pt();
348 return Isolation / iTrack->pt();
365 const DetId id = (*hit).detid();
368 if ((hitPos.
eta() *
t0.momentum().eta()) < 0) {
375 eDR += (*hit).energy();
379 const DetId id = (*hit).detid();
381 if ((hitPos.
eta() *
t0.momentum().eta()) < 0) {
388 eDR += (*hit).energy();
405 desc.add<std::vector<std::string>>(
"muonPathsToPass",
410 desc.add<
double>(
"minMuPt", 26);
411 desc.add<
double>(
"maxMuEta", 2.4);
412 desc.add<
double>(
"minTrackEta", 0);
413 desc.add<
double>(
"maxTrackEta", 2.4);
414 desc.add<
double>(
"minTrackPt", 20);
415 desc.add<
double>(
"maxTransDCA", 0.005);
416 desc.add<
double>(
"maxLongDCA", 0.05);
417 desc.add<
double>(
"maxVtxChi", 3.0);
418 desc.add<
double>(
"minInvMass", 50);
419 desc.add<
double>(
"maxInvMass", 150);
420 desc.add<
double>(
"trackIsoConesize", 0.3);
421 desc.add<
double>(
"trackIsoInnerCone", 0.01);
422 desc.add<
double>(
"ecalIsoConesize", 0.4);
423 desc.add<
double>(
"minEcalHitE", 0.3);
424 desc.add<
double>(
"maxTrackIso", 0.05);
425 desc.add<
double>(
"maxEcalIso", 10);
426 desc.add<
double>(
"minSigInvMass", 76);
427 desc.add<
double>(
"maxSigInvMass", 106);
428 desc.add<
double>(
"minStandaloneDr", 1.0);
429 desc.add<
double>(
"maxStandaloneDE", -0.5);
430 desc.add<
bool>(
"keepOffPeak",
true);
431 desc.add<
bool>(
"keepSameSign",
true);
432 desc.add<
bool>(
"keepTotalRegion",
true);
433 desc.add<
bool>(
"keepPartialRegion",
true);
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
const double minEcalHitE_
const double minStandaloneDr_
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
const std::vector< std::string > muonPathsToPass_
double getTrackIsolation(const edm::Event &, edm::Handle< reco::VertexCollection > vtxHandle, std::vector< reco::Track >::const_iterator &iTrack)
const double maxStandaloneDE_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const edm::EDGetTokenT< edm::TriggerResults > trigResultsToken_
std::vector< EcalRecHit >::const_iterator const_iterator
bool passTriggers(const edm::Event &iEvent, edm::EDGetToken m_trigResultsToken, std::vector< std::string > m_muonPathsToPass)
double transverseImpactParameter() const
const edm::EDGetTokenT< std::vector< reco::Vertex > > primaryVerticesToken_
float totalChiSquared() const
reco::TransientTrack build(const reco::Track *p) const
const double ecalIsoConesize_
double pt() const
track transverse momentum
TrajectoryStateClosestToPoint trajectoryStateClosestToPoint(const GlobalPoint &point) const
GlobalPoint position() const
const double trackIsoInnerCone_
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > transientTrackToken_
const edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
const double minTrackEta_
double phi() const
azimuthal angle of momentum vector
#define DEFINE_FWK_MODULE(type)
const_iterator begin() const
static std::string const triggerResults
const bool keepPartialRegion_
double getECALIsolation(const edm::Event &, const edm::EventSetup &, const reco::TransientTrack track)
const PerigeeTrajectoryParameters & perigeeParameters() const
bool filter(edm::Event &, const edm::EventSetup &) override
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
const_iterator end() const
static const char *const trigNames[]
double eta() const
pseudorapidity of momentum vector
const edm::EDGetTokenT< std::vector< reco::Track > > trackCollectionToken_
static TrackQuality qualityByName(const std::string &name)
const bool keepTotalRegion_
double longitudinalImpactParameter() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
const double maxTrackIso_
const double maxSigInvMass_
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometryToken_
const edm::EDGetToken recoMuonToken_
const edm::EDGetToken standaloneMuonToken_
const double maxTrackEta_
float degreesOfFreedom() const
const double trackIsoConesize_
GlobalVector momentum() const
const edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
GlobalPoint position() const
DisappearingMuonsSkimming(const edm::ParameterSet &)
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
const double maxTransDCA_
Power< A, B >::type pow(const A &a, const B &b)