47 dtRadius_(matchParameters.getParameter<double>(
"DTradius")),
48 dtTightMatch(matchParameters.getParameter<bool>(
"TightMatchDT")),
49 cscTightMatch(matchParameters.getParameter<bool>(
"TightMatchCSC"))
72 vector<const DTRecSegment4D*> pointerTo4DSegments;
74 std::vector<TrackingRecHit const *> dtHits;
76 bool segments =
false;
80 if (!(*hit)->isValid())
continue;
81 if ( (*hit)->geographicalId().det() !=
DetId::Muon )
continue;
83 if ((*hit)->recHits().size())
84 if ((*(*hit)->recHits().begin())->
recHits().size()>1) segments =
true;
85 dtHits.push_back(*
hit);
93 double matchRatioPhi=0;
97 LocalPoint pointLocal = rechit->localPosition();
101 for(
auto hit = dtHits.begin();
hit != dtHits.end(); ++
hit) {
104 DetId idT = (*hit)->geographicalId();
105 if(!(rechit->geographicalId().rawId()==idT.
rawId()))
continue;
108 LocalPoint segLocal = (*hit)->localPosition();
109 if ((fabs(pointLocal.
x()-segLocal.
x())<ZCutParameter) &&
110 (fabs(pointLocal.
y()-segLocal.
y())<ZCutParameter))
111 pointerTo4DSegments.push_back(&(*rechit));
119 if(rechit->hasZed()) {
120 double countMuonDTHits = 0;
121 double countAgreeingHits=0;
125 nhitsZ = segmZ->
recHits().size();
131 for(
auto hit = dtHits.begin();
hit != dtHits.end(); ++
hit) {
133 if ( !(*hit)->isValid())
continue;
135 DetId idT = (*hit)->geographicalId();
139 LocalPoint pointLocal = (*hit)->localPosition();
141 if ((chamberSegIdT==dtDetIdHitT) && (dtDetLayerIdHitT.superlayer()==2)) countMuonDTHits++;
143 for (vector<DTRecHit1D>::const_iterator hiti=hits1d.begin(); hiti!=hits1d.end(); hiti++) {
145 if ( !hiti->isValid())
continue;
148 if(!(hiti->geographicalId().rawId()==idT.
rawId()))
continue;
154 if ((fabs(pointLocal.x()-segLocal.
x())<ZCutParameter) &&
155 (fabs(pointLocal.y()-segLocal.
y())<ZCutParameter))
160 matchRatioZ = countMuonDTHits == 0 ? 0 : countAgreeingHits/countMuonDTHits;
162 if (countAgreeingHits/nhitsZ>matchRatioZ) matchRatioZ=countAgreeingHits/nhitsZ;
165 if(rechit->hasPhi()) {
166 double countMuonDTHits = 0;
167 double countAgreeingHits=0;
171 segmPhi =
dynamic_cast<const DTRecSegment2D*
>(rechit->phiSegment());
172 nhitsPhi = segmPhi->
recHits().size();
178 for(
auto hit = dtHits.begin();
hit != dtHits.end(); ++
hit) {
180 if ( !(*hit)->isValid())
continue;
182 DetId idT = (*hit)->geographicalId();
186 LocalPoint pointLocal = (*hit)->localPosition();
188 if ((chamberSegIdT==dtDetIdHitT)&&((dtDetLayerIdHitT.superlayer()==1)||(dtDetLayerIdHitT.superlayer()==3)))
191 for (vector<DTRecHit1D>::const_iterator hiti=hits1d.begin(); hiti!=hits1d.end(); hiti++) {
193 if ( !hiti->isValid())
continue;
196 if(!(hiti->geographicalId().rawId()==idT.
rawId()))
continue;
203 if ((fabs(pointLocal.x()-segLocal.
x())<PhiCutParameter) &&
204 (fabs(pointLocal.y()-segLocal.
y())<PhiCutParameter))
209 matchRatioPhi = countMuonDTHits != 0 ? countAgreeingHits/countMuonDTHits : 0;
211 if (countAgreeingHits/nhitsPhi>matchRatioPhi) matchRatioPhi=countAgreeingHits/nhitsPhi;
215 if((matchRatioPhi>0.9)&&(matchRatioZ>0.9)) {
217 pointerTo4DSegments.push_back(&(*rechit));
220 if((matchRatioPhi>0.9 && nhitsPhi)||(matchRatioZ>0.9 && nhitsZ)) {
222 pointerTo4DSegments.push_back(&(*rechit));
228 return pointerTo4DSegments;
241 vector<const CSCSegment*> pointerToCSCSegments;
243 double matchRatioCSC=0;
245 double CSCXCut = 0.001;
246 double CSCYCut = 0.001;
247 double countMuonCSCHits = 0;
250 double CSCcountAgreeingHits=0;
252 if ( !segmentCSC->isValid())
continue;
255 const vector<CSCRecHit2D>& CSCRechits2D = segmentCSC->specificRecHits();
256 countMuonCSCHits = 0;
257 CSCDetId myChamber((*segmentCSC).geographicalId().rawId());
259 bool segments =
false;
262 if (!(*hitC)->isValid())
continue;
263 if ( (*hitC)->geographicalId().det() !=
DetId::Muon )
continue;
265 if (!(*hitC)->isValid())
continue;
266 if ( (*hitC)->recHits().size()>1) segments =
true;
269 DetId id = (*hitC)->geographicalId();
273 if(!(myChamber.rawId()==cscDetIdHit.
rawId()))
continue;
276 LocalPoint positionLocalCSC = (*hitC)->localPosition();
277 LocalPoint segLocalCSC = segmentCSC->localPosition();
278 if ((fabs(positionLocalCSC.
x()-segLocalCSC.
x())<CSCXCut) &&
279 (fabs(positionLocalCSC.
y()-segLocalCSC.
y())<CSCYCut))
280 pointerToCSCSegments.push_back(&(*segmentCSC));
284 if(!(cscDetIdHit.
ring()==myChamber.ring()))
continue;
285 if(!(cscDetIdHit.
station()==myChamber.station()))
continue;
286 if(!(cscDetIdHit.
endcap()==myChamber.endcap()))
continue;
287 if(!(cscDetIdHit.
chamber()==myChamber.chamber()))
continue;
291 LocalPoint positionLocalCSC = (*hitC)->localPosition();
293 for (vector<CSCRecHit2D>::const_iterator hiti=CSCRechits2D.begin(); hiti!=CSCRechits2D.end(); hiti++) {
295 if ( !hiti->isValid())
continue;
296 CSCDetId cscDetId((hiti->geographicalId()).rawId());
298 if ((*hitC)->geographicalId().rawId()!=(hiti->geographicalId()).rawId())
continue;
300 LocalPoint segLocalCSC = hiti->localPosition();
303 if((fabs(positionLocalCSC.
x()-segLocalCSC.
x())<CSCXCut) &&
304 (fabs(positionLocalCSC.
y()-segLocalCSC.
y())<CSCYCut)) {
305 CSCcountAgreeingHits++;
311 matchRatioCSC = countMuonCSCHits == 0 ? 0 : CSCcountAgreeingHits/countMuonCSCHits;
313 if ((matchRatioCSC>0.9) && ((countMuonCSCHits>1) || !
cscTightMatch)) pointerToCSCSegments.push_back(&(*segmentCSC));
317 return pointerToCSCSegments;
330 vector<const RPCRecHit*> pointerToRPCRecHits;
331 double RPCCut = 0.001;
335 if ( !hitRPC->isValid())
continue;
337 RPCDetId myChamber((*hitRPC).geographicalId().rawId());
338 LocalPoint posLocalRPC = hitRPC->localPosition();
342 if (!(*hitC)->isValid())
continue;
343 if ( (*hitC)->geographicalId().det() !=
DetId::Muon )
continue;
345 if (!(*hitC)->isValid())
continue;
348 DetId id = (*hitC)->geographicalId();
351 if (rpcDetIdHit!=myChamber)
continue;
352 LocalPoint posLocalMuon = (*hitC)->localPosition();
356 if((fabs(posLocalMuon.
x()-posLocalRPC.x())<RPCCut)) {
363 if (matched) pointerToRPCRecHits.push_back(&(*hitRPC));
366 return pointerToRPCRecHits;
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
edm::EDGetTokenT< RPCRecHitCollection > rpcRecHitsToken
MuonSegmentMatcher(const edm::ParameterSet &, edm::ConsumesCollector &iC)
constructor with Parameter Set and MuonServiceProxy
std::vector< const CSCSegment * > matchCSC(const reco::Track &muon, const edm::Event &event)
edm::InputTag RPCHitTags_
uint32_t rawId() const
get the raw id
virtual std::vector< const TrackingRecHit * > recHits() const
Access to component RecHits (if any)
edm::EDGetTokenT< CSCSegmentCollection > allSegmentsCSCToken
edm::InputTag DTSegmentTags_
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::vector< DTRecHit1D > specificRecHits() const
Access to specific components.
edm::InputTag CSCSegmentTags_
std::vector< const RPCRecHit * > matchRPC(const reco::Track &muon, const edm::Event &event)
virtual ~MuonSegmentMatcher()
destructor
edm::EDGetTokenT< DTRecSegment4DCollection > dtRecHitsToken
std::vector< const DTRecSegment4D * > matchDT(const reco::Track &muon, const edm::Event &event)
perform the matching
DetId geographicalId() const
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.