CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
MuonsFromRefitTracksProducer Class Reference
Inheritance diagram for MuonsFromRefitTracksProducer:
edm::stream::EDProducer<>

Public Member Functions

 MuonsFromRefitTracksProducer (const edm::ParameterSet &)
 
 ~MuonsFromRefitTracksProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Private Member Functions

reco::MuoncloneAndSwitchTrack (const reco::Muon &muon, const reco::Muon::MuonTrackTypePair &newTrack) const
 
void produce (edm::Event &, const edm::EventSetup &) override
 
bool storeMatchMaps (const edm::Event &event)
 

Private Attributes

bool fromCocktail
 
bool fromGlobalTrack
 
bool fromSigmaSwitch
 
bool fromTeVRefit
 
bool fromTMR
 
bool fromTrackerTrack
 
double nSigmaSwitch
 
double ptThreshold
 
edm::InputTag src
 
edm::EDGetTokenT< edm::View< reco::Muon > > srcToken_
 
std::string tevMuonTracks
 
double TMRcut
 
edm::Handle< reco::TrackToTrackMaptrackMap
 
edm::Handle< reco::TrackToTrackMaptrackMapDefault
 
edm::EDGetTokenT< reco::TrackToTrackMaptrackMapDefaultToken_
 
edm::Handle< reco::TrackToTrackMaptrackMapFirstHit
 
edm::EDGetTokenT< reco::TrackToTrackMaptrackMapFirstHitToken_
 
edm::Handle< reco::TrackToTrackMaptrackMapPicky
 
edm::EDGetTokenT< reco::TrackToTrackMaptrackMapPickyToken_
 
edm::EDGetTokenT< reco::TrackToTrackMaptrackMapToken_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 66 of file MuonsFromRefitTracksProducer.cc.

Constructor & Destructor Documentation

MuonsFromRefitTracksProducer::MuonsFromRefitTracksProducer ( const edm::ParameterSet cfg)
explicit

Definition at line 152 of file MuonsFromRefitTracksProducer.cc.

References fromTeVRefit, src, srcToken_, tevMuonTracks, trackMapDefaultToken_, trackMapFirstHitToken_, trackMapPickyToken_, and trackMapToken_.

153  : src(cfg.getParameter<edm::InputTag>("src")),
154  fromTrackerTrack(cfg.getParameter<bool>("fromTrackerTrack")),
155  fromGlobalTrack(cfg.getParameter<bool>("fromGlobalTrack")),
156  tevMuonTracks(cfg.getParameter<std::string>("tevMuonTracks")),
157  fromCocktail(cfg.getParameter<bool>("fromCocktail")),
158  fromTMR(cfg.getParameter<bool>("fromTMR")),
159  TMRcut(cfg.getParameter<double>("TMRcut")),
160  fromSigmaSwitch(cfg.getParameter<bool>("fromSigmaSwitch")),
161  nSigmaSwitch(cfg.getParameter<double>("nSigmaSwitch")),
162  ptThreshold(cfg.getParameter<double>("ptThreshold"))
163 {
164  fromTeVRefit = tevMuonTracks != "none";
165 
166 
167  srcToken_ = consumes<edm::View<reco::Muon> >(src) ;
168  trackMapToken_ = consumes<reco::TrackToTrackMap> (edm::InputTag(tevMuonTracks, "default"));
169  trackMapDefaultToken_ = consumes<reco::TrackToTrackMap>(edm::InputTag(tevMuonTracks)) ;
170  trackMapFirstHitToken_ = consumes<reco::TrackToTrackMap>(edm::InputTag(tevMuonTracks, "firstHit"));
171  trackMapPickyToken_ = consumes<reco::TrackToTrackMap> (edm::InputTag(tevMuonTracks, "picky"));
172 
173 
174 
175 
176  produces<reco::MuonCollection>();
177 }
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::TrackToTrackMap > trackMapPickyToken_
edm::EDGetTokenT< reco::TrackToTrackMap > trackMapToken_
edm::EDGetTokenT< reco::TrackToTrackMap > trackMapDefaultToken_
edm::EDGetTokenT< edm::View< reco::Muon > > srcToken_
edm::EDGetTokenT< reco::TrackToTrackMap > trackMapFirstHitToken_
MuonsFromRefitTracksProducer::~MuonsFromRefitTracksProducer ( )
inlineoverride

Definition at line 69 of file MuonsFromRefitTracksProducer.cc.

References cloneAndSwitchTrack(), produce(), and storeMatchMaps().

69 {}

Member Function Documentation

reco::Muon * MuonsFromRefitTracksProducer::cloneAndSwitchTrack ( const reco::Muon muon,
const reco::Muon::MuonTrackTypePair newTrack 
) const
private

Definition at line 193 of file MuonsFromRefitTracksProducer.cc.

References reco::Muon::clone(), reco::Muon::innerTrack(), RPCpg::mu, fastsim::Constants::muMass, reco::Muon::outerTrack(), AlCaHLTBitMon_ParallelJobs::p, p4, reco::Muon::setBestTrack(), reco::LeafCandidate::setCharge(), reco::Muon::setGlobalTrack(), reco::Muon::setInnerTrack(), reco::Muon::setOuterTrack(), reco::LeafCandidate::setP4(), reco::LeafCandidate::setVertex(), mathSSE::sqrt(), and badGlobalMuonTaggersAOD_cff::vtx.

Referenced by produce(), and ~MuonsFromRefitTracksProducer().

194  {
195  // Muon mass to make a four-vector out of the new track.
196  static const double muMass = 0.10566;
197 
198  reco::TrackRef tkTrack = muon.innerTrack();
199  reco::TrackRef muTrack = muon.outerTrack();
200 
201  // Make up a real Muon from the tracker track.
202  reco::Particle::Point vtx(newTrack.first->vx(), newTrack.first->vy(), newTrack.first->vz());
204  double p = newTrack.first->p();
205  p4.SetXYZT(newTrack.first->px(), newTrack.first->py(), newTrack.first->pz(),
206  sqrt(p*p + muMass*muMass));
207 
208  reco::Muon* mu = muon.clone();
209  mu->setCharge(newTrack.first->charge());
210  mu->setP4(p4);
211  mu->setVertex(vtx);
212  mu->setGlobalTrack(newTrack.first);
213  mu->setInnerTrack(tkTrack);
214  mu->setOuterTrack(muTrack);
215  mu->setBestTrack(newTrack.second);
216  return mu;
217 }
virtual TrackRef innerTrack() const
Definition: Muon.h:48
static double constexpr muMass
Muon mass [GeV].
Definition: Constants.h:18
void setVertex(const Point &vertex) override
set vertex
void setCharge(Charge q) final
set electric charge
Definition: LeafCandidate.h:93
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
T sqrt(T t)
Definition: SSEVec.h:18
double p4[4]
Definition: TauolaWrapper.h:92
math::XYZPoint Point
point in the space
Definition: Particle.h:25
const int mu
Definition: Constants.h:22
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
Definition: Muon.h:51
virtual void setOuterTrack(const TrackRef &t)
set reference to Track
virtual void setBestTrack(MuonTrackType muonType)
Definition: Muon.h:91
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21
void setP4(const LorentzVector &p4) final
set 4-momentum
Muon * clone() const override
create a clone
virtual void setGlobalTrack(const TrackRef &t)
set reference to Track
void MuonsFromRefitTracksProducer::produce ( edm::Event event,
const edm::EventSetup eSetup 
)
overrideprivate

Definition at line 219 of file MuonsFromRefitTracksProducer.cc.

References egammaForCoreTracking_cff::cands, edm::ViewBase::clone(), cloneAndSwitchTrack(), reco::Muon::CombinedTrack, edm::AssociationMap< edm::OneToOne< reco::TrackCollection, reco::TrackCollection > >::const_iterator, DEFINE_FWK_MODULE, edm::AssociationMap< Tag >::end(), edm::HandleBase::failedToGet(), edm::AssociationMap< Tag >::find(), fromCocktail, fromGlobalTrack, fromSigmaSwitch, fromTeVRefit, fromTMR, fromTrackerTrack, reco::Muon::InnerTrack, plotBeamSpotDB::last, eostools::move(), metsig::muon, nano_cff::muons, nSigmaSwitch, convertSQLiteXML::ok, ptThreshold, reco::Muon::setGlobalTrack(), reco::Muon::setInnerTrack(), reco::Muon::setOuterTrack(), sigmaSwitch(), src, srcToken_, storeMatchMaps(), tevMuonTracks, muon::tevOptimized(), tevOptimizedTMR(), TMRcut, trackMap, and trackMapFirstHit.

Referenced by ~MuonsFromRefitTracksProducer().

219  {
220  // Get the global muons from the event.
222  event.getByToken(srcToken_, muons);
223 
224  // If we can't get the global muon collection, or below the
225  // track-to-track maps needed, still produce an empty collection of
226  // muons so consumers don't throw an exception.
227  bool ok = !muons.failedToGet();
228 
229  // If we're instructed to use the TeV refit tracks in some way, we
230  // need the track-to-track maps. If we're making a cocktail muon,
231  // get all three track maps (the cocktail ingredients); else just
232  // get the map which takes the above global tracks to the desired
233  // TeV-muon refitted tracks (firstHit or picky).
234  if (ok && fromTeVRefit)
235  ok = storeMatchMaps(event);
236 
237  // Make the output collection.
238  auto cands = std::make_unique<reco::MuonCollection>();
239 
240  if (ok) {
242  for (muon = muons->begin(); muon != muons->end(); muon++) {
243  // Filter out the so-called trackerMuons and stand-alone muons
244  // (and caloMuons, if they were ever to get into the input muons
245  // collection).
246  if (!muon->isGlobalMuon()) continue;
247 
248  if (fromTeVRefit || fromSigmaSwitch) {
249  // Start out with a null TrackRef.
251 
252  // If making a cocktail muon, use tevOptimized() to get the track
253  // desired. Otherwise, get the refit track from the desired track
254  // map.
255  if (fromTMR)
256  tevTk = tevOptimizedTMR(*muon, *trackMapFirstHit, TMRcut);
257  else if (fromCocktail)
258  tevTk = muon::tevOptimized(*muon);
259  else if (fromSigmaSwitch)
260  tevTk = sigmaSwitch(*muon, nSigmaSwitch, ptThreshold);
261  else {
263  trackMap->find(muon->combinedMuon());
264  if (tevTkRef != trackMap->end())
265  tevTk = make_pair(tevTkRef->val,reco::Muon::CombinedTrack);
266  }
267 
268  // If the TrackRef is valid, make a new Muon that has the same
269  // tracker and stand-alone tracks, but has the refit track as
270  // its global track.
271  if (tevTk.first.isNonnull())
272  cands->push_back(*cloneAndSwitchTrack(*muon, tevTk));
273  }
274  else if (fromTrackerTrack)
275  cands->push_back(*cloneAndSwitchTrack(*muon, make_pair(muon->innerTrack(),reco::Muon::InnerTrack)));
276  else if (fromGlobalTrack)
277  cands->push_back(*cloneAndSwitchTrack(*muon, make_pair(muon->globalTrack(),reco::Muon::CombinedTrack)));
278  else {
279  cands->push_back(*muon->clone());
280 
281  // Just cloning does not work in the case of the source being
282  // a pat::Muon with embedded track references -- these do not
283  // get copied. Explicitly set them.
284  reco::Muon& last = cands->at(cands->size()-1);
285  if (muon->globalTrack().isTransient())
286  last.setGlobalTrack(muon->globalTrack());
287  if (muon->innerTrack().isTransient())
288  last.setInnerTrack(muon->innerTrack());
289  if (muon->outerTrack().isTransient())
290  last.setOuterTrack(muon->outerTrack());
291  }
292  }
293  }
294  else
295  edm::LogWarning("MuonsFromRefitTracksProducer")
296  << "either " << src << " or the track map(s) " << tevMuonTracks
297  << " not present in the event; producing empty collection";
298 
299  event.put(std::move(cands));
300 }
reco::Muon::MuonTrackTypePair sigmaSwitch(const reco::Muon &muon, const double nSigma, const double ptThreshold)
const_iterator end() const
last iterator over the map (read only)
reco::Muon * cloneAndSwitchTrack(const reco::Muon &muon, const reco::Muon::MuonTrackTypePair &newTrack) const
const_iterator find(const key_type &k) const
find element with specified reference key
edm::Handle< reco::TrackToTrackMap > trackMap
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
bool storeMatchMaps(const edm::Event &event)
reco::Muon::MuonTrackTypePair tevOptimized(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const reco::TrackRef &tpfmsTrack, const reco::TrackRef &pickyTrack, const reco::TrackRef &dytTrack, const double ptThreshold=200., const double tune1=17., const double tune2=40., const double dptcut=0.25)
Definition: MuonCocktails.cc:9
std::unique_ptr< ViewBase > clone() const
Definition: View.cc:14
edm::Handle< reco::TrackToTrackMap > trackMapFirstHit
reco::Muon::MuonTrackTypePair tevOptimizedTMR(const reco::Muon &muon, const reco::TrackToTrackMap &fmsMap, const double cut)
bool failedToGet() const
Definition: HandleBase.h:78
edm::EDGetTokenT< edm::View< reco::Muon > > srcToken_
virtual void setOuterTrack(const TrackRef &t)
set reference to Track
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
std::pair< TrackRef, Muon::MuonTrackType > MuonTrackTypePair
Definition: Muon.h:40
virtual void setGlobalTrack(const TrackRef &t)
set reference to Track
def move(src, dest)
Definition: eostools.py:510
bool MuonsFromRefitTracksProducer::storeMatchMaps ( const edm::Event event)
private

Definition at line 179 of file MuonsFromRefitTracksProducer.cc.

References edm::HandleBase::failedToGet(), fromCocktail, fromTMR, trackMap, trackMapDefault, trackMapDefaultToken_, trackMapFirstHit, trackMapFirstHitToken_, trackMapPicky, trackMapPickyToken_, and trackMapToken_.

Referenced by produce(), and ~MuonsFromRefitTracksProducer().

179  {
180  if (fromCocktail || fromTMR) {
181  event.getByToken(trackMapDefaultToken_,trackMapDefault);
182  event.getByToken(trackMapFirstHitToken_, trackMapFirstHit);
183  event.getByToken(trackMapPickyToken_, trackMapPicky);
184  return !trackMapDefault.failedToGet() &&
186  }
187  else {
188  event.getByToken(trackMapToken_, trackMap);
189  return !trackMap.failedToGet();
190  }
191 }
edm::EDGetTokenT< reco::TrackToTrackMap > trackMapPickyToken_
edm::EDGetTokenT< reco::TrackToTrackMap > trackMapToken_
edm::Handle< reco::TrackToTrackMap > trackMapDefault
edm::EDGetTokenT< reco::TrackToTrackMap > trackMapDefaultToken_
edm::Handle< reco::TrackToTrackMap > trackMap
edm::Handle< reco::TrackToTrackMap > trackMapFirstHit
bool failedToGet() const
Definition: HandleBase.h:78
edm::Handle< reco::TrackToTrackMap > trackMapPicky
edm::EDGetTokenT< reco::TrackToTrackMap > trackMapFirstHitToken_

Member Data Documentation

bool MuonsFromRefitTracksProducer::fromCocktail
private

Definition at line 110 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce(), and storeMatchMaps().

bool MuonsFromRefitTracksProducer::fromGlobalTrack
private

Definition at line 96 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce().

bool MuonsFromRefitTracksProducer::fromSigmaSwitch
private

Definition at line 121 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce().

bool MuonsFromRefitTracksProducer::fromTeVRefit
private

Definition at line 100 of file MuonsFromRefitTracksProducer.cc.

Referenced by MuonsFromRefitTracksProducer(), and produce().

bool MuonsFromRefitTracksProducer::fromTMR
private

Definition at line 114 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce(), and storeMatchMaps().

bool MuonsFromRefitTracksProducer::fromTrackerTrack
private

Definition at line 90 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce().

double MuonsFromRefitTracksProducer::nSigmaSwitch
private

Definition at line 124 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce().

double MuonsFromRefitTracksProducer::ptThreshold
private

Definition at line 127 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce().

edm::InputTag MuonsFromRefitTracksProducer::src
private

Definition at line 84 of file MuonsFromRefitTracksProducer.cc.

Referenced by MuonsFromRefitTracksProducer(), and produce().

edm::EDGetTokenT<edm::View<reco::Muon> > MuonsFromRefitTracksProducer::srcToken_
private

Definition at line 142 of file MuonsFromRefitTracksProducer.cc.

Referenced by MuonsFromRefitTracksProducer(), and produce().

std::string MuonsFromRefitTracksProducer::tevMuonTracks
private

Definition at line 105 of file MuonsFromRefitTracksProducer.cc.

Referenced by MuonsFromRefitTracksProducer(), and produce().

double MuonsFromRefitTracksProducer::TMRcut
private

Definition at line 117 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce().

edm::Handle<reco::TrackToTrackMap> MuonsFromRefitTracksProducer::trackMap
private

Definition at line 132 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce(), and storeMatchMaps().

edm::Handle<reco::TrackToTrackMap> MuonsFromRefitTracksProducer::trackMapDefault
private

Definition at line 135 of file MuonsFromRefitTracksProducer.cc.

Referenced by storeMatchMaps().

edm::EDGetTokenT<reco::TrackToTrackMap> MuonsFromRefitTracksProducer::trackMapDefaultToken_
private
edm::Handle<reco::TrackToTrackMap> MuonsFromRefitTracksProducer::trackMapFirstHit
private

Definition at line 136 of file MuonsFromRefitTracksProducer.cc.

Referenced by produce(), and storeMatchMaps().

edm::EDGetTokenT<reco::TrackToTrackMap> MuonsFromRefitTracksProducer::trackMapFirstHitToken_
private
edm::Handle<reco::TrackToTrackMap> MuonsFromRefitTracksProducer::trackMapPicky
private

Definition at line 137 of file MuonsFromRefitTracksProducer.cc.

Referenced by storeMatchMaps().

edm::EDGetTokenT<reco::TrackToTrackMap> MuonsFromRefitTracksProducer::trackMapPickyToken_
private
edm::EDGetTokenT<reco::TrackToTrackMap> MuonsFromRefitTracksProducer::trackMapToken_
private