113 const string metname =
"Muon|RecoMuon|L3TkMuonProducer";
123 unsigned int maxI = tracks->size();
124 bool gotL3seeds =
false;
128 vector<TrackRef> orderedTrackTracks(maxI);
129 for (
unsigned int i = 0;
i !=
maxI;
i++)
131 LogDebug(metname) <<
"vector of L3 tracks before ordering:\n" <<
printvector(orderedTrackTracks);
133 sort(orderedTrackTracks.begin(), orderedTrackTracks.end(),
trackRefBypT);
134 LogDebug(metname) <<
"vector of L3 tracks after ordering:\n" <<
printvector(orderedTrackTracks);
136 for (
unsigned int i = 0;
i !=
maxI;
i++) {
140 vector<SeedRef> allPossibleOrderedLx;
142 allPossibleOrderedLx.push_back(l3seedRef);
143 LogDebug(metname) <<
"adding the seed ref: " << l3seedRef.id().id() <<
":" << l3seedRef.key()
144 <<
" for this tracker track: " << tk.
id().
id() <<
":" << tk.
key();
150 const edm::Provenance& seedsProv =
event.getProvenance(l3seedRef.id());
152 event.getByLabel(l3seedsTag, l3seeds);
154 LogDebug(metname) <<
"got seeds handle from: " << l3seedsTag;
157 for (
unsigned int iS = 0; iS != l3seeds->size(); ++iS) {
160 if (l3seedRef.key() == iS)
164 SeedRef thisSharedSeedRef(l3seeds, iS);
165 LogDebug(metname) <<
"shared seeds: \n" 168 <<
"\nadding ANOTHER seed ref: " << thisSharedSeedRef.id().id() <<
":" 169 << thisSharedSeedRef.key() <<
" for this tracker track: " << tk.
id().
id() <<
":" << tk.
key();
171 allPossibleOrderedLx.push_back(thisSharedSeedRef);
177 LogDebug(metname) <<
"list of possible Lx objects for tracker track: " << tk.
id().
id() <<
":" << tk.
key()
178 <<
" before ordering\n" 180 sort(allPossibleOrderedLx.begin(), allPossibleOrderedLx.end(),
seedRefBypT);
181 LogDebug(metname) <<
"list of possible Lx objects for tracker track: " << tk.
id().
id() <<
":" << tk.
key()
182 <<
" after ordering\n" 185 for (
unsigned int iL = 0; iL != allPossibleOrderedLx.size(); ++iL) {
186 SeedRef thisRef = allPossibleOrderedLx[iL];
188 LogDebug(metname) <<
"seed ref: " << thisRef.id().id() <<
":" << thisRef.key()
189 <<
" transcribe to pseudoref: " << ref.first <<
":" << ref.second;
190 LXtoL3sMap::iterator
f = LXtoL3s.find(ref);
191 if (f != LXtoL3s.end()) {
194 LogDebug(metname) <<
"this tracker track: " << tk.
id().
id() <<
":" << tk.
key() <<
" (" << tk->pt() <<
")" 195 <<
"\n cannot compete in pT with track: " << f->second.first.
id().
id() <<
":" 196 << f->second.first.key() <<
" (" << f->second.first->pt() <<
")" 197 <<
"\n already assigned to pseudo ref: " << ref.first <<
":" << ref.second
198 <<
" which corresponds to seedRef: " << f->second.second.id().id() <<
":" 199 << f->second.second.key();
203 LogDebug(metname) <<
"this tracker track: " << tk.
id().
id() <<
":" << tk.
key()
204 <<
" is assigned to pseudo ref: " << ref.first <<
":" << ref.second
205 <<
" which corresponds to seedRef: " << thisRef.id().id() <<
":" << thisRef.key();
206 LXtoL3s[ref] = std::make_pair(tk, thisRef);
214 auto outTracks = std::make_unique<TrackCollection>(LXtoL3s.size());
215 auto outTrackExtras = std::make_unique<TrackExtraCollection>(LXtoL3s.size());
217 auto outRecHits = std::make_unique<TrackingRecHitCollection>();
220 LogDebug(metname) <<
"reading the map to make " << LXtoL3s.size() <<
"products.";
222 LXtoL3sMap::iterator f = LXtoL3s.begin();
224 for (; f != LXtoL3s.end(); ++
f, ++
i) {
225 LogDebug(metname) <<
"copy the track over, and make ref to extra";
226 const Track& trk = *(f->second.first);
227 (*outTracks)[
i] =
Track(trk);
230 LogDebug(metname) <<
"copy the trackExtra too, and change the seedref";
243 seedRef->direction(),
246 LogDebug(metname) <<
"copy the hits too";
247 unsigned int iRH = 0;
249 outRecHits->push_back((*hit)->clone());
251 (*outTrackExtras)[
i].setHits(rHits, 0, iRH);
254 LogDebug(metname) <<
"made: " << outTracks->size() <<
" tracks, " << outTrackExtras->size() <<
" extras and " 255 << outRecHits->size() <<
" rechits.";
262 LogDebug(metname) <<
" Event loaded" 263 <<
"================================";
string printseed(const L3TkMuonProducer::SeedRef &s)
const std::string metname
bool innerOk() const
return true if the innermost hit is valid
edm::Ref< TrackExtraCollection > TrackExtraRef
persistent reference to a TrackExtra
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
std::map< pseudoRef, std::pair< reco::TrackRef, SeedRef > > LXtoL3sMap
static bool trackRefBypT(const reco::TrackRef &t1, const reco::TrackRef &t2)
static bool seedRefBypT(const SeedRef &s1, const SeedRef &s2)
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
edm::Ref< L3MuonTrajectorySeedCollection > SeedRef
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
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
std::pair< unsigned int, unsigned int > pseudoRef
edm::EDGetTokenT< reco::TrackCollection > trackToken_
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
pseudoRef makePseudoRef(const L3MuonTrajectorySeed &s)
edm::InputTag theL3CollectionLabel
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)
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.