51 uint16_t
detid =
id.det();
53 std::vector<const TrackingRecHit*> hits;
58 uint16_t subdet =
id.subdetId();
65 std::vector<const TrackingRecHit*> seg2D = hit.
recHits();
67 for (std::vector<const TrackingRecHit*>::const_iterator it = seg2D.begin(); it != seg2D.end(); ++it) {
68 std::vector<const TrackingRecHit*> hits1D = (*it)->recHits();
69 copy(hits1D.begin(), hits1D.end(), back_inserter(hits));
127 std::vector<bool> dummyVecBool;
128 return loadTracks(trajectories, event, dummyVecBool, instance, reallyDoSmoothing);
134 const string&
instance,
bool reallyDoSmoothing) {
138 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
152 auto_ptr<reco:: TrackToTrackMap> trackToTrackmap(
new reco::TrackToTrackMap(trackCollectionRefProd, trackUpdatedCollectionRefProd));
165 auto_ptr<vector<Trajectory> > trajectoryCollection(
new vector<Trajectory>);
168 if ( trajectories.empty() ) {
169 event.put(recHitCollection,instance);
170 event.put(trackExtraCollection,instance);
172 event.put(trajectoryCollection,instance);
176 event.put( trajTrackMap, instance );
179 event.put(trackToTrackmap);
180 event.put(updatedAtVtxTrackCollection,instance+
"UpdatedAtVtx");
188 LogTrace(metname) <<
"Create the collection of Tracks";
198 std::map<unsigned int, unsigned int> tjTkMap;
206 theTrackerRecHitBuilder.
product();
212 unsigned int tjCnt = 0;
213 for(TrajectoryContainer::const_iterator rawTrajectory = trajectories.begin();
214 rawTrajectory != trajectories.end(); ++rawTrajectory, ++tjCnt){
219 vector<Trajectory> trajectoriesSM =
theSmoother->trajectories(**rawTrajectory);
221 if(!trajectoriesSM.empty()) {
223 trajectory = trajectoriesSM.front();
227 LogInfo(metname)<<
"The trajectory has not been smoothed!"<<endl;
231 trajectoryCollection->push_back(trajectory);
239 reverse(transHits.begin(),transHits.end());
243 pair<bool,reco::Track> resultOfTrackExtrapAtPCA =
buildTrackAtPCA(trajectory, *beamSpot);
246 if(!resultOfTrackExtrapAtPCA.first) {
247 delete *rawTrajectory;
252 reco::Track &track = resultOfTrackExtrapAtPCA.second;
264 pair<bool,reco::Track> updateResult(
false,
reco::Track());
270 if(!updateResult.first) ++trackIndex;
274 updateResult.second.setExtra(trackExtraRef);
277 trackToTrackmap->insert(
reco::TrackRef(trackCollectionRefProd,trackIndex++),
278 reco::TrackRef(trackUpdatedCollectionRefProd,trackUpdatedIndex++));
283 unsigned int nHitsAdded = 0;
284 for (Trajectory::RecHitContainer::const_iterator recHit = transHits.begin(); recHit != transHits.end(); ++recHit) {
287 for (std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it) {
295 for (std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it) {
296 if unlikely(!updateResult.second.appendHitPattern(**it)){
301 recHitCollection->push_back( singleHit );
305 trackExtra.
setHits(recHitCollectionRefProd, recHitsIndex, nHitsAdded);
306 recHitsIndex +=nHitsAdded;
309 trackExtraCollection->push_back(trackExtra);
314 LogTrace(metname) <<
"Debug Track being loaded pt "<< track.
pt();
317 updatedAtVtxTrackCollection->push_back(updateResult.second);
322 delete *rawTrajectory;
324 if(tkBoolVec.size()>tjCnt) tkBoolVec[tjCnt] =
true;
331 LogTrace(metname) <<
"put the Collections in the event";
332 event.put(recHitCollection,instance);
333 event.put(trackExtraCollection,instance);
339 event.put(trackToTrackmap);
340 returnTrackHandle =
event.put(updatedAtVtxTrackCollection,instance+
"UpdatedAtVtx");
344 nonUpdatedHandle = returnTrackHandle;
354 for ( std::map<unsigned int, unsigned int>::iterator
i = tjTkMap.begin();
355 i != tjTkMap.end();
i++ ) {
356 trajTrackMap->insert(
edm::Ref<std::vector<Trajectory> >( rTrajs, (*i).first ),
359 event.put( trajTrackMap, instance );
362 return returnTrackHandle;
369 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
375 if ( muonCands.empty() ) {
380 event.put(recHitCollection);
381 event.put(trackExtraCollection);
382 event.put(trackCollection);
391 return event.put(trackLinksCollection);
397 for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it) {
398 LogDebug(metname) <<
"Loader glbSeedRef " << (*it)->trajectory()->seedRef().isNonnull();
399 if ((*it)->trackerTrajectory() )
LogDebug(metname) <<
" " <<
"tkSeedRef " << (*it)->trackerTrajectory()->seedRef().isNonnull();
401 combinedTrajs.push_back((*it)->trajectory());
405 if ((*it)->trackerTrajectory())
delete ((*it)->trackerTrajectory());
418 LogTrace(metname) <<
"Build combinedTracks";
419 std::vector<bool> combTksVec(combinedTrajs.size(),
false);
423 std::vector<bool> trackerTksVec(trackerTrajs.size(),
false);
425 LogTrace(metname) <<
"Build trackerTracks: "
426 << trackerTrajs.size();
429 for (TrajectoryContainer::iterator it = trackerTrajs.begin(); it != trackerTrajs.end(); ++it) {
434 LogTrace(metname) <<
"Set the final links in the MuonTrackLinks collection";
436 unsigned int candposition(0),
position(0), tkposition(0);
440 for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it, ++candposition) {
447 if(combTksVec[candposition]) {
462 trackLinksCollection->push_back(links);
473 LogWarning(metname)<<
"The MuonTrackLinkCollection is incomplete";
476 LogTrace(metname) <<
"put the MuonCollection in the event" <<
"\n";
478 return event.put(trackLinksCollection);
483 Event& event,
const std::vector<std::pair<Trajectory*,reco::TrackRef> >& miniMap,
Handle<reco::TrackCollection> const& trackHandle,
const string& instance,
bool reallyDoSmoothing) {
487 const string metname =
"Muon|RecoMuon|MuonTrackLoader|TevMuonTrackLoader";
497 auto_ptr<reco:: TrackToTrackMap> trackToTrackmap(
new reco::TrackToTrackMap(trackHandle,trackCollectionRefProd ));
510 auto_ptr<vector<Trajectory> > trajectoryCollection(
new vector<Trajectory>);
513 if ( trajectories.empty() ) {
514 event.put(recHitCollection,instance);
515 event.put(trackExtraCollection,instance);
517 event.put(trajectoryCollection,instance);
521 event.put( trajTrackMap, instance );
523 event.put(trackToTrackmap, instance);
527 LogTrace(metname) <<
"Create the collection of Tracks";
540 std::map<unsigned int, unsigned int> tjTkMap;
550 theTrackerRecHitBuilder.
product();
559 for(TrajectoryContainer::const_iterator rawTrajectory = trajectories.begin();
560 rawTrajectory != trajectories.end(); ++rawTrajectory){
563 std::vector<std::pair<Trajectory*,reco::TrackRef> >::const_iterator mmit;
564 for(mmit = miniMap.begin();mmit!=miniMap.end();++mmit){
565 if(mmit->first == *rawTrajectory) glbRef = mmit->second;
571 vector<Trajectory> trajectoriesSM =
theSmoother->trajectories(**rawTrajectory);
573 if(!trajectoriesSM.empty()) {
575 trajectory = trajectoriesSM.front();
578 LogInfo(metname)<<
"The trajectory has not been smoothed!"<<endl;
582 trajectoryCollection->push_back(trajectory);
590 reverse(transHits.begin(),transHits.end());
594 pair<bool,reco::Track> resultOfTrackExtrapAtPCA =
buildTrackAtPCA(trajectory, *beamSpot);
597 if(!resultOfTrackExtrapAtPCA.first) {
599 delete *rawTrajectory;
604 reco::Track &track = resultOfTrackExtrapAtPCA.second;
616 trackToTrackmap->insert(glbRef,
620 pair<bool,reco::Track> updateResult(
false,
reco::Track());
623 unsigned int nHitsAdded = 0;
624 for (Trajectory::RecHitContainer::const_iterator recHit = transHits.begin();
625 recHit != transHits.end(); ++recHit) {
629 for (std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it) {
637 for (std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it) {
638 if unlikely(!updateResult.second.appendHitPattern(**it)){
643 recHitCollection->push_back( singleHit );
647 trackExtra.
setHits(recHitCollectionRefProd, recHitsIndex, nHitsAdded);
648 recHitsIndex += nHitsAdded;
651 trackExtraCollection->push_back(trackExtra);
656 LogTrace(metname) <<
"Debug Track being loaded pt "<< track.
pt();
661 delete *rawTrajectory;
669 LogTrace(metname) <<
"put the Collections in the event";
670 event.put(recHitCollection,instance);
671 event.put(trackExtraCollection,instance);
678 event.put(trackToTrackmap,instance);
680 nonUpdatedHandle = returnTrackHandle;
690 for ( std::map<unsigned int, unsigned int>::iterator
i = tjTkMap.begin();
691 i != tjTkMap.end();
i++ ) {
692 trajTrackMap->insert(
edm::Ref<std::vector<Trajectory> >( rTrajs, (*i).first ),
695 event.put( trajTrackMap, instance );
698 return returnTrackHandle;
704 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
712 LogTrace(metname) <<
"Propagate to PCA...";
713 pair<bool,FreeTrajectoryState>
717 if(extrapolationResult.first)
718 ftsAtVtx = extrapolationResult.second;
721 LogInfo(metname) <<
"Track in the Tracker: taking the innermost state instead of the state at PCA";
726 LogInfo(metname) <<
"Propagation to PCA failed, taking the innermost state instead of the state at PCA";
729 LogInfo(metname) <<
"Stand Alone track: this track will be rejected";
730 return pair<bool,reco::Track>(
false,
reco::Track());
735 LogTrace(metname) <<
"TSOS after the extrapolation at vtx";
754 return pair<bool,reco::Track>(
true,track);
760 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
768 LogTrace(metname) <<
"Apply the vertex constraint";
771 if(!updateResult.first){
772 return pair<bool,reco::Track>(
false,
reco::Track());
775 LogTrace(metname) <<
"FTS after the vertex constraint";
792 return pair<bool,reco::Track>(
true,updatedTrack);
798 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
808 unsigned int innerId=0, outerId=0;
822 LogTrace(metname)<<
"oppositeToMomentum";
830 else LogError(metname)<<
"Wrong propagation direction!";
840 LogTrace(metname)<<
"The Global Muon outerMostMeasurementState is not compatible with the recHit detector! Setting outerMost postition to recHit position if recHit isValid: " << outerRecHit->isValid();
841 LogTrace(metname)<<
"From " << outerTSOSPos <<
" to " << hitPos;
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::BeamSpot > theBeamSpotToken
std::unique_ptr< TrajectorySmoother > theSmoother
T getUntrackedParameter(std::string const &, T const &) const
MuonTrackLoader(edm::ParameterSet ¶meterSet, edm::ConsumesCollector &iC, const MuonServiceProxy *service=0)
Constructor for the STA reco the args must be specify!
virtual int dimension() const =0
static bool isInside(const GlobalPoint &)
ConstRecHitPointer const & recHit() const
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
static PFTauRenderPlugin instance
const std::string metname
const CurvilinearTrajectoryError & curvilinearError() const
bool theSmoothTkTrackFlag
Global3DPoint GlobalPoint
std::vector< Track > TrackCollection
collection of Tracks
std::string theSmootherName
std::pair< bool, FreeTrajectoryState > propagate(const TrajectoryStateOnSurface &tsos, const reco::BeamSpot &beamSpot) const
Propagate the state to the 2D-PCA.
GlobalPoint globalPosition() const
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
static std::vector< const TrackingRecHit * > unpackHit(const TrackingRecHit &hit)
const Bounds & bounds() const
bool isNonnull() const
Checks for non-null.
TrackCharge charge() const
TrajectoryStateOnSurface geometricalInnermostState() const
const Plane & surface() const
The nominal surface of the GeomDet.
const CurvilinearTrajectoryError & curvilinearError() const
std::vector< MuonTrackLinks > MuonTrackLinksCollection
collection of MuonTrackLinks
MuonCandidate::CandidateContainer CandidateContainer
const MuonServiceProxy * theService
void setGlobalTrack(reco::TrackRef glb)
set the ref to combined track
std::string dumpFTS(const FreeTrajectoryState &fts) const
PropagationDirection const & direction() const
edm::InputTag theBeamSpotInputTag
double chi2() const
chi-squared of the fit
void setTrackerTrack(reco::TrackRef tk)
set the ref to tracker's track
std::string theTrackerRecHitBuilderName
std::pair< bool, FreeTrajectoryState > update(const reco::TransientTrack &track, const reco::BeamSpot &beamSpot) const
Applies the vertex constraint.
double ndof() const
number of degrees of freedom of the fit
virtual ~MuonTrackLoader()
Destructor.
TrajectoryMeasurement const & lastMeasurement() const
double pt() const
track transverse momentum
FreeTrajectoryState const * freeState(bool withErrors=true) const
GlobalVector momentum() const
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
virtual std::vector< const TrackingRecHit * > recHits() const =0
Access to component RecHits (if any)
tuple MuonUpdatorAtVertex
bool appendHitPattern(const TrackingRecHit &hit)
append a single hit to the HitPattern
edm::RefToBase< TrajectorySeed > seedRef(void) const
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
edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > > TrajTrackAssociationCollection
MuonUpdatorAtVertex * theUpdatorAtVtx
GlobalVector momentum() const
MuonCandidate::TrajectoryContainer TrajectoryContainer
GlobalPoint position() const
virtual TrackingRecHit * clone() const =0
GlobalPoint position() const
int ndof(bool bon=true) const
edm::OrphanHandle< reco::TrackCollection > loadTracks(const TrajectoryContainer &, edm::Event &, const std::string &="", bool=true)
Convert the trajectories into tracks and load the tracks in the event.
virtual TrackingRecHit const * hit() const
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
edm::OwnVector< TrackingRecHit > TrackingRecHitCollection
collection of TrackingRecHits
void setExtra(const TrackExtraRef &ref)
set reference to "extra" object
TrajectoryMeasurement const & firstMeasurement() const
const GlobalTrajectoryParameters & globalParameters() const
std::string theL2SeededTkLabel
Label for L2SeededTracks.
XYZVectorD XYZVector
spatial vector with cartesian internal representation
ConstRecHitContainer RecHitContainer
XYZPointD XYZPoint
point in space with cartesian internal representation
T const * product() const
reco::TrackExtra buildTrackExtra(const Trajectory &) const
void setSeedRef(const edm::RefToBase< TrajectorySeed > &seedRef)
std::pair< bool, reco::Track > buildTrackAtPCA(const Trajectory &trajectory, const reco::BeamSpot &) const
Build a track at the PCA WITHOUT any vertex constriant.
void setStandAloneTrack(reco::TrackRef sta)
set the ref to stand alone track
static int position[264][3]
const MuonServiceProxy * theService
TrajectoryStateOnSurface const & updatedState() const
DetId geographicalId() const
std::pair< bool, reco::Track > buildTrackUpdatedAtPCA(const reco::Track &trackAtPCA, const reco::BeamSpot &) const
Takes a track at the PCA and applies the vertex constriant.
ParameterSet const & parameterSet(Provenance const &provenance)
boost::remove_cv< typename boost::remove_reference< argument_type >::type >::type key_type