27 LogTrace(
"Muon|RecoMuon|L3TkMuonProducer")<<
" constructor called";
31 trackToken_ = consumes<reco::TrackCollection>(theL3CollectionLabel);
32 produces<TrackCollection>();
33 produces<TrackExtraCollection>();
34 produces<TrackingRecHitCollection>();
51 LogTrace(
"Muon|RecoMuon|L3TkMuonProducer")<<
" L3TkMuonProducer destructor called";
56 if (s1.
nHits()==0 || s2.
nHits()==0)
return false;
65 if(i1_b->geographicalId() != i2_b->geographicalId())
return false;
67 for (i1=i1_b,i2=i2_b;i1!=i1_e && i2!=i2_e;++i1,++i2){
75 for (
unsigned int i=0;
i!=v.size();++
i) {
77 ss<<
"track with ref: "<<v[
i].id().id()<<
":"<<v[
i].key()
78 <<
" and pT: "<<v[
i]->pt()
79 <<
" with seedRef: "<<v[
i]->seedRef().id().id()<<
":"<<v[
i]->seedRef().key();
86 for (
unsigned int i=0;
i!=v.size();++
i){
88 ss<<
"seed ref: "<<v[
i].id().id()<<
":"<<v[
i].key();
89 if (v[
i]->l2Track().isNull())
90 ss<<
" and pT: "<<v[
i]->l1Particle()->pt()<<
" of L1: "<<v[
i]->l1Particle().id().id()<<
":"<<v[
i]->l1Particle().key();
92 ss<<
" and pT: "<<v[
i]->l2Track()->pt()<<
" of L2: "<<v[
i]->l2Track().id().id()<<
":"<<v[
i]->l2Track().key();
99 ss<<
" seed ref: "<<s.
id().
id()<<
":"<<s.
key()<<
" has "<< s->nHits()<<
"rechits";
102 for (;it!=r.second;++it)
103 ss<<
"\n detId: "<<it->geographicalId()<<
" position: "<<it->localPosition()<<
" and error: "<<it->localPositionError();
109 const string metname =
"Muon|RecoMuon|L3TkMuonProducer";
112 LogDebug(metname)<<
" Taking the L3/GLB muons: "<<theL3CollectionLabel.label();
114 event.getByToken(trackToken_,tracks);
119 unsigned int maxI = tracks->size();
120 bool gotL3seeds=
false;
124 vector<TrackRef> orderedTrackTracks(maxI);
126 LogDebug(metname)<<
"vector of L3 tracks before ordering:\n"<<
printvector(orderedTrackTracks);
128 sort(orderedTrackTracks.begin(),orderedTrackTracks.end(),trackRefBypT);
129 LogDebug(metname)<<
"vector of L3 tracks after ordering:\n"<<
printvector(orderedTrackTracks);
131 for (
unsigned int i=0;
i!=
maxI;
i++) {
135 vector<SeedRef> allPossibleOrderedLx;
137 allPossibleOrderedLx.push_back(l3seedRef);
138 LogDebug(metname)<<
"adding the seed ref: "<<l3seedRef.
id().
id()<<
":"<<l3seedRef.
key()<<
" for this tracker track: "<<tk.
id().
id()<<
":"<<tk.
key();
146 event.getByLabel(l3seedsTag, l3seeds);
148 LogDebug(metname)<<
"got seeds handle from: "<<l3seedsTag;
151 for (
unsigned int iS=0;iS!=l3seeds->size();++iS){
154 if (l3seedRef.
key()==iS)
continue;
156 if (sharedSeed(seed,thisSeed)){
157 SeedRef thisSharedSeedRef(l3seeds,iS);
159 <<
"\nadding ANOTHER seed ref: "<<thisSharedSeedRef.
id().
id()<<
":"<<thisSharedSeedRef.
key()<<
" for this tracker track: "<<tk.
id().
id()<<
":"<<tk.
key();
161 allPossibleOrderedLx.push_back(thisSharedSeedRef);
167 LogDebug(metname)<<
"list of possible Lx objects for tracker track: "<<tk.
id().
id()<<
":"<<tk.
key()<<
" before ordering\n"<<
printvector(allPossibleOrderedLx);
168 sort(allPossibleOrderedLx.begin(),allPossibleOrderedLx.end(),seedRefBypT);
169 LogDebug(metname)<<
"list of possible Lx objects for tracker track: "<<tk.
id().
id()<<
":"<<tk.
key()<<
" after ordering\n"<<
printvector(allPossibleOrderedLx);
171 for (
unsigned int iL=0;iL!=allPossibleOrderedLx.size();++iL){
172 SeedRef thisRef=allPossibleOrderedLx[iL];
174 LogDebug(metname)<<
"seed ref: "<<thisRef.
id().
id()<<
":"<<thisRef.
key()<<
" transcribe to pseudoref: "<<ref.first<<
":"<<ref.second;
175 LXtoL3sMap::iterator
f=LXtoL3s.find(ref);
176 if (f!=LXtoL3s.end()){
179 LogDebug(metname)<<
"this tracker track: "<<tk.
id().
id()<<
":"<<tk.
key()<<
" ("<< tk->pt()<<
")"
180 <<
"\n cannot compete in pT with track: "<<f->second.first.
id().
id()<<
":"<<f->second.first.key()<<
" ("<<f->second.first->pt()<<
")"
181 <<
"\n already assigned to pseudo ref: "<<ref.first<<
":"<<ref.second<<
" which corresponds to seedRef: "<<f->second.second.id().id()<<
":"<<f->second.second.key();
186 <<
" is assigned to pseudo ref: "<<ref.first<<
":"<<ref.second<<
" which corresponds to seedRef: "<<thisRef.
id().
id()<<
":"<<thisRef.
key();
187 LXtoL3s[ref] = std::make_pair(tk,thisRef);
196 std::auto_ptr<TrackCollection> outTracks(
new TrackCollection(LXtoL3s.size()));
202 LogDebug(metname)<<
"reading the map to make "<< LXtoL3s.size()<<
"products.";
204 LXtoL3sMap::iterator
f=LXtoL3s.begin();
206 for (;f!=LXtoL3s.end();++
f,++
i){
208 LogDebug(metname)<<
"copy the track over, and make ref to extra";
209 const Track & trk = *(f->second.first);
210 (*outTracks)[
i] =
Track(trk);
213 LogDebug(metname)<<
"copy the trackExtra too, and change the seedref";
224 LogDebug(metname)<<
"copy the hits too";
227 outRecHits->push_back((*hit)->clone());
229 (*outTrackExtras)[
i].setHits( rHits, 0, iRH);
232 LogDebug(metname)<<
"made: "<<outTracks->size()<<
" tracks, "<<outTrackExtras->size()<<
" extras and "<<outRecHits->size()<<
" rechits.";
236 event.put(outTracks);
237 event.put(outTrackExtras);
238 event.put(outRecHits);
240 <<
"================================";
PropagationDirection direction() const
T getParameter(std::string const &) const
std::pair< unsigned int, unsigned int > pseudoRef
string printseed(const L3TkMuonProducer::SeedRef &s)
const std::string metname
std::vector< Track > TrackCollection
collection of Tracks
bool innerOk() const
return true if the innermost hit is valid
edm::Ref< TrackExtraCollection > TrackExtraRef
persistent reference to a TrackExtra
std::string const & processName() const
key_type key() const
Accessor for product key.
std::string const & processName() const
const math::XYZPoint & outerPosition() const
position of the outermost hit
ProductID id() const
Accessor for product ID.
bool sharedSeed(const L3MuonTrajectorySeed &s1, const L3MuonTrajectorySeed &s2)
const math::XYZPoint & innerPosition() const
position of the innermost hit
virtual void produce(edm::Event &, const edm::EventSetup &) override
produce candidates
std::string const & moduleLabel() const
std::string const & productInstanceName() const
recHitContainer::const_iterator const_iterator
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
TypeID unwrappedTypeID() const
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
L3TkMuonProducer(const edm::ParameterSet &)
constructor with config
std::pair< const_iterator, const_iterator > range
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::map< pseudoRef, std::pair< reco::TrackRef, SeedRef > > LXtoL3sMap
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
edm::OwnVector< TrackingRecHit > TrackingRecHitCollection
collection of TrackingRecHits
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
bool outerOk() const
return true if the outermost hit is valid
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
std::string const & moduleLabel() const
virtual ~L3TkMuonProducer()
destructor
unsigned int nHits() const
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
std::string const & productInstanceName() const
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
string printvector(const vector< TrackRef > &v)
ParameterSet const & parameterSet(Provenance const &provenance)
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.