CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
MuCSCTnPFlatTableProducer Class Reference

#include <DPGAnalysis/MuonTools/plugins/MuCSCTnPFlatTableProducer.cc>

Inheritance diagram for MuCSCTnPFlatTableProducer:
MuBaseFlatTableProducer edm::stream::EDProducer<>

Public Member Functions

 MuCSCTnPFlatTableProducer (const edm::ParameterSet &)
 Constructor. More...
 
- Public Member Functions inherited from MuBaseFlatTableProducer
void beginRun (const edm::Run &run, const edm::EventSetup &config) final
 Configure event setup for each run. More...
 
void endRun (const edm::Run &, const edm::EventSetup &) final
 Empty, needed by interface. More...
 
 MuBaseFlatTableProducer (const edm::ParameterSet &)
 Constructor. More...
 
void produce (edm::Event &, const edm::EventSetup &) final
 Fill ntuples event by event. More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &)
 Fill descriptors. More...
 

Protected Member Functions

void fillTable (edm::Event &) final
 Fill tree branches for a given events. More...
 
void getFromES (const edm::Run &, const edm::EventSetup &) final
 Get info from the ES by run. More...
 
void getFromES (const edm::EventSetup &) final
 Get info from the ES for a given event. More...
 
- Protected Member Functions inherited from MuBaseFlatTableProducer
template<typename T >
void addColumn (std::unique_ptr< nanoaod::FlatTable > &table, const std::string name, const std::vector< T > &vec, const std::string descr)
 

Private Member Functions

double calcDeltaR (double, double, double, double)
 
float computePFIso (const reco::MuonPFIsolation &, float)
 
float computeTrkIso (const reco::MuonIsolation &, float)
 
FreeTrajectoryState freeTrajStateMuon (const reco::Track &)
 
std::vector< Float_t > GetEdgeAndDistToGap (const reco::Track &, CSCDetId &)
 
bool hasTrigger (std::vector< int > &, const trigger::TriggerObjectCollection &, edm::Handle< trigger::TriggerEvent > &, const reco::Muon &)
 
double iso (const reco::Track &, edm::Handle< std::vector< reco::Track >>)
 
TrajectoryStateOnSurfacematchTTwithCSCSeg (const reco::Track &, edm::Handle< CSCSegmentCollection >, CSCSegmentCollection::const_iterator &, CSCDetId &)
 
bool muonTagSelection (const reco::Muon &)
 
UChar_t ringCandidate (Int_t iiStation, Int_t station, Float_t feta, Float_t phi)
 
TrajectoryStateOnSurface surfExtrapTrkSam (const reco::Track &, double)
 
UChar_t thisChamberCandidate (UChar_t station, UChar_t ring, Float_t phi)
 
bool trackProbeSelection (const reco::Track &track, edm::Handle< std::vector< reco::Track >>)
 Selection functions. More...
 
Float_t TrajectoryDistToSeg (TrajectoryStateOnSurface, CSCSegmentCollection::const_iterator)
 
Float_t YDistToHVDeadZone (Float_t, Int_t)
 
double zMass (const reco::Track &, const reco::Muon &)
 
bool zSelection (const reco::Muon &, const reco::Track &)
 

Private Attributes

double _muonIso
 
double _trackIso
 
double _zMass
 
nano_mu::ESTokenHandle< CSCGeometry, MuonGeometryRecord, edm::Transition::BeginRunm_cscGeometry
 
nano_mu::EDTokenHandle< CSCSegmentCollectionm_cscSegmentToken
 
HLTConfigProvider m_hltConfig
 HLT config provider. More...
 
std::vector< int > m_isoTrigIndices
 
std::string m_isoTrigName
 
std::unique_ptr< MuonServiceProxym_muonSP
 Muon service proxy. More...
 
nano_mu::EDTokenHandle< reco::MuonCollectionm_muToken
 Tokens. More...
 
unsigned int m_nZCands
 
nano_mu::EDTokenHandle< std::vector< reco::Vertex > > m_primaryVerticesToken
 
nano_mu::EDTokenHandle< reco::TrackCollectionm_trackToken
 
nano_mu::ESTokenHandle< TransientTrackBuilder, TransientTrackRecordm_transientTrackBuilder
 Transient Track Builder. More...
 
nano_mu::EDTokenHandle< trigger::TriggerEventm_trigEventToken
 
std::vector< int > m_trigIndices
 Indices of the triggers used by muon filler for trigger matching. More...
 
std::string m_trigName
 Name of the triggers used by muon filler for trigger matching. More...
 
nano_mu::EDTokenHandle< edm::TriggerResultsm_trigResultsToken
 
edm::ESHandle< PropagatorpropagatorAlong
 
edm::ESHandle< PropagatorpropagatorOpposite
 
edm::ESHandle< MagneticFieldtheBField
 

Static Private Attributes

static constexpr Float_t MEZ [6] = {601.3, 696.11, 696.11, 827.56, 936.44, 1025.9}
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 
- Protected Attributes inherited from MuBaseFlatTableProducer
std::string m_name
 The label name of the FlatTableProducer. More...
 
- Static Protected Attributes inherited from MuBaseFlatTableProducer
static constexpr double DEFAULT_DOUBLE_VAL {-999.0}
 Definition of default values for float variables. More...
 
static constexpr double DEFAULT_DOUBLE_VAL_POS {-1.0}
 Definition of default values for positive float variables. More...
 
static constexpr int8_t DEFAULT_INT8_VAL {-99}
 Definition of default values for int8 variables. More...
 
static constexpr int DEFAULT_INT_VAL {-999}
 Definition of default values for int variables. More...
 
static constexpr int DEFAULT_INT_VAL_POS {-1}
 Definition of default values for positive int variables. More...
 

Detailed Description

Helper class : the CSC Tag and probe segment efficiency filler

Author
M. Herndon (UW Madison)

Definition at line 62 of file MuCSCTnPFlatTableProducer.cc.

Constructor & Destructor Documentation

◆ MuCSCTnPFlatTableProducer()

MuCSCTnPFlatTableProducer::MuCSCTnPFlatTableProducer ( const edm::ParameterSet config)

Constructor.

Definition at line 165 of file MuCSCTnPFlatTableProducer.cc.

References DMR_cfg::config.

167  m_muToken{config, consumesCollector(), "muonSrc"},
168  m_trackToken{config, consumesCollector(), "trackSrc"},
169  m_cscSegmentToken{config, consumesCollector(), "cscSegmentSrc"},
170  m_primaryVerticesToken{config, consumesCollector(), "primaryVerticesSrc"},
171  m_trigResultsToken{config, consumesCollector(), "trigResultsSrc"},
172  m_trigEventToken{config, consumesCollector(), "trigEventSrc"},
173  m_trigName{config.getParameter<std::string>("trigName")},
174  m_isoTrigName{config.getParameter<std::string>("isoTrigName")},
175  m_cscGeometry{consumesCollector()},
176  m_muonSP{std::make_unique<MuonServiceProxy>(config.getParameter<edm::ParameterSet>("ServiceParameters"),
177  consumesCollector())},
178  m_transientTrackBuilder{consumesCollector(), "TransientTrackBuilder"} {
179  produces<nanoaod::FlatTable>();
180 }
nano_mu::EDTokenHandle< std::vector< reco::Vertex > > m_primaryVerticesToken
nano_mu::ESTokenHandle< TransientTrackBuilder, TransientTrackRecord > m_transientTrackBuilder
Transient Track Builder.
dictionary config
Read in AllInOne config in JSON format.
Definition: DMR_cfg.py:21
Definition: config.py:1
nano_mu::EDTokenHandle< CSCSegmentCollection > m_cscSegmentToken
nano_mu::ESTokenHandle< CSCGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_cscGeometry
std::string m_trigName
Name of the triggers used by muon filler for trigger matching.
nano_mu::EDTokenHandle< edm::TriggerResults > m_trigResultsToken
nano_mu::EDTokenHandle< reco::MuonCollection > m_muToken
Tokens.
MuBaseFlatTableProducer(const edm::ParameterSet &)
Constructor.
std::unique_ptr< MuonServiceProxy > m_muonSP
Muon service proxy.
nano_mu::EDTokenHandle< trigger::TriggerEvent > m_trigEventToken
nano_mu::EDTokenHandle< reco::TrackCollection > m_trackToken

Member Function Documentation

◆ calcDeltaR()

double MuCSCTnPFlatTableProducer::calcDeltaR ( double  eta1,
double  eta2,
double  phi1,
double  phi2 
)
private

Definition at line 1003 of file MuCSCTnPFlatTableProducer.cc.

References HLT_2023v12_cff::eta1, HLT_2023v12_cff::eta2, M_PI, and mathSSE::sqrt().

Referenced by fillTable(), and iso().

1003  {
1004  double deta = eta1 - eta2;
1005  if (phi1 < 0)
1006  phi1 += 2.0 * M_PI;
1007  if (phi2 < 0)
1008  phi2 += 2.0 * M_PI;
1009  double dphi = phi1 - phi2;
1010  if (dphi > M_PI)
1011  dphi -= 2. * M_PI;
1012  else if (dphi < -M_PI)
1013  dphi += 2. * M_PI;
1014  return std::sqrt(deta * deta + dphi * dphi);
1015 }
T sqrt(T t)
Definition: SSEVec.h:19
#define M_PI

◆ computePFIso()

float MuCSCTnPFlatTableProducer::computePFIso ( const reco::MuonPFIsolation pfIsolation,
float  muonPt 
)
private

Definition at line 651 of file MuCSCTnPFlatTableProducer.cc.

References SiStripPI::max, and HLTObjectMonitor_cfi::muonPt.

Referenced by muonTagSelection().

651  {
652  return (pfIsolation.sumChargedHadronPt +
653  std::max(0., pfIsolation.sumNeutralHadronEt + pfIsolation.sumPhotonEt - 0.5 * pfIsolation.sumPUPt)) /
654  muonPt;
655 }

◆ computeTrkIso()

float MuCSCTnPFlatTableProducer::computeTrkIso ( const reco::MuonIsolation isolation,
float  muonPt 
)
private

Definition at line 647 of file MuCSCTnPFlatTableProducer.cc.

References HLTObjectMonitor_cfi::muonPt.

Referenced by fillTable().

647  {
648  return isolation.sumPt / muonPt;
649 }

◆ fillDescriptions()

void MuCSCTnPFlatTableProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Fill descriptors.

Definition at line 182 of file MuCSCTnPFlatTableProducer.cc.

References edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, and AlCaHLTBitMon_QueryRunRegistry::string.

182  {
184 
185  desc.add<std::string>("name", "cscTnP");
186  desc.add<edm::InputTag>("muonSrc", edm::InputTag{"muons"});
187  desc.add<edm::InputTag>("trackSrc", edm::InputTag{"generalTracks"});
188  desc.add<edm::InputTag>("cscSegmentSrc", edm::InputTag{"cscSegments"});
189  desc.add<edm::InputTag>("primaryVerticesSrc", edm::InputTag{"offlinePrimaryVertices"});
190 
191  desc.add<edm::InputTag>("trigEventSrc", edm::InputTag{"hltTriggerSummaryAOD::HLT"});
192  desc.add<edm::InputTag>("trigResultsSrc", edm::InputTag{"TriggerResults::HLT"});
193 
194  desc.add<std::string>("trigName", "none");
195  desc.add<std::string>("isoTrigName", "HLT_IsoMu2*");
196 
197  desc.setAllowAnything();
198 
199  descriptions.addWithDefaultLabel(desc);
200 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)

◆ fillTable()

void MuCSCTnPFlatTableProducer::fillTable ( edm::Event ev)
finalprotectedvirtual

Fill tree branches for a given events.

Implements MuBaseFlatTableProducer.

Definition at line 234 of file MuCSCTnPFlatTableProducer.cc.

References _trackIso, _zMass, MuBaseFlatTableProducer::addColumn(), calcDeltaR(), CSCGeometry::chamber(), computeTrkIso(), nano_mu::EDTokenHandle< T >::conditionalGet(), HGC3DClusterGenMatchSelector_cfi::dR, PV3DBase< T, PVType, FrameType >::eta(), makeMEIFBenchmarkPlots::ev, TrajectoryStateOnSurface::freeState(), CSCLayer::geometry(), GetEdgeAndDistToGap(), TrajectoryStateOnSurface::globalPosition(), hasTrigger(), CSCGeometry::idToDet(), TrajectoryStateOnSurface::isValid(), nano_mu::ESTokenHandle< T, R, TR >::isValid(), nano_mu_digi_cff::layer, CSCChamber::layer(), hgcalTBTopologyTester_cfi::layers, m_cscGeometry, m_cscSegmentToken, m_isoTrigIndices, m_muonSP, m_muToken, MuBaseFlatTableProducer::m_name, m_nZCands, m_primaryVerticesToken, m_trackToken, m_transientTrackBuilder, m_trigEventToken, m_trigIndices, m_trigResultsToken, matchTTwithCSCSeg(), MEZ, eostools::move(), PDWG_BPHSkim_cff::muons, muonTagSelection(), CSCLayerGeometry::nearestWire(), PV3DBase< T, PVType, FrameType >::phi(), FreeTrajectoryState::position(), HLT_2023v12_cff::primaryVertices, propagatorAlong, propagatorOpposite, rpcPointValidation_cfi::recHit, ringCandidate(), mathSSE::sqrt(), CSCLayerGeometry::strip(), GeomDet::surface(), surfExtrapTrkSam(), TableParser::table, theBField, thisChamberCandidate(), HLT_2023v12_cff::track, trackProbeSelection(), pwdgSkimBPark_cfi::tracks, PDWG_DiPhoton_SD_cff::triggerEvent, triggerMatchMonitor_cfi::triggerObjects, triggerResults, AlignmentTracksFromVertexSelector_cfi::vertices, PV3DBase< T, PVType, FrameType >::x(), LocalError::xx(), PV3DBase< T, PVType, FrameType >::y(), LocalError::yy(), and zSelection().

234  {
235  unsigned int m_nZCands = 0; // the # of digis (size of all following vectors)
236 
237  // Muon track tag variables
238  std::vector<float> m_muonPt; // muon pT [GeV/c]
239  std::vector<float> m_muonPhi; // muon phi [rad]
240  std::vector<float> m_muonEta; // muon eta
241  std::vector<float> m_muonPtError; // muon pT [GeV/c] error
242  std::vector<float> m_muonPhiError; // muon phi [rad] error
243  std::vector<float> m_muonEtaError; // muon eta error
244  std::vector<int> m_muonCharge; // muon charge
245  std::vector<float> m_muonDXY; // muon dXY
246  std::vector<float> m_muonDZ; // muon dZ
247  std::vector<int> m_muonTrkHits; // muon track Hits
248  std::vector<float> m_muonChi2; // muon Chi2
249  std::vector<bool> m_muonTrigger; // muon trigger
250  std::vector<float> m_muonIso; // track Iso
251 
252  // Track probe variabes
253  std::vector<float> m_trackPt; // track pT [GeV/c]
254  std::vector<float> m_trackP; // track P [GeV/c]
255  std::vector<float> m_trackPhi; // track phi [rad]
256  std::vector<float> m_trackEta; // track eta
257  std::vector<float> m_trackPtError; // track pT [GeV/c] error
258  std::vector<float> m_trackPhiError; // track phi [rad] error
259  std::vector<float> m_trackEtaError; // track eta error
260  std::vector<int> m_trackCharge; // track charge
261  std::vector<float> m_trackDXY; // track dXY
262  std::vector<float> m_trackDZ; // track dZ
263  std::vector<int> m_trackTrkHits; // track Hits
264  std::vector<float> m_trackChi2; // track Chi2
265  std::vector<float> m_trackIso; // track Iso
266 
267  // Z and global variables
268  std::vector<float> m_zMass; // z mass
269  std::vector<float> m_dRTrackMuon; // dR between the track and muon
270  std::vector<float> m_numberOfPrimaryVertices; // Number of primary Vertices
271 
272  // CSC chamber information, station encoded in vector
273  std::vector<int> m_chamberEndcap; // chamber endcap
274  // station encoded in array index
275  std::array<std::vector<int>, 4> m_chamberRing; // chamber Ring
276  std::array<std::vector<int>, 4> m_chamberChamber; // chamber Chamber
277  std::array<std::vector<int>, 4> m_chamberLayer; // Segment layer information
278 
279  // Track intersection variables
280  std::array<std::vector<float>, 4> m_ttIntLocalX; // track trajector intersection local X on stations 1-4
281  std::array<std::vector<float>, 4> m_ttIntLocalY; // track trajector intersection local Y on stations 1-4
282  std::array<std::vector<float>, 4> m_ttIntLocalErrorX; // track trajector intersection local X on stations 1-4
283  std::array<std::vector<float>, 4> m_ttIntLocalErrorY; // track trajector intersection local Y on stations 1-4
284  std::array<std::vector<float>, 4> m_ttIntLocalW; // track trajector intersection local Wire on stations 1-4
285  std::array<std::vector<float>, 4> m_ttIntLocalS; // track trajector intersection local Strip on stations 1-4
286  std::array<std::vector<float>, 4> m_ttIntEta; // track trajector intersection Eta stations 1-4
287 
288  // Track intersection fiducial information
289 
290  std::array<std::vector<float>, 4>
291  m_ttDistToEdge; // track trajector intersection distance to edge, neg is with chamber, on stations 1-4
292  std::array<std::vector<float>, 4> m_ttDistToHVGap; // track trajector intersection distance to HV GAP on stations 1-4
293 
294  // Segment location variables
295  std::array<std::vector<float>, 4> m_segLocalX; // segment local X on stations 1-4
296  std::array<std::vector<float>, 4> m_segLocalY; // segment local Y on stations 1-4
297  std::array<std::vector<float>, 4> m_segLocalErrorX; // segment local X error on stations 1-4
298  std::array<std::vector<float>, 4> m_segLocalErrorY; // segment local Y error on stations 1-4
299 
300  // track intersection segment residuals variables
301  std::array<std::vector<float>, 4>
302  m_ttIntSegResidualLocalX; // track trajector intersection Segment residual local X on stations 1-4
303  std::array<std::vector<float>, 4>
304  m_ttIntSegResidualLocalY; // track trajector intersection Segment residuallocal Y on stations 1-4
305 
306  auto&& propagator_along = m_muonSP->propagator("SteppingHelixPropagatorAlong");
307  auto&& propagator_opposite = m_muonSP->propagator("SteppingHelixPropagatorOpposite");
308 
309  propagatorAlong = propagator_along;
310  propagatorOpposite = propagator_opposite;
311 
312  theBField = m_muonSP->magneticField();
313 
316  auto segments = m_cscSegmentToken.conditionalGet(ev);
318 
321 
322  if (muons.isValid() && tracks.isValid() && segments.isValid() && primaryVertices.isValid() &&
324  for (const auto& muon : (*muons)) {
325  if (!muonTagSelection(muon))
326  continue;
327 
328  bool muonTrigger = false;
329  if (triggerResults.isValid() && triggerEvent.isValid()) {
330  const auto& triggerObjects = triggerEvent->getObjects();
333  }
334 
335  for (const auto& track : (*tracks)) {
337  continue;
338  if (!zSelection(muon, track))
339  continue;
340  //std::cout << "Z candidate found: " << _zMass << " track eta: " << track.eta() << std::endl;
341  //std::cout.flush();
342  m_nZCands++;
343 
344  m_trackPt.push_back(track.pt());
345  m_trackP.push_back(track.p());
346  m_trackEta.push_back(track.eta());
347  m_trackPhi.push_back(track.phi());
348  m_trackPtError.push_back(track.pt());
349  m_trackEtaError.push_back(track.eta());
350  m_trackPhiError.push_back(track.phi());
351  m_trackCharge.push_back(track.charge());
352  m_trackDXY.push_back(track.dxy());
353  m_trackDZ.push_back(track.dz());
354  m_trackTrkHits.push_back(track.hitPattern().numberOfValidTrackerHits());
355  m_trackChi2.push_back(track.normalizedChi2());
356  m_trackIso.push_back(_trackIso);
357 
358  m_muonPt.push_back(muon.track()->pt());
359  m_muonPhi.push_back(muon.track()->phi());
360  m_muonEta.push_back(muon.track()->eta());
361  m_muonPtError.push_back(muon.track()->ptError());
362  m_muonPhiError.push_back(muon.track()->phiError());
363  m_muonEtaError.push_back(muon.track()->etaError());
364  m_muonCharge.push_back(muon.charge());
365  m_muonDXY.push_back(muon.track()->dxy());
366  m_muonDZ.push_back(muon.track()->dz());
367  m_muonTrkHits.push_back(muon.track()->hitPattern().numberOfValidTrackerHits());
368  m_muonChi2.push_back(muon.track()->normalizedChi2());
369  m_muonIso.push_back(computeTrkIso(muon.isolationR03(), muon.pt()));
370  m_muonTrigger.push_back(muonTrigger);
371 
372  m_zMass.push_back(_zMass);
373  double_t dR = calcDeltaR(track.eta(), muon.eta(), track.phi(), muon.phi());
374  //double_t dR = 1.0;
375  m_dRTrackMuon.push_back(dR);
376  const reco::VertexCollection& vertices = *primaryVertices.product();
377  m_numberOfPrimaryVertices.push_back(vertices.size());
378 
379  bool ec = (track.eta() > 0);
380  UChar_t endcapCSC = ec ? 0 : 1;
381  m_chamberEndcap.push_back(endcapCSC * 1);
382 
383  Int_t iiStationFail = 0;
384  for (int iiStationZ = 0; iiStationZ < 6; iiStationZ++) {
385  UChar_t stationCSC = iiStationZ > 2 ? iiStationZ - 2 : 0;
386  UChar_t ringCSC = 0;
387  TrajectoryStateOnSurface tsos = surfExtrapTrkSam(track, ec ? MEZ[iiStationZ] : -MEZ[iiStationZ]);
388 
389  if (tsos.isValid()) {
390  Float_t trkEta = tsos.globalPosition().eta(), trkPhi = tsos.globalPosition().phi();
391  ringCSC = ringCandidate(iiStationZ, stationCSC + 1, trkEta, trkPhi);
392 
393  if (ringCSC) {
394  UChar_t chamberCSC = thisChamberCandidate(stationCSC + 1, ringCSC, track.phi()) - 1;
395  CSCDetId Layer3id = CSCDetId(endcapCSC + 1, stationCSC + 1, ringCSC, chamberCSC + 1, 3);
396  CSCDetId Layer0Id = CSCDetId(endcapCSC + 1,
397  stationCSC + 1,
398  ringCSC,
399  chamberCSC + 1,
400  0); //layer 0 is the mid point of the chamber. It is not a real layer.
401  // !!!!! need to fix Layer0Id problem with ME1/1 here
402 
403  const BoundPlane& Layer3Surface = m_cscGeometry->idToDet(Layer3id)->surface();
404 
405  tsos = surfExtrapTrkSam(track, Layer3Surface.position().z());
406 
407  if (tsos.isValid()) {
408  // Fill track intersection denominator information
409  LocalPoint localTTIntPoint = Layer3Surface.toLocal(tsos.freeState()->position());
410  const CSCLayerGeometry* layerGeoma = m_cscGeometry->chamber(Layer0Id)->layer(3)->geometry();
411  const CSCLayerGeometry* layerGeomb = m_cscGeometry->chamber(Layer0Id)->layer(4)->geometry();
412 
413  m_chamberRing[stationCSC].push_back(ringCSC);
414  m_chamberChamber[stationCSC].push_back(chamberCSC);
415  m_ttIntLocalX[stationCSC].push_back(localTTIntPoint.x());
416  m_ttIntLocalY[stationCSC].push_back(localTTIntPoint.y());
417  m_ttIntLocalW[stationCSC].push_back(
418  (layerGeoma->nearestWire(localTTIntPoint) + layerGeomb->nearestWire(localTTIntPoint)) / 2.0);
419  m_ttIntLocalS[stationCSC].push_back(
420  (layerGeoma->strip(localTTIntPoint) + layerGeomb->strip(localTTIntPoint)) / 2.0);
421  m_ttIntEta[stationCSC].push_back(trkEta);
422 
423  // Errors are those of the track intersection, chosing the plane and exact geomentry is performed in the function
424  Float_t CSCProjEdgeDist = -9999.0;
425  Float_t ttIntLocalErrorX = -9999.0;
426  Float_t CSCDyProjHVGap = 9999.0;
427  Float_t ttIntLocalErrorY = -9999.0;
428  for (Int_t ly = 1; ly < 7; ly++) {
429  CSCDetId Layerid = CSCDetId(endcapCSC + 1, stationCSC + 1, ringCSC, chamberCSC + 1, ly);
430  std::vector<Float_t> EdgeAndDistToGap(GetEdgeAndDistToGap(
431  track, Layerid)); //values: 1-edge;2-err of edge;3-disttogap;4-err of dist to gap
432  if (EdgeAndDistToGap[0] > CSCProjEdgeDist) {
433  CSCProjEdgeDist = EdgeAndDistToGap[0];
434  ttIntLocalErrorX = EdgeAndDistToGap[1];
435  }
436  if (EdgeAndDistToGap[2] < CSCDyProjHVGap) {
437  CSCDyProjHVGap = EdgeAndDistToGap[2];
438  ttIntLocalErrorY = EdgeAndDistToGap[3];
439  }
440  }
441  m_ttDistToEdge[stationCSC].push_back(CSCProjEdgeDist);
442  m_ttDistToHVGap[stationCSC].push_back(CSCDyProjHVGap);
443  m_ttIntLocalErrorX[stationCSC].push_back(ttIntLocalErrorX);
444  m_ttIntLocalErrorY[stationCSC].push_back(ttIntLocalErrorY);
445 
446  // now we have a local point for comparison to segments
448  TrajectoryStateOnSurface* TrajToSeg = matchTTwithCSCSeg(track, segments, cscSegOut, Layer3id);
449 
450  if (TrajToSeg == nullptr) {
451  // fill Null Num
452  m_segLocalX[stationCSC].push_back(-9999.0);
453  m_segLocalY[stationCSC].push_back(-9999.0);
454  m_segLocalErrorX[stationCSC].push_back(0.0);
455  m_segLocalErrorY[stationCSC].push_back(0.0);
456 
457  m_ttIntSegResidualLocalX[stationCSC].push_back(-9990.0);
458  m_ttIntSegResidualLocalY[stationCSC].push_back(-9990.0);
459 
460  m_chamberLayer[stationCSC].push_back(-9);
461 
462  continue;
463  }
464 
465  LocalPoint localSegmentPoint = (*cscSegOut).localPosition();
466  LocalError localSegErr = (*cscSegOut).localPositionError();
467 
468  m_segLocalX[stationCSC].push_back(localSegmentPoint.x());
469  m_segLocalY[stationCSC].push_back(localSegmentPoint.y());
470  m_segLocalErrorX[stationCSC].push_back(sqrt(localSegErr.xx()));
471  m_segLocalErrorY[stationCSC].push_back(sqrt(localSegErr.yy()));
472 
473  m_ttIntSegResidualLocalX[stationCSC].push_back(localTTIntPoint.x() - localSegmentPoint.x());
474  m_ttIntSegResidualLocalY[stationCSC].push_back(localTTIntPoint.y() - localSegmentPoint.y());
475  /* Extract layers for hits */
476  int layers = 0;
477  for (std::vector<CSCRecHit2D>::const_iterator itRH = cscSegOut->specificRecHits().begin();
478  itRH != cscSegOut->specificRecHits().end();
479  ++itRH) {
480  const CSCRecHit2D* recHit = &(*itRH);
481  int layer = recHit->cscDetId().layer();
482  layers |= 1 << (layer - 1);
483  }
484  m_chamberLayer[stationCSC].push_back(layers);
485 
486  } // end preliminary tsos is valid
487 
488  } // end found ring CSC
489 
490  } // end refined tsos is valid
491 
492  if ((!tsos.isValid()) || (ringCSC == 0)) {
493  // only fill Null denominator once for station 1, iiStation Z = 0,1,2
494  if (iiStationZ <= 2)
495  iiStationFail++;
496  if (iiStationZ > 2 || iiStationFail == 3) {
497  // fill Null Den Num
498  m_chamberRing[stationCSC].push_back(-9);
499  m_chamberChamber[stationCSC].push_back(-9);
500  m_ttIntLocalX[stationCSC].push_back(-9999.0);
501  m_ttIntLocalY[stationCSC].push_back(-9999.0);
502  m_ttIntLocalErrorX[stationCSC].push_back(0.0);
503  m_ttIntLocalErrorY[stationCSC].push_back(0.0);
504  m_ttIntLocalW[stationCSC].push_back(-9999.0);
505  m_ttIntLocalS[stationCSC].push_back(-9999.0);
506  m_ttIntEta[stationCSC].push_back(-9999.0);
507 
508  m_ttDistToEdge[stationCSC].push_back(-9999.0);
509  m_ttDistToHVGap[stationCSC].push_back(-9999.9);
510 
511  m_segLocalX[stationCSC].push_back(-9999.0);
512  m_segLocalY[stationCSC].push_back(-9999.0);
513  m_segLocalErrorX[stationCSC].push_back(0.0);
514  m_segLocalErrorY[stationCSC].push_back(0.0);
515 
516  m_ttIntSegResidualLocalX[stationCSC].push_back(-9990.0);
517  m_ttIntSegResidualLocalY[stationCSC].push_back(-9990.0);
518 
519  m_chamberLayer[stationCSC].push_back(-9);
520  }
521  }
522 
523  } // end loop over CSC Z planes
524  } // endl loop over tracks
525  } // end loop over muons
526 
527  } // End if good physics objects
528 
529  // if (m_nZCands>0) {
530  auto table = std::make_unique<nanoaod::FlatTable>(m_nZCands, m_name, false, false);
531 
532  table->setDoc("CSC Tag & Probe segment efficiency information");
533 
534  addColumn(table, "muonPt", m_muonPt, "muon pt [GeV/c]");
535  addColumn(table, "muonPhi", m_muonPhi, "muon phi [rad]");
536  addColumn(table, "muonEta", m_muonEta, "muon eta");
537  addColumn(table, "muonPtError", m_muonPtError, "muon pt error [GeV/c]");
538  addColumn(table, "muonPhiError", m_muonPhiError, "muon phi error [rad]");
539  addColumn(table, "muonEtaError", m_muonEtaError, "muon eta error");
540  addColumn(table, "muonCharge", m_muonCharge, "muon charge");
541  addColumn(table, "muonDXY", m_muonDXY, "muon dXY [cm]");
542  addColumn(table, "muonDZ", m_muonDZ, "muon dZ [cm]");
543  addColumn(table, "muonTrkHits", m_muonTrkHits, "muon track hits");
544  addColumn(table, "muonChi2", m_muonChi2, "muon chi2");
545  addColumn(table, "muonIso", m_trackIso, "muon relative iso");
546  addColumn(table, "muonTrigger", m_muonTrigger, "muon has trigger bool");
547 
548  addColumn(table, "trackPt", m_trackPt, "track pt [GeV/c]");
549  addColumn(table, "trackP", m_trackPt, "track p [GeV/c]");
550  addColumn(table, "trackPhi", m_trackPhi, "track phi [rad]");
551  addColumn(table, "trackEta", m_trackEta, "track eta");
552  addColumn(table, "trackPtError", m_trackPtError, "track pt error [GeV/c]");
553  addColumn(table, "trackPhiError", m_trackPhiError, "track phi error [rad]");
554  addColumn(table, "trackEtaError", m_trackEtaError, "track eta error");
555  addColumn(table, "trackCharge", m_trackCharge, "track charge");
556  addColumn(table, "trackDXY", m_trackDXY, "track dXY [cm]");
557  addColumn(table, "trackDZ", m_trackDZ, "track dZ [cm]");
558  addColumn(table, "trackTrkHits", m_trackTrkHits, "track track hits");
559  addColumn(table, "trackChi2", m_trackChi2, "track chi2");
560  addColumn(table, "trackIso", m_trackIso, "track relative iso");
561 
562  addColumn(table, "zMass", m_zMass, "Z mass [GeV/c^2]");
563  addColumn(table, "dRTrackMuon", m_dRTrackMuon, "dR between track and muon");
564  addColumn(table, "numberOfPrimaryVertidies", m_numberOfPrimaryVertices, "Number of PVs");
565 
566  addColumn(table, "chamberEndcap", m_chamberEndcap, "");
567  addColumn(table, "chamberRing1", m_chamberRing[0], "");
568  addColumn(table, "chamberRing2", m_chamberRing[1], "");
569  addColumn(table, "chamberRing3", m_chamberRing[2], "");
570  addColumn(table, "chamberRing4", m_chamberRing[3], "");
571  addColumn(table, "chamberChamber1", m_chamberChamber[0], "");
572  addColumn(table, "chamberChamber2", m_chamberChamber[1], "");
573  addColumn(table, "chamberChamber3", m_chamberChamber[2], "");
574  addColumn(table, "chamberChamber4", m_chamberChamber[3], "");
575  addColumn(table, "chamberLayer1", m_chamberLayer[0], "");
576  addColumn(table, "chamberLayer2", m_chamberLayer[1], "");
577  addColumn(table, "chamberLayer3", m_chamberLayer[2], "");
578  addColumn(table, "chamberLayer4", m_chamberLayer[3], "");
579 
580  addColumn(table, "ttIntLocalX1", m_ttIntLocalX[0], "");
581  addColumn(table, "ttIntLocalX2", m_ttIntLocalX[1], "");
582  addColumn(table, "ttIntLocalX3", m_ttIntLocalX[2], "");
583  addColumn(table, "ttIntLocalX4", m_ttIntLocalX[3], "");
584  addColumn(table, "ttIntLocalY1", m_ttIntLocalY[0], "");
585  addColumn(table, "ttIntLocalY2", m_ttIntLocalY[1], "");
586  addColumn(table, "ttIntLocalY3", m_ttIntLocalY[2], "");
587  addColumn(table, "ttIntLocalY4", m_ttIntLocalY[3], "");
588  addColumn(table, "ttIntLocalErrorX1", m_ttIntLocalErrorX[0], "");
589  addColumn(table, "ttIntLocalErrorX2", m_ttIntLocalErrorX[1], "");
590  addColumn(table, "ttIntLocalErrorX3", m_ttIntLocalErrorX[2], "");
591  addColumn(table, "ttIntLocalErrorX4", m_ttIntLocalErrorX[3], "");
592  addColumn(table, "ttIntLocalErrorY1", m_ttIntLocalErrorY[0], "");
593  addColumn(table, "ttIntLocalErrorY2", m_ttIntLocalErrorY[1], "");
594  addColumn(table, "ttIntLocalErrorY3", m_ttIntLocalErrorY[2], "");
595  addColumn(table, "ttIntLocalErrorY4", m_ttIntLocalErrorY[3], "");
596  addColumn(table, "ttIntLocalW1", m_ttIntLocalW[0], "");
597  addColumn(table, "ttIntLocalW2", m_ttIntLocalW[1], "");
598  addColumn(table, "ttIntLocalW3", m_ttIntLocalW[2], "");
599  addColumn(table, "ttIntLocalW4", m_ttIntLocalW[3], "");
600  addColumn(table, "ttIntLocalS1", m_ttIntLocalS[0], "");
601  addColumn(table, "ttIntLocalS2", m_ttIntLocalS[1], "");
602  addColumn(table, "ttIntLocalS3", m_ttIntLocalS[2], "");
603  addColumn(table, "ttIntLocalS4", m_ttIntLocalS[3], "");
604  addColumn(table, "ttIntEta1", m_ttIntEta[0], "");
605  addColumn(table, "ttIntEta2", m_ttIntEta[1], "");
606  addColumn(table, "ttIntEta3", m_ttIntEta[2], "");
607  addColumn(table, "ttIntEta4", m_ttIntEta[3], "");
608 
609  addColumn(table, "ttDistToEdge1", m_ttDistToEdge[0], "");
610  addColumn(table, "ttDistToEdge2", m_ttDistToEdge[1], "");
611  addColumn(table, "ttDistToEdge3", m_ttDistToEdge[2], "");
612  addColumn(table, "ttDistToEdge4", m_ttDistToEdge[3], "");
613  addColumn(table, "ttDistToHVGap1", m_ttDistToHVGap[0], "");
614  addColumn(table, "ttDistToHVGap2", m_ttDistToHVGap[1], "");
615  addColumn(table, "ttDistToHVGap3", m_ttDistToHVGap[2], "");
616  addColumn(table, "ttDistToHVGap4", m_ttDistToHVGap[3], "");
617 
618  addColumn(table, "segLocalX1", m_segLocalX[0], "");
619  addColumn(table, "segLocalX2", m_segLocalX[1], "");
620  addColumn(table, "segLocalX3", m_segLocalX[2], "");
621  addColumn(table, "segLocalX4", m_segLocalX[3], "");
622  addColumn(table, "segLocalY1", m_segLocalY[0], "");
623  addColumn(table, "segLocalY2", m_segLocalY[1], "");
624  addColumn(table, "segLocalY3", m_segLocalY[2], "");
625  addColumn(table, "segLocalY4", m_segLocalY[3], "");
626  addColumn(table, "segLocalErrorX1", m_segLocalErrorX[0], "");
627  addColumn(table, "segLocalErrorX2", m_segLocalErrorX[1], "");
628  addColumn(table, "segLocalErrorX3", m_segLocalErrorX[2], "");
629  addColumn(table, "segLocalErrorX4", m_segLocalErrorX[3], "");
630  addColumn(table, "segLocalErrorY1", m_segLocalErrorY[0], "");
631  addColumn(table, "segLocalErrorY2", m_segLocalErrorY[1], "");
632  addColumn(table, "segLocalErrorY3", m_segLocalErrorY[2], "");
633  addColumn(table, "segLocalErrorY4", m_segLocalErrorY[3], "");
634 
635  addColumn(table, "ttIntSegResidualLocalX1", m_ttIntSegResidualLocalX[0], "");
636  addColumn(table, "ttIntSegResidualLocalX2", m_ttIntSegResidualLocalX[1], "");
637  addColumn(table, "ttIntSegResidualLocalX3", m_ttIntSegResidualLocalX[2], "");
638  addColumn(table, "ttIntSegResidualLocalX4", m_ttIntSegResidualLocalX[3], "");
639  addColumn(table, "ttIntSegResidualLocalY1", m_ttIntSegResidualLocalY[0], "");
640  addColumn(table, "ttIntSegResidualLocalY2", m_ttIntSegResidualLocalY[1], "");
641  addColumn(table, "ttIntSegResidualLocalY3", m_ttIntSegResidualLocalY[2], "");
642  addColumn(table, "ttIntSegResidualLocalY4", m_ttIntSegResidualLocalY[3], "");
643 
644  ev.put(std::move(table));
645 }
nano_mu::EDTokenHandle< std::vector< reco::Vertex > > m_primaryVerticesToken
edm::ESHandle< Propagator > propagatorOpposite
nano_mu::ESTokenHandle< TransientTrackBuilder, TransientTrackRecord > m_transientTrackBuilder
Transient Track Builder.
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to the given id.
Definition: CSCChamber.cc:30
TrajectoryStateOnSurface surfExtrapTrkSam(const reco::Track &, double)
edm::ESHandle< MagneticField > theBField
static constexpr Float_t MEZ[6]
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:100
double calcDeltaR(double, double, double, double)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T eta() const
Definition: PV3DBase.h:73
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
auto conditionalGet(const edm::Event &ev) const
Definition: MuNtupleUtils.h:49
UChar_t ringCandidate(Int_t iiStation, Int_t station, Float_t feta, Float_t phi)
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:44
GlobalPoint position() const
void addColumn(std::unique_ptr< nanoaod::FlatTable > &table, const std::string name, const std::vector< T > &vec, const std::string descr)
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:43
float yy() const
Definition: LocalError.h:24
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
UChar_t thisChamberCandidate(UChar_t station, UChar_t ring, Float_t phi)
float strip(const LocalPoint &lp) const
GlobalPoint globalPosition() const
bool muonTagSelection(const reco::Muon &)
T sqrt(T t)
Definition: SSEVec.h:19
nano_mu::EDTokenHandle< CSCSegmentCollection > m_cscSegmentToken
nano_mu::ESTokenHandle< CSCGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_cscGeometry
nano_mu::EDTokenHandle< edm::TriggerResults > m_trigResultsToken
static std::string const triggerResults
Definition: EdmProvDump.cc:47
int nearestWire(const LocalPoint &lp) const
nano_mu::EDTokenHandle< reco::MuonCollection > m_muToken
Tokens.
std::vector< Float_t > GetEdgeAndDistToGap(const reco::Track &, CSCDetId &)
TrajectoryStateOnSurface * matchTTwithCSCSeg(const reco::Track &, edm::Handle< CSCSegmentCollection >, CSCSegmentCollection::const_iterator &, CSCDetId &)
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
bool zSelection(const reco::Muon &, const reco::Track &)
bool trackProbeSelection(const reco::Track &track, edm::Handle< std::vector< reco::Track >>)
Selection functions.
bool isValid()
Check validity.
Definition: MuNtupleUtils.h:76
float computeTrkIso(const reco::MuonIsolation &, float)
std::string m_name
The label name of the FlatTableProducer.
std::unique_ptr< MuonServiceProxy > m_muonSP
Muon service proxy.
nano_mu::EDTokenHandle< trigger::TriggerEvent > m_trigEventToken
edm::ESHandle< Propagator > propagatorAlong
FreeTrajectoryState const * freeState(bool withErrors=true) const
std::vector< int > m_trigIndices
Indices of the triggers used by muon filler for trigger matching.
bool hasTrigger(std::vector< int > &, const trigger::TriggerObjectCollection &, edm::Handle< trigger::TriggerEvent > &, const reco::Muon &)
float xx() const
Definition: LocalError.h:22
def move(src, dest)
Definition: eostools.py:511
nano_mu::EDTokenHandle< reco::TrackCollection > m_trackToken
const GeomDet * idToDet(DetId) const override
Definition: CSCGeometry.cc:91

◆ freeTrajStateMuon()

FreeTrajectoryState MuCSCTnPFlatTableProducer::freeTrajStateMuon ( const reco::Track track)
private

Definition at line 752 of file MuCSCTnPFlatTableProducer.cc.

References MillePedeFileConverter_cfg::e, theBField, and HLT_2023v12_cff::track.

Referenced by surfExtrapTrkSam().

752  {
753  //no track extras in nanoaod so directly use vx and p
754  GlobalPoint innerPoint(track.vx(), track.vy(), track.vz());
755  GlobalVector innerVec(track.px(), track.py(), track.pz());
756 
757  GlobalTrajectoryParameters gtPars(innerPoint, innerVec, track.charge(), &*theBField);
758 
760  cov *= 1e-20;
761 
762  CartesianTrajectoryError tCov(cov);
763 
764  return (cov.kRows == 6 ? FreeTrajectoryState(gtPars, tCov) : FreeTrajectoryState(gtPars));
765 }
edm::ESHandle< MagneticField > theBField
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66

◆ GetEdgeAndDistToGap()

std::vector< Float_t > MuCSCTnPFlatTableProducer::GetEdgeAndDistToGap ( const reco::Track track,
CSCDetId detid 
)
private

Definition at line 904 of file MuCSCTnPFlatTableProducer.cc.

References funct::abs(), TrajectoryStateOnSurface::freeState(), CSCLayer::geometry(), CSCGeometry::idToDet(), TrajectoryStateOnSurface::isValid(), CSCGeometry::layer(), CSCWireTopology::lengthOfPlane(), TrajectoryStateOnSurface::localError(), m_cscGeometry, CSCWireTopology::narrowWidthOfPlane(), GloballyPositioned< T >::position(), FreeTrajectoryState::position(), LocalTrajectoryError::positionError(), mps_fire::result, CSCDetId::ring(), mathSSE::sqrt(), CSCDetId::station(), GeomDet::surface(), surfExtrapTrkSam(), GloballyPositioned< T >::toLocal(), HLT_2023v12_cff::track, CSCWireTopology::wideWidthOfPlane(), CSCWireTopology::wireAngle(), CSCLayerGeometry::wireTopology(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), YDistToHVDeadZone(), CSCWireTopology::yOfWire(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by fillTable().

904  {
905  std::vector<Float_t> result(4, 9999.);
906  result[3] = -9999;
907  const GeomDet* gdet = m_cscGeometry->idToDet(detid);
909  if (!tsos.isValid())
910  return result;
911  LocalPoint localTTPos = gdet->surface().toLocal(tsos.freeState()->position());
912  const CSCWireTopology* wireTopology = m_cscGeometry->layer(detid)->geometry()->wireTopology();
913  Float_t wideWidth = wireTopology->wideWidthOfPlane();
914  Float_t narrowWidth = wireTopology->narrowWidthOfPlane();
915  Float_t length = wireTopology->lengthOfPlane();
916  // If slanted, there is no y offset between local origin and symmetry center of wire plane
917  Float_t yOfFirstWire = std::abs(wireTopology->wireAngle()) > 1.E-06 ? -0.5 * length : wireTopology->yOfWire(1);
918  // y offset between local origin and symmetry center of wire plane
919  Float_t yCOWPOffset = yOfFirstWire + 0.5 * length;
920  // tangent of the incline angle from inside the trapezoid
921  Float_t tangent = (wideWidth - narrowWidth) / (2. * length);
922  // y position wrt bottom of trapezoid
923  Float_t yPrime = localTTPos.y() + std::abs(yOfFirstWire);
924  // half trapezoid width at y' is 0.5 * narrowWidth + x side of triangle with the above tangent and side y'
925  Float_t halfWidthAtYPrime = 0.5 * narrowWidth + yPrime * tangent;
926  // x offset between local origin and symmetry center of wire plane is zero
927  // x offset of ME11s is also zero. x center of wire groups is not at zero, because it is not parallel to x. The wire groups of ME11s have a complex geometry, see the code in m_debug.
928  Float_t edgex = std::abs(localTTPos.x()) - halfWidthAtYPrime;
929  Float_t edgey = std::abs(localTTPos.y() - yCOWPOffset) - 0.5 * length;
930  LocalError localTTErr = tsos.localError().positionError();
931  if (edgex > edgey) {
932  result[0] = edgex;
933  result[1] = sqrt(localTTErr.xx());
934  //result[1] = sqrt(tsos.cartesianError().position().cxx());
935  } else {
936  result[0] = edgey;
937  result[1] = sqrt(localTTErr.yy());
938  //result[1] = sqrt(tsos.cartesianError().position().cyy());
939  }
940  result[2] = YDistToHVDeadZone(localTTPos.y(), detid.station() * 10 + detid.ring());
941  result[3] = sqrt(localTTErr.yy());
942  return result; //return values: 1-edge;2-err of edge;3-disttogap;4-err of dist to gap
943 }
TrajectoryStateOnSurface surfExtrapTrkSam(const reco::Track &, double)
double wideWidthOfPlane() const
const LocalTrajectoryError & localError() const
const CSCWireTopology * wireTopology() const
T z() const
Definition: PV3DBase.h:61
LocalError positionError() const
LocalPoint toLocal(const GlobalPoint &gp) const
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:44
GlobalPoint position() const
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
float wireAngle() const override
T sqrt(T t)
Definition: SSEVec.h:19
nano_mu::ESTokenHandle< CSCGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_cscGeometry
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Float_t YDistToHVDeadZone(Float_t, Int_t)
float yOfWire(float wire, float x=0.) const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
const PositionType & position() const
int station() const
Definition: CSCDetId.h:79
double lengthOfPlane() const
double narrowWidthOfPlane() const
FreeTrajectoryState const * freeState(bool withErrors=true) const
int ring() const
Definition: CSCDetId.h:68
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to given DetId.
Definition: CSCGeometry.cc:105
const GeomDet * idToDet(DetId) const override
Definition: CSCGeometry.cc:91

◆ getFromES() [1/2]

void MuCSCTnPFlatTableProducer::getFromES ( const edm::Run run,
const edm::EventSetup environment 
)
finalprotectedvirtual

Get info from the ES by run.

Reimplemented from MuBaseFlatTableProducer.

Definition at line 202 of file MuCSCTnPFlatTableProducer.cc.

References reco_calib_source_client_cfg::environment, nano_mu::ESTokenHandle< T, R, TR >::getFromES(), HLTConfigProvider::init(), m_cscGeometry, m_hltConfig, m_isoTrigIndices, m_isoTrigName, m_trigIndices, m_trigName, hltMonBTagIPClient_cfi::pathName, writedatasetfile::run, HLTConfigProvider::size(), simpleEdmComparison::tName, and HLTConfigProvider::triggerName().

202  {
204 
205  bool changed{true};
206  m_hltConfig.init(run, environment, "HLT", changed);
207 
208  const bool enableWildcard{true};
209 
210  TString tName = TString(m_trigName);
211  TRegexp tNamePattern = TRegexp(tName, enableWildcard);
212 
213  for (unsigned iPath = 0; iPath < m_hltConfig.size(); ++iPath) {
214  TString pathName = TString(m_hltConfig.triggerName(iPath));
215  if (pathName.Contains(tNamePattern))
216  m_trigIndices.push_back(static_cast<int>(iPath));
217  }
218 
219  tName = TString(m_isoTrigName);
220  tNamePattern = TRegexp(tName, enableWildcard);
221 
222  for (unsigned iPath = 0; iPath < m_hltConfig.size(); ++iPath) {
223  TString pathName = TString(m_hltConfig.triggerName(iPath));
224  if (pathName.Contains(tNamePattern))
225  m_isoTrigIndices.push_back(static_cast<int>(iPath));
226  }
227 }
const std::string & triggerName(unsigned int triggerIndex) const
unsigned int size() const
number of trigger paths in trigger table
nano_mu::ESTokenHandle< CSCGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_cscGeometry
std::string m_trigName
Name of the triggers used by muon filler for trigger matching.
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
void getFromES(const edm::EventSetup &environment)
Get Handle from ES.
Definition: MuNtupleUtils.h:73
std::vector< int > m_trigIndices
Indices of the triggers used by muon filler for trigger matching.
HLTConfigProvider m_hltConfig
HLT config provider.

◆ getFromES() [2/2]

void MuCSCTnPFlatTableProducer::getFromES ( const edm::EventSetup environment)
finalprotectedvirtual

Get info from the ES for a given event.

Reimplemented from MuBaseFlatTableProducer.

Definition at line 229 of file MuCSCTnPFlatTableProducer.cc.

References reco_calib_source_client_cfg::environment, nano_mu::ESTokenHandle< T, R, TR >::getFromES(), m_muonSP, and m_transientTrackBuilder.

229  {
231  m_muonSP->update(environment);
232 }
nano_mu::ESTokenHandle< TransientTrackBuilder, TransientTrackRecord > m_transientTrackBuilder
Transient Track Builder.
void getFromES(const edm::EventSetup &environment)
Get Handle from ES.
Definition: MuNtupleUtils.h:73
std::unique_ptr< MuonServiceProxy > m_muonSP
Muon service proxy.

◆ hasTrigger()

bool MuCSCTnPFlatTableProducer::hasTrigger ( std::vector< int > &  trigIndices,
const trigger::TriggerObjectCollection trigObjs,
edm::Handle< trigger::TriggerEvent > &  trigEvent,
const reco::Muon muon 
)
private

Definition at line 657 of file MuCSCTnPFlatTableProducer.cc.

References PbPb_ZMuSkimMuonDPG_cff::deltaR, HGC3DClusterGenMatchSelector_cfi::dR, METSignificanceParams_cfi::dRMatch, spr::find(), relativeConstraints::keys, m_hltConfig, HLTConfigProvider::moduleLabels(), B2GTnPMonitor_cfi::trigEvent, and TriggerAnalyzer::trigObjs.

Referenced by fillTable().

660  {
661  float dRMatch = 999.;
662  for (int trigIdx : trigIndices) {
663  const std::vector<std::string> trigModuleLabels = m_hltConfig.moduleLabels(trigIdx);
664 
665  const unsigned trigModuleIndex =
666  std::find(trigModuleLabels.begin(), trigModuleLabels.end(), "hltBoolEnd") - trigModuleLabels.begin() - 1;
667  const unsigned hltFilterIndex = trigEvent->filterIndex(edm::InputTag(trigModuleLabels[trigModuleIndex], "", "HLT"));
668  if (hltFilterIndex < trigEvent->sizeFilters()) {
669  const trigger::Keys keys = trigEvent->filterKeys(hltFilterIndex);
670  const trigger::Vids vids = trigEvent->filterIds(hltFilterIndex);
671  const unsigned nTriggers = vids.size();
672 
673  for (unsigned iTrig = 0; iTrig < nTriggers; ++iTrig) {
674  trigger::TriggerObject trigObj = trigObjs[keys[iTrig]];
675  float dR = deltaR(muon, trigObj);
676  if (dR < dRMatch)
677  dRMatch = dR;
678  }
679  }
680  }
681 
682  return dRMatch < 0.1; //CB should get it programmable
683 }
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:21
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
std::vector< size_type > Keys
std::vector< int > Vids
HLTConfigProvider m_hltConfig
HLT config provider.

◆ iso()

double MuCSCTnPFlatTableProducer::iso ( const reco::Track )
private

Definition at line 993 of file MuCSCTnPFlatTableProducer.cc.

References calcDeltaR(), HGC3DClusterGenMatchSelector_cfi::dR, objects.IsoTrackAnalyzer::isoSum, HLT_2023v12_cff::track, and pwdgSkimBPark_cfi::tracks.

Referenced by trackProbeSelection().

993  {
994  double isoSum = 0.0;
995  for (const auto& track2 : (*tracks)) {
996  double dR = calcDeltaR(track.eta(), track2.eta(), track.phi(), track2.phi());
997  if (track2.pt() > 1.0 && dR > 0.001 && dR < 0.3)
998  isoSum += track2.pt();
999  }
1000  return isoSum / track.pt();
1001 }
double calcDeltaR(double, double, double, double)
isoSum
===> compute the isolation and find the most isolated track

◆ matchTTwithCSCSeg()

TrajectoryStateOnSurface * MuCSCTnPFlatTableProducer::matchTTwithCSCSeg ( const reco::Track track,
edm::Handle< CSCSegmentCollection cscSegments,
CSCSegmentCollection::const_iterator cscSegOut,
CSCDetId idCSC 
)
private

Definition at line 860 of file MuCSCTnPFlatTableProducer.cc.

References funct::abs(), CSCDetId::chamber(), CSCGeometry::chamber(), dtChamberEfficiency_cfi::cscSegments, CSCDetId::endcap(), m_cscGeometry, CSCDetId::ring(), relativeConstraints::ring, CSCDetId::station(), surfExtrapTrkSam(), GeomDet::toGlobal(), HLT_2023v12_cff::track, TrajectoryDistToSeg(), and z.

Referenced by fillTable().

863  {
864  TrajectoryStateOnSurface* TrajSuf = nullptr;
865  Float_t deltaCSCR = 9999.;
866  for (CSCSegmentCollection::const_iterator segIt = cscSegments->begin(); segIt != cscSegments->end(); segIt++) {
867  CSCDetId id = (CSCDetId)(*segIt).cscDetId();
868 
869  if (idCSC.endcap() != id.endcap())
870  continue;
871  if (idCSC.station() != id.station())
872  continue;
873  if (idCSC.chamber() != id.chamber())
874  continue;
875 
876  Bool_t ed1 =
877  (idCSC.station() == 1) && ((idCSC.ring() == 1 || idCSC.ring() == 4) && (id.ring() == 1 || id.ring() == 4));
878  Bool_t ed2 =
879  (idCSC.station() == 1) && ((idCSC.ring() == 2 && id.ring() == 2) || (idCSC.ring() == 3 && id.ring() == 3));
880  Bool_t ed3 = (idCSC.station() != 1) && (idCSC.ring() == id.ring());
881  Bool_t TMCSCMatch = (ed1 || ed2 || ed3);
882 
883  if (!TMCSCMatch)
884  continue;
885 
886  const CSCChamber* cscchamber = m_cscGeometry->chamber(id);
887 
888  if (!cscchamber)
889  continue;
890 
891  TrajectoryStateOnSurface TrajSuf_ = surfExtrapTrkSam(track, cscchamber->toGlobal((*segIt).localPosition()).z());
892  Float_t dR_ = std::abs(TrajectoryDistToSeg(TrajSuf_, segIt));
893  if (dR_ < deltaCSCR) {
894  delete TrajSuf;
895  TrajSuf = new TrajectoryStateOnSurface(TrajSuf_);
896  deltaCSCR = dR_;
897  cscSegOut = segIt;
898  }
899  } //loop over segments
900 
901  return TrajSuf;
902 }
TrajectoryStateOnSurface surfExtrapTrkSam(const reco::Track &, double)
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:100
Float_t TrajectoryDistToSeg(TrajectoryStateOnSurface, CSCSegmentCollection::const_iterator)
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:43
nano_mu::ESTokenHandle< CSCGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_cscGeometry
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int chamber() const
Definition: CSCDetId.h:62
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
int station() const
Definition: CSCDetId.h:79
int endcap() const
Definition: CSCDetId.h:85
int ring() const
Definition: CSCDetId.h:68

◆ muonTagSelection()

bool MuCSCTnPFlatTableProducer::muonTagSelection ( const reco::Muon muon)
private

Definition at line 686 of file MuCSCTnPFlatTableProducer.cc.

References _muonIso, funct::abs(), PixelTripletNoTipGenerator_cfi::chi2Cut, computePFIso(), heepElectronID_HEEPV51_cff::dxyCut, TrackSplittingMonitor_cfi::dzCut, and jetfilter_cfi::ptCut.

Referenced by fillTable().

686  {
687  float ptCut = 10.0;
688  int trackerHitsCut = 8;
689  float dxyCut = 2.0;
690  float dzCut = 24.0;
691  float chi2Cut = 4.0;
692 
693  bool selected = false;
694  //_muonIso = iso(*muon.track(),tracks);
695  _muonIso = computePFIso(muon.pfIsolationR04(), muon.pt());
696 
697  if (!muon.isTrackerMuon())
698  return false;
699  if (!muon.track().isNonnull())
700  return false;
701  selected =
702  ((muon.track()->pt() > ptCut) && (muon.track()->hitPattern().numberOfValidTrackerHits() >= trackerHitsCut) &&
703  (muon.track()->dxy() < dxyCut) && (std::abs(muon.track()->dz()) < dzCut) &&
704  (muon.track()->normalizedChi2() < chi2Cut) && _muonIso < 0.1);
705 
706  return selected;
707 }
float computePFIso(const reco::MuonPFIsolation &, float)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ ringCandidate()

UChar_t MuCSCTnPFlatTableProducer::ringCandidate ( Int_t  iiStation,
Int_t  station,
Float_t  feta,
Float_t  phi 
)
private

Definition at line 767 of file MuCSCTnPFlatTableProducer.cc.

References funct::abs(), JetMETHLTOfflineSource_cfi::feta, relativeConstraints::ring, and relativeConstraints::station.

Referenced by fillTable().

767  {
768  UChar_t ring = 0;
769 
770  switch (station) {
771  case 1:
772  if (std::abs(feta) >= 0.85 && std::abs(feta) < 1.18) { //ME13
773  if (iiStation == 2)
774  ring = 3;
775  return ring;
776  }
777  if (std::abs(feta) >= 1.18 &&
778  std::abs(feta) <= 1.5) { //ME12 if(std::abs(feta)>1.18 && std::abs(feta)<1.7){//ME12
779  if (iiStation == 1)
780  ring = 2;
781  return ring;
782  }
783  if (std::abs(feta) > 1.5 && std::abs(feta) < 2.1) { //ME11
784  if (iiStation == 0)
785  ring = 1;
786  return ring;
787  }
788  if (std::abs(feta) >= 2.1 && std::abs(feta) < 2.45) { //ME11
789  if (iiStation == 0)
790  ring = 4;
791  return ring;
792  }
793  break;
794  case 2:
795  if (std::abs(feta) > 0.95 && std::abs(feta) < 1.6) { //ME22
796  ring = 2;
797  return ring;
798  }
799  if (std::abs(feta) > 1.55 && std::abs(feta) < 2.45) { //ME21
800  ring = 1;
801  return ring;
802  }
803  break;
804  case 3:
805  if (std::abs(feta) > 1.08 && std::abs(feta) < 1.72) { //ME32
806  ring = 2;
807  return ring;
808  }
809  if (std::abs(feta) > 1.69 && std::abs(feta) < 2.45) { //ME31
810  ring = 1;
811  return ring;
812  }
813  break;
814  case 4:
815  if (std::abs(feta) > 1.78 && std::abs(feta) < 2.45) { //ME41
816  ring = 1;
817  return ring;
818  }
819  if (std::abs(feta) > 1.15 && std::abs(feta) <= 1.78) { //ME42
820  ring = 2;
821  return ring;
822  }
823  break;
824  default:
825  edm::LogError("") << "Invalid station: " << station << std::endl;
826  break;
827  }
828  return 0;
829 }
Log< level::Error, false > LogError
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ surfExtrapTrkSam()

TrajectoryStateOnSurface MuCSCTnPFlatTableProducer::surfExtrapTrkSam ( const reco::Track track,
double  z 
)
private

Definition at line 738 of file MuCSCTnPFlatTableProducer.cc.

References Plane::build(), freeTrajStateMuon(), TrajectoryStateOnSurface::isValid(), Propagator::propagate(), propagatorAlong, propagatorOpposite, makeMuonMisalignmentScenario::rot, HLT_2023v12_cff::track, and z.

Referenced by fillTable(), GetEdgeAndDistToGap(), and matchTTwithCSCSeg().

738  {
739  Plane::PositionType pos(0, 0, z);
742 
744  TrajectoryStateOnSurface recoProp = propagatorAlong->propagate(recoStart, *myPlane);
745 
746  if (!recoProp.isValid())
747  recoProp = propagatorOpposite->propagate(recoStart, *myPlane);
748 
749  return recoProp;
750 }
edm::ESHandle< Propagator > propagatorOpposite
FreeTrajectoryState freeTrajStateMuon(const reco::Track &)
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
static PlanePointer build(Args &&... args)
Definition: Plane.h:33
edm::ESHandle< Propagator > propagatorAlong

◆ thisChamberCandidate()

UChar_t MuCSCTnPFlatTableProducer::thisChamberCandidate ( UChar_t  station,
UChar_t  ring,
Float_t  phi 
)
private

Definition at line 831 of file MuCSCTnPFlatTableProducer.cc.

References M_PI, phi, relativeConstraints::ring, and relativeConstraints::station.

Referenced by fillTable().

831  {
832  // cout <<"\t\t TPTrackMuonSys::thisChamberCandidate..."<<endl;
833 
834  //search for chamber candidate based on CMS IN-2007/024
835  //10 deg chambers are ME1,ME22,ME32,ME42 chambers; 20 deg chambers are ME21,31,41 chambers
836  //Chambers one always starts from approx -5 deg.
837  const UChar_t nVal = (station > 1 && ring == 1) ? 18 : 36;
838  const Float_t ChamberSpan = 2 * M_PI / nVal;
839  Float_t dphi = phi + M_PI / 36;
840  while (dphi >= 2 * M_PI)
841  dphi -= 2 * M_PI;
842  while (dphi < 0)
843  dphi += 2 * M_PI;
844  UChar_t ChCand = floor(dphi / ChamberSpan) + 1;
845  return ChCand > nVal ? nVal : ChCand;
846 }
#define M_PI

◆ trackProbeSelection()

bool MuCSCTnPFlatTableProducer::trackProbeSelection ( const reco::Track track)
private

Selection functions.

Definition at line 709 of file MuCSCTnPFlatTableProducer.cc.

References _trackIso, funct::abs(), PixelTripletNoTipGenerator_cfi::chi2Cut, heepElectronID_HEEPV51_cff::dxyCut, TrackSplittingMonitor_cfi::dzCut, iso(), jetfilter_cfi::ptCut, HLT_2023v12_cff::track, and pwdgSkimBPark_cfi::tracks.

Referenced by fillTable().

710  {
711  float ptCut = 10.0;
712  int trackerHitsCut = 8;
713  float dxyCut = 2.0;
714  float dzCut = 24.0;
715  float chi2Cut = 4.0;
716 
717  bool selected = false;
719 
720  selected =
721  ((track.pt() > ptCut) && (std::abs(track.eta()) > 0.75) && (std::abs(track.eta()) < 2.55) &&
722  (track.numberOfValidHits() >= trackerHitsCut) && (track.dxy() < dxyCut) && (std::abs(track.dz()) < dzCut) &&
723  (track.normalizedChi2() > 0.0) && (track.normalizedChi2() < chi2Cut) && _trackIso < 0.1);
724 
725  return selected;
726 }
double iso(const reco::Track &, edm::Handle< std::vector< reco::Track >>)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ TrajectoryDistToSeg()

Float_t MuCSCTnPFlatTableProducer::TrajectoryDistToSeg ( TrajectoryStateOnSurface  TrajSuf,
CSCSegmentCollection::const_iterator  segIt 
)
private

Definition at line 848 of file MuCSCTnPFlatTableProducer.cc.

References TrajectoryStateOnSurface::freeState(), CSCGeometry::idToDet(), TrajectoryStateOnSurface::isValid(), m_cscGeometry, FreeTrajectoryState::position(), conifer::pow(), mathSSE::sqrt(), GeomDet::surface(), GloballyPositioned< T >::toLocal(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by matchTTwithCSCSeg().

849  {
850  if (!TrajSuf.isValid())
851  return 9999.;
852  const GeomDet* gdet = m_cscGeometry->idToDet((CSCDetId)(*segIt).cscDetId());
853  LocalPoint localTTPos = gdet->surface().toLocal(TrajSuf.freeState()->position());
854  LocalPoint localSegPos = (*segIt).localPosition();
855  Float_t CSCdeltaX = localSegPos.x() - localTTPos.x();
856  Float_t CSCdeltaY = localSegPos.y() - localTTPos.y();
857  return sqrt(pow(CSCdeltaX, 2) + pow(CSCdeltaY, 2));
858 }
constexpr int pow(int x)
Definition: conifer.h:24
LocalPoint toLocal(const GlobalPoint &gp) const
GlobalPoint position() const
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
T sqrt(T t)
Definition: SSEVec.h:19
nano_mu::ESTokenHandle< CSCGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_cscGeometry
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
FreeTrajectoryState const * freeState(bool withErrors=true) const
const GeomDet * idToDet(DetId) const override
Definition: CSCGeometry.cc:91

◆ YDistToHVDeadZone()

Float_t MuCSCTnPFlatTableProducer::YDistToHVDeadZone ( Float_t  yLocal,
Int_t  StationAndRing 
)
private

Definition at line 947 of file MuCSCTnPFlatTableProducer.cc.

References funct::abs(), and HGVHistoProducerAlgoBlock_cfi::minY.

Referenced by GetEdgeAndDistToGap().

947  {
948  //the ME11 wires are not parallel to x, but no gap
949  //chamber edges are not included.
950  const Float_t deadZoneCenterME1_2[2] = {-32.88305, 32.867423};
951  const Float_t deadZoneCenterME1_3[2] = {-22.7401, 27.86665};
952  const Float_t deadZoneCenterME2_1[2] = {-27.47, 33.67};
953  const Float_t deadZoneCenterME3_1[2] = {-36.21, 23.68};
954  const Float_t deadZoneCenterME4_1[2] = {-26.14, 23.85};
955  const Float_t deadZoneCenterME234_2[4] = {-81.8744, -21.18165, 39.51105, 100.2939};
956  const Float_t* deadZoneCenter;
957  Float_t deadZoneHeightHalf = 0.32 * 7 / 2; // wire spacing * (wires missing + 1)/2
958  Float_t minY = 999999.;
959  UChar_t nGaps = 2;
960  switch (std::abs(StationAndRing)) {
961  case 11:
962  case 14:
963  return 162; //the height of ME11
964  break;
965  case 12:
966  deadZoneCenter = deadZoneCenterME1_2;
967  break;
968  case 13:
969  deadZoneCenter = deadZoneCenterME1_3;
970  break;
971  case 21:
972  deadZoneCenter = deadZoneCenterME2_1;
973  break;
974  case 31:
975  deadZoneCenter = deadZoneCenterME3_1;
976  break;
977  case 41:
978  deadZoneCenter = deadZoneCenterME4_1;
979  break;
980  default:
981  deadZoneCenter = deadZoneCenterME234_2;
982  nGaps = 4;
983  }
984  for (UChar_t iGap = 0; iGap < nGaps; iGap++) {
985  Float_t newMinY = yLocal < deadZoneCenter[iGap] ? deadZoneCenter[iGap] - deadZoneHeightHalf - yLocal
986  : yLocal - (deadZoneCenter[iGap] + deadZoneHeightHalf);
987  if (newMinY < minY)
988  minY = newMinY;
989  }
990  return minY;
991 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ zMass()

double MuCSCTnPFlatTableProducer::zMass ( const reco::Track track,
const reco::Muon muon 
)
private

Definition at line 1017 of file MuCSCTnPFlatTableProducer.cc.

References conifer::pow(), mathSSE::sqrt(), and HLT_2023v12_cff::track.

Referenced by zSelection().

1017  {
1018  double zMass = -99.0;
1019  double mMu = 0.1134289256;
1020 
1021  zMass = std::pow((std::sqrt(std::pow(muon.p(), 2) + mMu * mMu) + std::sqrt(std::pow(track.p(), 2) + mMu * mMu)), 2) -
1022  (std::pow((muon.px() + track.px()), 2) + std::pow((muon.py() + track.py()), 2) +
1023  std::pow((muon.pz() + track.pz()), 2));
1024 
1025  return std::sqrt(zMass);
1026 }
constexpr int pow(int x)
Definition: conifer.h:24
T sqrt(T t)
Definition: SSEVec.h:19
double zMass(const reco::Track &, const reco::Muon &)

◆ zSelection()

bool MuCSCTnPFlatTableProducer::zSelection ( const reco::Muon muon,
const reco::Track track 
)
private

Definition at line 728 of file MuCSCTnPFlatTableProducer.cc.

References _zMass, HLT_2023v12_cff::track, and zMass().

Referenced by fillTable().

728  {
729  bool selected = false;
730 
731  _zMass = zMass(track, muon);
732  selected = (track.charge() * muon.charge() == -1 && (_zMass > 75.0) && (_zMass < 120.0));
733 
734  return selected;
735 }
double zMass(const reco::Track &, const reco::Muon &)

Member Data Documentation

◆ _muonIso

double MuCSCTnPFlatTableProducer::_muonIso
private

Definition at line 153 of file MuCSCTnPFlatTableProducer.cc.

Referenced by muonTagSelection().

◆ _trackIso

double MuCSCTnPFlatTableProducer::_trackIso
private

Definition at line 152 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and trackProbeSelection().

◆ _zMass

double MuCSCTnPFlatTableProducer::_zMass
private

Definition at line 154 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and zSelection().

◆ m_cscGeometry

nano_mu::ESTokenHandle<CSCGeometry, MuonGeometryRecord, edm::Transition::BeginRun> MuCSCTnPFlatTableProducer::m_cscGeometry
private

Handles to geometry, detector and specialized objects CSC Geometry

Definition at line 100 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), GetEdgeAndDistToGap(), getFromES(), matchTTwithCSCSeg(), and TrajectoryDistToSeg().

◆ m_cscSegmentToken

nano_mu::EDTokenHandle<CSCSegmentCollection> MuCSCTnPFlatTableProducer::m_cscSegmentToken
private

Definition at line 87 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable().

◆ m_hltConfig

HLTConfigProvider MuCSCTnPFlatTableProducer::m_hltConfig
private

HLT config provider.

Definition at line 114 of file MuCSCTnPFlatTableProducer.cc.

Referenced by getFromES(), and hasTrigger().

◆ m_isoTrigIndices

std::vector<int> MuCSCTnPFlatTableProducer::m_isoTrigIndices
private

Definition at line 118 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and getFromES().

◆ m_isoTrigName

std::string MuCSCTnPFlatTableProducer::m_isoTrigName
private

Definition at line 96 of file MuCSCTnPFlatTableProducer.cc.

Referenced by getFromES().

◆ m_muonSP

std::unique_ptr<MuonServiceProxy> MuCSCTnPFlatTableProducer::m_muonSP
private

Muon service proxy.

Definition at line 103 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and getFromES().

◆ m_muToken

nano_mu::EDTokenHandle<reco::MuonCollection> MuCSCTnPFlatTableProducer::m_muToken
private

Tokens.

Definition at line 84 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable().

◆ m_nZCands

unsigned int MuCSCTnPFlatTableProducer::m_nZCands
private

The variables holding the T&P related information

Definition at line 150 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable().

◆ m_primaryVerticesToken

nano_mu::EDTokenHandle<std::vector<reco::Vertex> > MuCSCTnPFlatTableProducer::m_primaryVerticesToken
private

Definition at line 89 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable().

◆ m_trackToken

nano_mu::EDTokenHandle<reco::TrackCollection> MuCSCTnPFlatTableProducer::m_trackToken
private

Definition at line 85 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable().

◆ m_transientTrackBuilder

nano_mu::ESTokenHandle<TransientTrackBuilder, TransientTrackRecord> MuCSCTnPFlatTableProducer::m_transientTrackBuilder
private

Transient Track Builder.

Definition at line 106 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and getFromES().

◆ m_trigEventToken

nano_mu::EDTokenHandle<trigger::TriggerEvent> MuCSCTnPFlatTableProducer::m_trigEventToken
private

Definition at line 92 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable().

◆ m_trigIndices

std::vector<int> MuCSCTnPFlatTableProducer::m_trigIndices
private

Indices of the triggers used by muon filler for trigger matching.

Definition at line 117 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and getFromES().

◆ m_trigName

std::string MuCSCTnPFlatTableProducer::m_trigName
private

Name of the triggers used by muon filler for trigger matching.

Definition at line 95 of file MuCSCTnPFlatTableProducer.cc.

Referenced by getFromES().

◆ m_trigResultsToken

nano_mu::EDTokenHandle<edm::TriggerResults> MuCSCTnPFlatTableProducer::m_trigResultsToken
private

Definition at line 91 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable().

◆ MEZ

constexpr Float_t MuCSCTnPFlatTableProducer::MEZ[6] = {601.3, 696.11, 696.11, 827.56, 936.44, 1025.9}
staticprivate

Definition at line 81 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable().

◆ propagatorAlong

edm::ESHandle<Propagator> MuCSCTnPFlatTableProducer::propagatorAlong
private

Definition at line 109 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and surfExtrapTrkSam().

◆ propagatorOpposite

edm::ESHandle<Propagator> MuCSCTnPFlatTableProducer::propagatorOpposite
private

Definition at line 110 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and surfExtrapTrkSam().

◆ theBField

edm::ESHandle<MagneticField> MuCSCTnPFlatTableProducer::theBField
private

Definition at line 111 of file MuCSCTnPFlatTableProducer.cc.

Referenced by fillTable(), and freeTrajStateMuon().