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));
125 std::vector<bool> dummyVecBool;
126 return loadTracks(trajectories, event, dummyVecBool, instance, reallyDoSmoothing);
132 const string&
instance,
bool reallyDoSmoothing) {
136 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
163 auto_ptr<vector<Trajectory> > trajectoryCollection(
new vector<Trajectory>);
169 if ( trajectories.empty() ) {
170 event.put(recHitCollection,instance);
171 event.put(trackExtraCollection,instance);
173 event.put(trajectoryCollection,instance);
174 event.put( trajTrackMap, instance );
177 event.put(trackToTrackmap);
178 event.put(updatedAtVtxTrackCollection,instance+
"UpdatedAtVtx");
180 return event.put(trackCollection,instance);
186 LogTrace(metname) <<
"Create the collection of Tracks";
196 std::map<unsigned int, unsigned int> tjTkMap;
204 std::string theTrackerRecHitBuilderName(
"WithAngleAndTemplate");
206 theTrackerRecHitBuilder.
product();
208 std::string theTrackerRecHitBuilderName(
"hltESPTTRHBWithTrackAngle");
216 unsigned int tjCnt = 0;
217 for(TrajectoryContainer::const_iterator rawTrajectory = trajectories.begin();
218 rawTrajectory != trajectories.end(); ++rawTrajectory, ++tjCnt){
223 vector<Trajectory> trajectoriesSM =
theSmoother->trajectories(**rawTrajectory);
225 if(!trajectoriesSM.empty()) {
227 trajectory = trajectoriesSM.front();
231 LogInfo(metname)<<
"The trajectory has not been smoothed!"<<endl;
235 trajectoryCollection->push_back(trajectory);
243 reverse(transHits.begin(),transHits.end());
247 pair<bool,reco::Track> resultOfTrackExtrapAtPCA =
buildTrackAtPCA(trajectory, *beamSpot);
250 if(!resultOfTrackExtrapAtPCA.first) {
251 delete *rawTrajectory;
256 reco::Track &track = resultOfTrackExtrapAtPCA.second;
268 pair<bool,reco::Track> updateResult(
false,
reco::Track());
274 if(!updateResult.first) ++trackIndex;
278 updateResult.second.setExtra(trackExtraRef);
281 trackToTrackmap->insert(
reco::TrackRef(trackCollectionRefProd,trackIndex++),
282 reco::TrackRef(trackUpdatedCollectionRefProd,trackUpdatedIndex++));
287 for (Trajectory::RecHitContainer::const_iterator recHit = transHits.begin(); recHit != transHits.end(); ++recHit) {
290 for (std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it) {
298 for (std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it) {
299 if unlikely(!updateResult.second.appendHitPattern(**it)){
304 recHitCollection->push_back( singleHit );
310 trackExtraCollection->push_back(trackExtra);
313 trackCollection->push_back(track);
315 LogTrace(metname) <<
"Debug Track being loaded pt "<< track.
pt();
318 updatedAtVtxTrackCollection->push_back(updateResult.second);
323 delete *rawTrajectory;
325 if(tkBoolVec.size()>tjCnt) tkBoolVec[tjCnt] =
true;
332 LogTrace(metname) <<
"put the Collections in the event";
333 event.put(recHitCollection,instance);
334 event.put(trackExtraCollection,instance);
339 nonUpdatedHandle =
event.put(trackCollection,instance);
340 event.put(trackToTrackmap);
341 returnTrackHandle =
event.put(updatedAtVtxTrackCollection,instance+
"UpdatedAtVtx");
344 returnTrackHandle =
event.put(trackCollection,instance);
345 nonUpdatedHandle = returnTrackHandle;
351 for ( std::map<unsigned int, unsigned int>::iterator
i = tjTkMap.begin();
352 i != tjTkMap.end();
i++ ) {
353 trajTrackMap->insert(
edm::Ref<std::vector<Trajectory> >( rTrajs, (*i).first ),
356 event.put( trajTrackMap, instance );
359 return returnTrackHandle;
366 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
372 if ( muonCands.empty() ) {
377 event.put(recHitCollection);
378 event.put(trackExtraCollection);
379 event.put(trackCollection);
388 return event.put(trackLinksCollection);
394 for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it) {
395 LogDebug(metname) <<
"Loader glbSeedRef " << (*it)->trajectory()->seedRef().isNonnull();
396 if ((*it)->trackerTrajectory() )
LogDebug(metname) <<
" " <<
"tkSeedRef " << (*it)->trackerTrajectory()->seedRef().isNonnull();
398 combinedTrajs.push_back((*it)->trajectory());
402 if ((*it)->trackerTrajectory())
delete ((*it)->trackerTrajectory());
415 LogTrace(metname) <<
"Build combinedTracks";
416 std::vector<bool> combTksVec(combinedTrajs.size(),
false);
420 std::vector<bool> trackerTksVec(trackerTrajs.size(),
false);
422 LogTrace(metname) <<
"Build trackerTracks: "
423 << trackerTrajs.size();
426 for (TrajectoryContainer::iterator it = trackerTrajs.begin(); it != trackerTrajs.end(); ++it) {
431 LogTrace(metname) <<
"Set the final links in the MuonTrackLinks collection";
433 unsigned int candposition(0),
position(0), tkposition(0);
437 for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it, ++candposition) {
444 if(combTksVec[candposition]) {
459 trackLinksCollection->push_back(links);
470 LogWarning(metname)<<
"The MuonTrackLinkCollection is incomplete";
473 LogTrace(metname) <<
"put the MuonCollection in the event" <<
"\n";
475 return event.put(trackLinksCollection);
480 Event& event,
const std::vector<std::pair<Trajectory*,reco::TrackRef> >& miniMap,
const string& instance,
bool reallyDoSmoothing) {
484 const string metname =
"Muon|RecoMuon|MuonTrackLoader|TevMuonTrackLoader";
507 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);
518 event.put( trajTrackMap, instance );
520 event.put(trackToTrackmap, instance);
521 return event.put(trackCollection,instance);
524 LogTrace(metname) <<
"Create the collection of Tracks";
537 std::map<unsigned int, unsigned int> tjTkMap;
545 std::string theTrackerRecHitBuilderName(
"WithAngleAndTemplate");
547 theTrackerRecHitBuilder.
product();
549 std::string theTrackerRecHitBuilderName(
"hltESPTTRHBWithTrackAngle");
556 for(TrajectoryContainer::const_iterator rawTrajectory = trajectories.begin();
557 rawTrajectory != trajectories.end(); ++rawTrajectory){
560 std::vector<std::pair<Trajectory*,reco::TrackRef> >::const_iterator mmit;
561 for(mmit = miniMap.begin();mmit!=miniMap.end();++mmit){
562 if(mmit->first == *rawTrajectory) glbRef = mmit->second;
568 vector<Trajectory> trajectoriesSM =
theSmoother->trajectories(**rawTrajectory);
570 if(!trajectoriesSM.empty()) {
572 trajectory = trajectoriesSM.front();
575 LogInfo(metname)<<
"The trajectory has not been smoothed!"<<endl;
579 trajectoryCollection->push_back(trajectory);
587 reverse(transHits.begin(),transHits.end());
591 pair<bool,reco::Track> resultOfTrackExtrapAtPCA =
buildTrackAtPCA(trajectory, *beamSpot);
594 if(!resultOfTrackExtrapAtPCA.first) {
596 delete *rawTrajectory;
601 reco::Track &track = resultOfTrackExtrapAtPCA.second;
613 trackToTrackmap->insert(glbRef,
617 pair<bool,reco::Track> updateResult(
false,
reco::Track());
620 for (Trajectory::RecHitContainer::const_iterator recHit = transHits.begin();
621 recHit != transHits.end(); ++recHit) {
625 for (std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it) {
633 for (std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it) {
634 if unlikely(!updateResult.second.appendHitPattern(**it)){
639 recHitCollection->push_back( singleHit );
645 trackExtraCollection->push_back(trackExtra);
648 trackCollection->push_back(track);
650 LogTrace(metname) <<
"Debug Track being loaded pt "<< track.
pt();
655 delete *rawTrajectory;
663 LogTrace(metname) <<
"put the Collections in the event";
664 event.put(recHitCollection,instance);
665 event.put(trackExtraCollection,instance);
672 event.put(trackToTrackmap,instance);
673 returnTrackHandle =
event.put(trackCollection,instance);
674 nonUpdatedHandle = returnTrackHandle;
680 for ( std::map<unsigned int, unsigned int>::iterator
i = tjTkMap.begin();
681 i != tjTkMap.end();
i++ ) {
682 trajTrackMap->insert(
edm::Ref<std::vector<Trajectory> >( rTrajs, (*i).first ),
685 event.put( trajTrackMap, instance );
688 return returnTrackHandle;
694 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
702 LogTrace(metname) <<
"Propagate to PCA...";
703 pair<bool,FreeTrajectoryState>
707 if(extrapolationResult.first)
708 ftsAtVtx = extrapolationResult.second;
711 LogInfo(metname) <<
"Track in the Tracker: taking the innermost state instead of the state at PCA";
716 LogInfo(metname) <<
"Propagation to PCA failed, taking the innermost state instead of the state at PCA";
719 LogInfo(metname) <<
"Stand Alone track: this track will be rejected";
720 return pair<bool,reco::Track>(
false,
reco::Track());
725 LogTrace(metname) <<
"TSOS after the extrapolation at vtx";
735 double ndof = trajectory.
ndof(bon);
744 return pair<bool,reco::Track>(
true,track);
750 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
758 LogTrace(metname) <<
"Apply the vertex constraint";
761 if(!updateResult.first){
762 return pair<bool,reco::Track>(
false,
reco::Track());
765 LogTrace(metname) <<
"FTS after the vertex constraint";
782 return pair<bool,reco::Track>(
true,updatedTrack);
788 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
798 unsigned int innerId=0, outerId=0;
812 LogTrace(metname)<<
"oppositeToMomentum";
820 else LogError(metname)<<
"Wrong propagation direction!";
830 LogTrace(metname)<<
"The Global Muon outerMostMeasurementState is not compatible with the recHit detector! Setting outerMost postition to recHit position if recHit isValid: " << outerRecHit->isValid();
831 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::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
edm::Ref< TrackingRecHitCollection > TrackingRecHitRef
persistent reference to a TrackingRecHit
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