CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
HLTMuonTrackMassFilter Class Reference

#include <HLTMuonTrackMassFilter.h>

Inheritance diagram for HLTMuonTrackMassFilter:
HLTFilter edm::EDFilter edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

 HLTMuonTrackMassFilter (const edm::ParameterSet &)
 
 ~HLTMuonTrackMassFilter ()
 
- Public Member Functions inherited from HLTFilter
 HLTFilter (const edm::ParameterSet &config)
 
int module () const
 
const std::string * moduleLabel () const
 
int path () const
 
const std::string * pathName () const
 
std::pair< int, int > pmid () const
 
bool saveTags () const
 
virtual ~HLTFilter ()
 
- Public Member Functions inherited from edm::EDFilter
 EDFilter ()
 
virtual ~EDFilter ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from HLTFilter
static void makeHLTFilterDescription (edm::ParameterSetDescription &desc)
 
- Static Public Member Functions inherited from edm::EDFilter
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 

Private Member Functions

virtual bool hltFilter (edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct)
 
bool pairMatched (std::vector< reco::RecoChargedCandidateRef > &prevMuonRefs, std::vector< reco::RecoChargedCandidateRef > &prevTrackRefs, const reco::RecoChargedCandidateRef &muonRef, const reco::RecoChargedCandidateRef &trackRef) const
 

Private Attributes

edm::InputTag beamspotTag_
 beamspot used for quality cuts More...
 
bool checkCharge_
 check opposite charge? More...
 
bool cutCowboys_
 DCA between the two muons. More...
 
double max_DCAMuonTrack_
 
std::vector< double > maxMasses_
 higher mass limits More...
 
double maxTrackDxy_
 track tip cut w.r.t. beamspot More...
 
double maxTrackDz_
 track lip cut w.r.t. beamspot More...
 
double maxTrackEta_
 track |eta| cut More...
 
double maxTrackNormChi2_
 normalized chi2 of track More...
 
std::vector< double > minMasses_
 lower mass limits More...
 
int minTrackHits_
 

valid hits on track

More...
 
double minTrackP_
 track p cut More...
 
double minTrackPt_
 track pt cut More...
 
edm::InputTag muonTag_
 RecoChargedCandidateCollection (muons) More...
 
edm::InputTag prevCandTag_
 filter objects from previous filter More...
 
edm::InputTag trackTag_
 RecoChargedCandidateCollection (tracks) More...
 

Additional Inherited Members

- Public Types inherited from edm::EDFilter
typedef EDFilter ModuleType
 
typedef WorkerT< EDFilterWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Protected Member Functions inherited from edm::EDFilter
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Definition at line 16 of file HLTMuonTrackMassFilter.h.

Constructor & Destructor Documentation

HLTMuonTrackMassFilter::HLTMuonTrackMassFilter ( const edm::ParameterSet iConfig)
explicit

Definition at line 39 of file HLTMuonTrackMassFilter.cc.

References beamspotTag_, checkCharge_, i, LogDebug, maxMasses_, maxTrackDxy_, maxTrackDz_, maxTrackEta_, maxTrackNormChi2_, minMasses_, minTrackHits_, minTrackP_, minTrackPt_, muonTag_, prevCandTag_, HLTFilter::saveTags(), and trackTag_.

39  : HLTFilter(iConfig),
40  beamspotTag_(iConfig.getParameter<edm::InputTag>("BeamSpotTag")),
41  muonTag_(iConfig.getParameter<edm::InputTag>("CandTag")),
42  trackTag_(iConfig.getParameter<edm::InputTag>("TrackTag")),
43  prevCandTag_(iConfig.getParameter<edm::InputTag>("PreviousCandTag")),
44  minMasses_(iConfig.getParameter< std::vector<double> >("MinMasses")),
45  maxMasses_(iConfig.getParameter< std::vector<double> >("MaxMasses")),
46  checkCharge_(iConfig.getParameter<bool>("checkCharge")),
47  minTrackPt_(iConfig.getParameter<double>("MinTrackPt")),
48  minTrackP_(iConfig.getParameter<double>("MinTrackP")),
49  maxTrackEta_(iConfig.getParameter<double>("MaxTrackEta")),
50  maxTrackDxy_(iConfig.getParameter<double>("MaxTrackDxy")),
51  maxTrackDz_(iConfig.getParameter<double>("MaxTrackDz")),
52  minTrackHits_(iConfig.getParameter<int>("MinTrackHits")),
53  maxTrackNormChi2_(iConfig.getParameter<double>("MaxTrackNormChi2")),
54 // maxDzMuonTrack_(iConfig.getParameter<double>("MaxDzMuonTrack")),
55  max_DCAMuonTrack_(iConfig.getParameter<double>("MaxDCAMuonTrack")),
56  cutCowboys_(iConfig.getParameter<bool>("CutCowboys"))
57 {
58  //
59  // verify mass windows
60  //
61  bool massesValid = minMasses_.size()==maxMasses_.size();
62  if ( massesValid ) {
63  for ( unsigned int i=0; i<minMasses_.size(); ++i ) {
64  if ( minMasses_[i]<0 || maxMasses_[i]<0 ||
65  minMasses_[i]>maxMasses_[i] ) massesValid = false;
66  }
67  }
68  if ( !massesValid ) {
69  edm::LogError("HLTMuonTrackMassFilter") << "Inconsistency in definition of mass windows, "
70  << "no event will pass the filter";
71  minMasses_.clear();
72  maxMasses_.clear();
73  }
74 
75  std::ostringstream stream;
76  stream << "instantiated with parameters\n";
77  stream << " beamspot = " << beamspotTag_ << "\n";
78  stream << " muonCandidates = " << muonTag_ << "\n";
79  stream << " trackCandidates = " << trackTag_ << "\n";
80  stream << " previousCandidates = " << prevCandTag_ << "\n";
81  stream << " saveTags= " << saveTags() << "\n";
82  stream << " mass windows =";
83  for ( size_t i=0; i<minMasses_.size(); ++i )
84  stream << " (" << minMasses_[i] << "," << maxMasses_[i] << ")";
85  stream << "\n";
86  stream << " checkCharge = " << checkCharge_ << "\n";
87  stream << " MinTrackPt = " << minTrackPt_ << "\n";
88  stream << " MinTrackP = " << minTrackP_ << "\n";
89  stream << " MaxTrackEta = " << maxTrackEta_ << "\n";
90  stream << " MaxTrackDxy = " << maxTrackDxy_ << "\n";
91  stream << " MaxTrackDz = " << maxTrackDz_ << "\n";
92  stream << " MinTrackHits = " << minTrackHits_ << "\n";
93  stream << " MaxTrackNormChi2 = " << maxTrackNormChi2_ << "\n";
94 // stream << " MaxDzMuonTrack = " << maxDzMuonTrack_ << "\n";
95  LogDebug("HLTMuonTrackMassFilter") << stream.str();
96 
97 }
#define LogDebug(id)
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
double minTrackP_
track p cut
bool checkCharge_
check opposite charge?
edm::InputTag trackTag_
RecoChargedCandidateCollection (tracks)
double maxTrackDz_
track lip cut w.r.t. beamspot
double maxTrackNormChi2_
normalized chi2 of track
std::vector< double > minMasses_
lower mass limits
edm::InputTag muonTag_
RecoChargedCandidateCollection (muons)
bool cutCowboys_
DCA between the two muons.
HLTFilter(const edm::ParameterSet &config)
Definition: HLTFilter.cc:18
int minTrackHits_
valid hits on track
double minTrackPt_
track pt cut
bool saveTags() const
Definition: HLTFilter.h:45
std::vector< double > maxMasses_
higher mass limits
edm::InputTag prevCandTag_
filter objects from previous filter
double maxTrackDxy_
track tip cut w.r.t. beamspot
edm::InputTag beamspotTag_
beamspot used for quality cuts
double maxTrackEta_
track |eta| cut
HLTMuonTrackMassFilter::~HLTMuonTrackMassFilter ( )
inline

Definition at line 19 of file HLTMuonTrackMassFilter.h.

19 {}

Member Function Documentation

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

Definition at line 100 of file HLTMuonTrackMassFilter.cc.

References edm::ConfigurationDescriptions::add(), and edm::ParameterSetDescription::add().

100  {
102  desc.add<edm::InputTag>("BeamSpotTag",edm::InputTag("hltOfflineBeamSpot"));
103  desc.add<edm::InputTag>("CandTag",edm::InputTag("hltL3MuonCandidates"));
104  // desc.add<edm::InputTag>("TrackTag",edm::InputTag("hltMuTkMuJpsiTrackerMuonCands"));
105  desc.add<edm::InputTag>("TrackTag",edm::InputTag(""));
106  // desc.add<edm::InputTag>("PreviousCandTag",edm::InputTag("hltMu0TkMuJpsiTrackMassFiltered"));
107  desc.add<edm::InputTag>("PreviousCandTag",edm::InputTag(""));
108  desc.add<bool>("saveTags",false);
109  {
110  std::vector<double> temp1;
111  temp1.reserve(1);
112  temp1.push_back(2.8);
113  desc.add<std::vector<double> >("MinMasses",temp1);
114  }
115  {
116  std::vector<double> temp1;
117  temp1.reserve(1);
118  temp1.push_back(3.4);
119  desc.add<std::vector<double> >("MaxMasses",temp1);
120  }
121  desc.add<bool>("checkCharge",true);
122  desc.add<double>("MinTrackPt",0.0);
123  desc.add<double>("MinTrackP",3.0);
124  desc.add<double>("MaxTrackEta",999.0);
125  desc.add<double>("MaxTrackDxy",999.0);
126  desc.add<double>("MaxTrackDz",999.0);
127  desc.add<int>("MinTrackHits",5);
128  desc.add<double>("MaxTrackNormChi2",10000000000.0);
129  desc.add<double>("MaxDCAMuonTrack",99999.9);
130  desc.add<bool>("CutCowboys",false);
131  descriptions.add("hltMuonTrackMassFilter",desc);
132 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool HLTMuonTrackMassFilter::hltFilter ( edm::Event iEvent,
const edm::EventSetup iSetup,
trigger::TriggerFilterObjectWithRefs filterproduct 
)
privatevirtual

Implements HLTFilter.

Definition at line 135 of file HLTMuonTrackMassFilter.cc.

References trigger::TriggerFilterObjectWithRefs::addCollectionTag(), trigger::TriggerRefsCollections::addObject(), beamspotTag_, ClosestApproachInRPhi::calculate(), reco::LeafCandidate::charge(), checkCharge_, cutCowboys_, SiPixelRawToDigiRegional_cfi::deltaPhi, ClosestApproachInRPhi::distance(), reco::TrackBase::dxy(), reco::TrackBase::dz(), reco::LeafCandidate::eta(), spr::find(), edm::EventSetup::get(), edm::Event::getByLabel(), trigger::TriggerRefsCollections::getObjects(), i, reco::TransientTrack::impactPointTSCP(), edm::isDebugEnabled(), edm::Ref< C, T, F >::isNull(), TrajectoryStateClosestToPoint::isValid(), j, LogDebug, scaleCards::mass, max_DCAMuonTrack_, maxMasses_, maxTrackDxy_, maxTrackDz_, maxTrackEta_, maxTrackNormChi2_, minMasses_, minTrackHits_, minTrackP_, minTrackPt_, metsig::muon, muonTag_, reco::TrackBase::normalizedChi2(), reco::TrackBase::numberOfValidHits(), reco::LeafCandidate::p(), reco::LeafCandidate::p4(), pairMatched(), reco::LeafCandidate::phi(), prevCandTag_, reco::LeafCandidate::pt(), HLTFilter::saveTags(), ClosestApproachInRPhi::status(), TrajectoryStateClosestToPoint::theState(), reco::RecoChargedCandidate::track(), trackTag_, trigger::TriggerMuon, and trigger::TriggerTrack.

136 {
137  // The filter object
138  if (saveTags()) {
139  filterproduct.addCollectionTag(muonTag_);
140  filterproduct.addCollectionTag(trackTag_);
141  }
142  //
143  // Beamspot
144  //
145  edm::Handle<reco::BeamSpot> beamspotHandle;
146  iEvent.getByLabel(beamspotTag_,beamspotHandle);
147  reco::BeamSpot::Point beamspot(beamspotHandle->position());
148  // Needed for DCA calculation
149  edm::ESHandle<MagneticField> bFieldHandle;
150  iSetup.get<IdealMagneticFieldRecord>().get(bFieldHandle);
151  //
152  // Muons
153  //
155  iEvent.getByLabel(muonTag_,muonHandle);
156  //
157  // Tracks
158  //
160  iEvent.getByLabel(trackTag_,trackHandle);
161  //
162  // Muons from previous filter
163  //
165  iEvent.getByLabel(prevCandTag_,prevCandHandle);
166  std::vector<reco::RecoChargedCandidateRef> prevMuonRefs;
167  prevCandHandle->getObjects(trigger::TriggerMuon,prevMuonRefs);
168  std::vector<reco::RecoChargedCandidateRef> prevTrackRefs;
169  prevCandHandle->getObjects(trigger::TriggerTrack,prevTrackRefs);
170  bool checkPrevTracks = prevTrackRefs.size()==prevMuonRefs.size();
171 // LogDebug("HLTMuonTrackMassFilter") << "#previous track refs = " << prevTrackRefs.size();
172  //
173  // access to muons and selection according to configuration
174  // if the previous candidates are taken from a muon+track
175  // quarkonia filter we rely on the fact that only the muons
176  // are flagged as TriggerMuon
177  //
178  std::vector<reco::RecoChargedCandidateRef> selectedMuonRefs;
179  selectedMuonRefs.reserve(muonHandle->size());
180 // std::vector<size_t> prevMuonIndices;
181 // std::ostringstream stream1;
182  for ( unsigned int i=0; i<muonHandle->size(); ++i ) {
183  // Ref
184  reco::RecoChargedCandidateRef muonRef(muonHandle,i);
185 // stream1 << "Checking muon with q / pt / p / eta = "
186 // << muonRef->charge() << " " << muonRef->pt() << " "
187 // << muonRef->p() << " " << muonRef->eta() << "\n";
188  // passed previous filter?
189  if ( find(prevMuonRefs.begin(),prevMuonRefs.end(),muonRef)==
190  prevMuonRefs.end() ) continue;
191 // prevMuonIndices.push_back(find(prevMuonRefs.begin(),prevMuonRefs.end(),muonRef)-
192 // prevMuonRefs.begin());
193  // keep muon
194 // stream1 << "... accepted as #" << selectedMuonRefs.size() << "\n";
195  selectedMuonRefs.push_back(muonRef);
196  }
197 // LogDebug("HLTMuonTrackMassFilter") << stream1.str();
198  //
199  // access to tracks and selection according to configuration
200  //
201  std::vector<reco::RecoChargedCandidateRef> selectedTrackRefs;
202  selectedTrackRefs.reserve(trackHandle->size());
203 // std::ostringstream stream2;
204  for ( unsigned int i=0; i<trackHandle->size(); ++i ) {
205  // validity of REF
206  reco::RecoChargedCandidateRef trackRef(trackHandle,i);
207  const reco::RecoChargedCandidate& trackCand = *trackRef;
208 // stream2 << "Checking track with q / pt / p / eta = "
209 // << trackCand.charge() << " " << trackCand.pt() << " "
210 // << trackCand.p() << " " << trackCand.eta() << "\n";
211  // cuts on the momentum
212  if ( trackCand.pt()<minTrackPt_ || trackCand.p()<minTrackP_ ||
213  fabs(trackCand.eta())>maxTrackEta_ ) continue;
214  if ( trackCand.track().isNull() ) continue;
215  // cuts on track quality
216  const reco::Track& track = *trackCand.track();
217 // stream2 << "... with dxy / dz / #hits / chi2 = "
218 // << track.dxy(beamspot) << " "
219 // << track.dz(beamspot) << " "
220 // << track.numberOfValidHits() << " "
221 // << track.normalizedChi2();
222  if ( fabs(track.dxy(beamspot))>maxTrackDxy_ ||
223  fabs(track.dz(beamspot))>maxTrackDz_ ||
225  track.normalizedChi2()>maxTrackNormChi2_ ) continue;
226  // keep track
227 // stream2 << "... accepted as #" << selectedTrackRefs.size() << "\n";
228  selectedTrackRefs.push_back(trackRef);
229  }
230 // LogDebug("HLTMuonTrackMassFilter") << stream2.str();
231  //
232  // combinations
233  //
234 // unsigned int nDz(0);
235  unsigned int nQ(0);
236  unsigned int nCowboy(0);
237  unsigned int nComb(0);
240 // std::ostringstream stream3;
241  for ( unsigned int im=0; im<selectedMuonRefs.size(); ++im ) {
242  const reco::RecoChargedCandidate& muon = *selectedMuonRefs[im];
243  int qMuon = muon.charge();
244  p4Muon = muon.p4();
245  for ( unsigned int it=0; it<selectedTrackRefs.size(); ++it ) {
246  const reco::RecoChargedCandidate& track = *selectedTrackRefs[it];
247 // stream3 << "Combination " << im << " / " << it << " with dz / q / mass = "
248 // << muon.track()->dz(beamspot)-track.track()->dz(beamspot) << " "
249 // << track.charge()+qMuon << " "
250 // << (p4Muon+track.p4()).mass() << "\n";
251 
252 // if ( fabs(muon.track()->dz(beamspot)-track.track()->dz(beamspot))>
253 // maxDzMuonTrack_ ) continue;
254 // ++nDz;
255  if ( checkCharge_ && track.charge()!=-qMuon ) continue;
256  ++nQ;
257 
259 
260  // DCA between the two muons
261 
262  reco::TrackRef tk1 = muon.track();
263  reco::TrackRef tk2 = track.track();
264 
265  reco::TransientTrack mu1TT(*tk1, &(*bFieldHandle));
266  reco::TransientTrack mu2TT(*tk2, &(*bFieldHandle));
267  TrajectoryStateClosestToPoint mu1TS = mu1TT.impactPointTSCP();
268  TrajectoryStateClosestToPoint mu2TS = mu2TT.impactPointTSCP();
269  if (mu1TS.isValid() && mu2TS.isValid()) {
271  cApp.calculate(mu1TS.theState(), mu2TS.theState());
272  if (!cApp.status() || cApp.distance() > max_DCAMuonTrack_) continue;
273  }
274 
276  // if cutting on cowboys reject muons that bend towards each other
277  if(cutCowboys_ && (qMuon*deltaPhi(p4Muon.phi(), track.phi()) > 0.)) continue;
278  ++nCowboy;
279 
280  if ( checkPrevTracks ) {
281  if ( !pairMatched(prevMuonRefs,prevTrackRefs,
282  selectedMuonRefs[im],
283  selectedTrackRefs[it]) ) continue;
284  }
285  double mass = (p4Muon+track.p4()).mass();
286  for ( unsigned int j=0; j<minMasses_.size(); ++j ) {
287  if ( mass>minMasses_[j] && mass<maxMasses_[j] ) {
288  ++nComb;
289  filterproduct.addObject(trigger::TriggerMuon,selectedMuonRefs[im]);
290  filterproduct.addObject(trigger::TriggerTrack,selectedTrackRefs[it]);
291 // stream3 << "... accepted\n";
292  break;
293  }
294  }
295  }
296  }
297 // LogDebug("HLTMuonTrackMassFilter") << stream3.str();
298 
299 
300  if ( edm::isDebugEnabled() ) {
301  std::ostringstream stream;
302  stream << "Total number of combinations = "
303 // << selectedMuonRefs.size()*selectedTrackRefs.size() << " , after dz " << nDz
304  << " , after charge " << nQ << " , after cutCowboy " << nCowboy << " , after mass " << nComb << std::endl;
305  stream << "Found " << nComb << " jpsi candidates with # / mass / q / pt / eta" << std::endl;
306  std::vector<reco::RecoChargedCandidateRef> muRefs;
307  std::vector<reco::RecoChargedCandidateRef> tkRefs;
308  filterproduct.getObjects(trigger::TriggerMuon,muRefs);
309  filterproduct.getObjects(trigger::TriggerTrack,tkRefs);
313  if ( muRefs.size()==tkRefs.size() ) {
314  for ( unsigned int i=0; i<muRefs.size(); ++i ) {
315  p4Mu = muRefs[i]->p4();
316  p4Tk = tkRefs[i]->p4();
317  p4JPsi = p4Mu + p4Tk;
318  stream << " " << i << " "
319  << p4JPsi.M() << " "
320  << muRefs[i]->charge()+tkRefs[i]->charge() << " "
321  << p4JPsi.P() << " "
322  << p4JPsi.Eta() << "\n";
323  }
324  LogDebug("HLTMuonTrackMassFilter") << stream.str();
325  }
326  else {
327  LogDebug("HLTMuonTrackMassFilter") << "different sizes for muon and track containers!!!";
328  }
329  }
330 
331  return nComb>0;
332 }
#define LogDebug(id)
bool isDebugEnabled()
int i
Definition: DBlmapReader.cc:9
virtual double p() const
magnitude of momentum vector
double minTrackP_
track p cut
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
bool checkCharge_
check opposite charge?
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
Definition: TrackBase.h:111
const FreeTrajectoryState & theState() const
edm::InputTag trackTag_
RecoChargedCandidateCollection (tracks)
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:30
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
double maxTrackDz_
track lip cut w.r.t. beamspot
virtual double eta() const
momentum pseudorapidity
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref&lt;C&gt;)
double maxTrackNormChi2_
normalized chi2 of track
bool isNull() const
Checks for null.
Definition: Ref.h:247
std::vector< double > minMasses_
lower mass limits
virtual int charge() const
electric charge
edm::InputTag muonTag_
RecoChargedCandidateCollection (muons)
int j
Definition: DBlmapReader.cc:9
bool cutCowboys_
DCA between the two muons.
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:232
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
bool pairMatched(std::vector< reco::RecoChargedCandidateRef > &prevMuonRefs, std::vector< reco::RecoChargedCandidateRef > &prevTrackRefs, const reco::RecoChargedCandidateRef &muonRef, const reco::RecoChargedCandidateRef &trackRef) const
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:127
virtual bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb)
virtual double pt() const
transverse momentum
const T & get() const
Definition: EventSetup.h:55
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
int minTrackHits_
valid hits on track
virtual reco::TrackRef track() const
reference to a track
double minTrackPt_
track pt cut
bool saveTags() const
Definition: HLTFilter.h:45
tuple mass
Definition: scaleCards.py:27
std::vector< double > maxMasses_
higher mass limits
edm::InputTag prevCandTag_
filter objects from previous filter
double maxTrackDxy_
track tip cut w.r.t. beamspot
edm::InputTag beamspotTag_
beamspot used for quality cuts
virtual float distance() const
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:121
virtual double phi() const
momentum azimuthal angle
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:25
double maxTrackEta_
track |eta| cut
virtual bool status() const
bool HLTMuonTrackMassFilter::pairMatched ( std::vector< reco::RecoChargedCandidateRef > &  prevMuonRefs,
std::vector< reco::RecoChargedCandidateRef > &  prevTrackRefs,
const reco::RecoChargedCandidateRef muonRef,
const reco::RecoChargedCandidateRef trackRef 
) const
private

Definition at line 335 of file HLTMuonTrackMassFilter.cc.

References TrackingRecHit::all, i, iseed, edm::RefToBase< T >::isNull(), edm::Ref< C, T, F >::isNull(), TrajectorySeed::nHits(), and TrajectorySeed::recHits().

Referenced by hltFilter().

339 {
340  //
341  // check only if references to tracks are available
342  //
343  if ( prevTrackRefs.empty() ) return true;
344  //
345  // validity
346  //
347  if ( prevMuonRefs.size()!=prevTrackRefs.size() ) return false;
348  edm::RefToBase<TrajectorySeed> seedRef = trackRef->track()->seedRef();
349  if ( seedRef.isNull() ) return false;
350  //
351  // comparison by hits of TrajectorySeed of the new track
352  // with the previous candidate
353  //
354  TrajectorySeed::range seedHits = seedRef->recHits();
355  trackingRecHit_iterator prevTrackHitEnd;
358  for ( size_t i=0; i<prevMuonRefs.size(); ++i ) {
359  // identity of muon
360  if ( prevMuonRefs[i]!=muonRef ) continue;
361  // validity of Ref to previous track candidate
362  reco::TrackRef prevTrackRef = prevTrackRefs[i]->track();
363  if ( prevTrackRef.isNull() ) continue;
364  // if the references are the same then found and return true otherwise compare by hits
365  if (prevTrackRef==trackRef->track()) return true;
366  // same #hits
367  if ( seedRef->nHits()!=prevTrackRef->recHitsSize() ) continue;
368  // hit-by-hit comparison based on the sharesInput method
369  iseed = seedHits.first;
370  iprev = prevTrackRef->recHitsBegin();
371  prevTrackHitEnd = prevTrackRef->recHitsEnd();
372  bool identical(true);
373  for ( ; iseed!=seedHits.second&&iprev!=prevTrackHitEnd; ++iseed,++iprev ) {
374  if ( (*iseed).isValid()!=(**iprev).isValid() ||
375  !(*iseed).sharesInput(&**iprev,TrackingRecHit::all) ) {
376  // terminate loop over hits on first mismatch
377  identical = false;
378  break;
379  }
380  }
381  // if seed and previous track candidates are identical : return success
382  if ( identical ) return true;
383  }
384  // no match found
385  return false;
386 }
int i
Definition: DBlmapReader.cc:9
bool isNull() const
Checks for null.
Definition: RefToBase.h:270
bool isNull() const
Checks for null.
Definition: Ref.h:247
recHitContainer::const_iterator const_iterator
std::pair< const_iterator, const_iterator > range
int iseed
Definition: AMPTWrapper.h:124
range recHits() const
unsigned int nHits() const

Member Data Documentation

edm::InputTag HLTMuonTrackMassFilter::beamspotTag_
private

beamspot used for quality cuts

Definition at line 30 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

bool HLTMuonTrackMassFilter::checkCharge_
private

check opposite charge?

Definition at line 36 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

bool HLTMuonTrackMassFilter::cutCowboys_
private

DCA between the two muons.

if true, reject muon-track pairs that bend towards each other

Definition at line 46 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter().

double HLTMuonTrackMassFilter::max_DCAMuonTrack_
private

Definition at line 45 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter().

std::vector<double> HLTMuonTrackMassFilter::maxMasses_
private

higher mass limits

Definition at line 35 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

double HLTMuonTrackMassFilter::maxTrackDxy_
private

track tip cut w.r.t. beamspot

Definition at line 40 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

double HLTMuonTrackMassFilter::maxTrackDz_
private

track lip cut w.r.t. beamspot

Definition at line 41 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

double HLTMuonTrackMassFilter::maxTrackEta_
private

track |eta| cut

Definition at line 39 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

double HLTMuonTrackMassFilter::maxTrackNormChi2_
private

normalized chi2 of track

Definition at line 43 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

std::vector<double> HLTMuonTrackMassFilter::minMasses_
private

lower mass limits

Definition at line 34 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

int HLTMuonTrackMassFilter::minTrackHits_
private

valid hits on track

Definition at line 42 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

double HLTMuonTrackMassFilter::minTrackP_
private

track p cut

Definition at line 38 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

double HLTMuonTrackMassFilter::minTrackPt_
private

track pt cut

Definition at line 37 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

edm::InputTag HLTMuonTrackMassFilter::muonTag_
private

RecoChargedCandidateCollection (muons)

Definition at line 31 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

edm::InputTag HLTMuonTrackMassFilter::prevCandTag_
private

filter objects from previous filter

Definition at line 33 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().

edm::InputTag HLTMuonTrackMassFilter::trackTag_
private

RecoChargedCandidateCollection (tracks)

Definition at line 32 of file HLTMuonTrackMassFilter.h.

Referenced by hltFilter(), and HLTMuonTrackMassFilter().