85 std::vector<bool> dummyVecBool;
86 return loadTracks(trajectories, event, dummyVecBool, instance, reallyDoSmoothing);
92 const string&
instance,
bool reallyDoSmoothing) {
96 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
123 auto_ptr<vector<Trajectory> > trajectoryCollection(
new vector<Trajectory>);
129 if ( trajectories.empty() ) {
130 event.put(recHitCollection,instance);
131 event.put(trackExtraCollection,instance);
133 event.put(trajectoryCollection,instance);
134 event.put( trajTrackMap, instance );
137 event.put(trackToTrackmap);
138 event.put(updatedAtVtxTrackCollection,instance+
"UpdatedAtVtx");
140 return event.put(trackCollection,instance);
146 LogTrace(metname) <<
"Create the collection of Tracks";
156 std::map<unsigned int, unsigned int> tjTkMap;
164 std::string theTrackerRecHitBuilderName(
"WithAngleAndTemplate");
167 std::string theTrackerRecHitBuilderName(
"hltESPTTRHBWithTrackAngle");
175 unsigned int tjCnt = 0;
176 for(TrajectoryContainer::const_iterator rawTrajectory = trajectories.begin();
177 rawTrajectory != trajectories.end(); ++rawTrajectory, ++tjCnt){
182 vector<Trajectory> trajectoriesSM =
theSmoother->trajectories(**rawTrajectory);
184 if(!trajectoriesSM.empty()) {
186 trajectory = trajectoriesSM.front();
190 LogInfo(metname)<<
"The trajectory has not been smoothed!"<<endl;
194 trajectoryCollection->push_back(trajectory);
202 reverse(transHits.begin(),transHits.end());
206 pair<bool,reco::Track> resultOfTrackExtrapAtPCA =
buildTrackAtPCA(trajectory, *beamSpot);
209 if(!resultOfTrackExtrapAtPCA.first) {
210 delete *rawTrajectory;
215 reco::Track &track = resultOfTrackExtrapAtPCA.second;
227 pair<bool,reco::Track> updateResult(
false,
reco::Track());
233 if(!updateResult.first) ++trackIndex;
237 updateResult.second.setExtra(trackExtraRef);
240 trackToTrackmap->insert(
reco::TrackRef(trackCollectionRefProd,trackIndex++),
241 reco::TrackRef(trackUpdatedCollectionRefProd,trackUpdatedIndex++));
246 for (Trajectory::RecHitContainer::const_iterator recHit = transHits.begin();
247 recHit != transHits.end(); ++recHit) {
250 if(
theUpdatingAtVtx && updateResult.first) updateResult.second.appendHitPattern(*singleHit);
251 recHitCollection->push_back( singleHit );
257 trackExtraCollection->push_back(trackExtra);
260 trackCollection->push_back(track);
262 LogTrace(metname) <<
"Debug Track being loaded pt "<< track.
pt();
265 updatedAtVtxTrackCollection->push_back(updateResult.second);
270 delete *rawTrajectory;
272 if(tkBoolVec.size()>tjCnt) tkBoolVec[tjCnt] =
true;
279 LogTrace(metname) <<
"put the Collections in the event";
280 event.put(recHitCollection,instance);
281 event.put(trackExtraCollection,instance);
286 nonUpdatedHandle =
event.put(trackCollection,instance);
287 event.put(trackToTrackmap);
288 returnTrackHandle =
event.put(updatedAtVtxTrackCollection,instance+
"UpdatedAtVtx");
291 returnTrackHandle =
event.put(trackCollection,instance);
292 nonUpdatedHandle = returnTrackHandle;
298 for ( std::map<unsigned int, unsigned int>::iterator
i = tjTkMap.begin();
299 i != tjTkMap.end();
i++ ) {
300 trajTrackMap->insert(
edm::Ref<std::vector<Trajectory> >( rTrajs, (*i).first ),
303 event.put( trajTrackMap, instance );
306 return returnTrackHandle;
313 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
319 if ( muonCands.empty() ) {
324 event.put(recHitCollection);
325 event.put(trackExtraCollection);
326 event.put(trackCollection);
335 return event.put(trackLinksCollection);
341 for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it) {
342 LogDebug(metname) <<
"Loader glbSeedRef " << (*it)->trajectory()->seedRef().isNonnull();
343 if ((*it)->trackerTrajectory() )
LogDebug(metname) <<
" " <<
"tkSeedRef " << (*it)->trackerTrajectory()->seedRef().isNonnull();
345 combinedTrajs.push_back((*it)->trajectory());
349 if ((*it)->trackerTrajectory())
delete ((*it)->trackerTrajectory());
362 LogTrace(metname) <<
"Build combinedTracks";
363 std::vector<bool> combTksVec(combinedTrajs.size(),
false);
367 std::vector<bool> trackerTksVec(trackerTrajs.size(),
false);
369 LogTrace(metname) <<
"Build trackerTracks: "
370 << trackerTrajs.size();
373 for (TrajectoryContainer::iterator it = trackerTrajs.begin(); it != trackerTrajs.end(); ++it) {
378 LogTrace(metname) <<
"Set the final links in the MuonTrackLinks collection";
380 unsigned int candposition(0),
position(0), tkposition(0);
384 for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it, ++candposition) {
391 if(combTksVec[candposition]) {
406 trackLinksCollection->push_back(links);
417 LogWarning(metname)<<
"The MuonTrackLinkCollection is incomplete";
420 LogTrace(metname) <<
"put the MuonCollection in the event" <<
"\n";
422 return event.put(trackLinksCollection);
427 Event& event,
const std::vector<std::pair<Trajectory*,reco::TrackRef> >& miniMap,
const string& instance,
bool reallyDoSmoothing) {
431 const string metname =
"Muon|RecoMuon|MuonTrackLoader|TevMuonTrackLoader";
454 auto_ptr<vector<Trajectory> > trajectoryCollection(
new vector<Trajectory>);
460 if ( trajectories.empty() ) {
461 event.put(recHitCollection,instance);
462 event.put(trackExtraCollection,instance);
464 event.put(trajectoryCollection,instance);
465 event.put( trajTrackMap, instance );
467 event.put(trackToTrackmap, instance);
468 return event.put(trackCollection,instance);
471 LogTrace(metname) <<
"Create the collection of Tracks";
484 std::map<unsigned int, unsigned int> tjTkMap;
492 std::string theTrackerRecHitBuilderName(
"WithAngleAndTemplate");
495 std::string theTrackerRecHitBuilderName(
"hltESPTTRHBWithTrackAngle");
502 for(TrajectoryContainer::const_iterator rawTrajectory = trajectories.begin();
503 rawTrajectory != trajectories.end(); ++rawTrajectory){
506 std::vector<std::pair<Trajectory*,reco::TrackRef> >::const_iterator mmit;
507 for(mmit = miniMap.begin();mmit!=miniMap.end();++mmit){
508 if(mmit->first == *rawTrajectory) glbRef = mmit->second;
514 vector<Trajectory> trajectoriesSM =
theSmoother->trajectories(**rawTrajectory);
516 if(!trajectoriesSM.empty()) {
518 trajectory = trajectoriesSM.front();
521 LogInfo(metname)<<
"The trajectory has not been smoothed!"<<endl;
525 trajectoryCollection->push_back(trajectory);
533 reverse(transHits.begin(),transHits.end());
537 pair<bool,reco::Track> resultOfTrackExtrapAtPCA =
buildTrackAtPCA(trajectory, *beamSpot);
540 if(!resultOfTrackExtrapAtPCA.first) {
542 delete *rawTrajectory;
547 reco::Track &track = resultOfTrackExtrapAtPCA.second;
559 trackToTrackmap->insert(glbRef,
563 pair<bool,reco::Track> updateResult(
false,
reco::Track());
566 for (Trajectory::RecHitContainer::const_iterator recHit = transHits.begin();
567 recHit != transHits.end(); ++recHit) {
570 if(
theUpdatingAtVtx && updateResult.first) updateResult.second.appendHitPattern( *singleHit);
571 recHitCollection->push_back( singleHit );
577 trackExtraCollection->push_back(trackExtra);
580 trackCollection->push_back(track);
582 LogTrace(metname) <<
"Debug Track being loaded pt "<< track.
pt();
587 delete *rawTrajectory;
595 LogTrace(metname) <<
"put the Collections in the event";
596 event.put(recHitCollection,instance);
597 event.put(trackExtraCollection,instance);
604 event.put(trackToTrackmap,instance);
605 returnTrackHandle =
event.put(trackCollection,instance);
606 nonUpdatedHandle = returnTrackHandle;
612 for ( std::map<unsigned int, unsigned int>::iterator
i = tjTkMap.begin();
613 i != tjTkMap.end();
i++ ) {
614 trajTrackMap->insert(
edm::Ref<std::vector<Trajectory> >( rTrajs, (*i).first ),
617 event.put( trajTrackMap, instance );
620 return returnTrackHandle;
626 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
634 LogTrace(metname) <<
"Propagate to PCA...";
635 pair<bool,FreeTrajectoryState>
639 if(extrapolationResult.first)
640 ftsAtVtx = extrapolationResult.second;
643 LogInfo(metname) <<
"Track in the Tracker: taking the innermost state instead of the state at PCA";
648 LogInfo(metname) <<
"Propagation to PCA failed, taking the innermost state instead of the state at PCA";
651 LogInfo(metname) <<
"Stand Alone track: this track will be rejected";
652 return pair<bool,reco::Track>(
false,
reco::Track());
657 LogTrace(metname) <<
"TSOS after the extrapolation at vtx";
667 double ndof = trajectory.
ndof(bon);
676 return pair<bool,reco::Track>(
true,track);
682 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
690 LogTrace(metname) <<
"Apply the vertex constraint";
693 if(!updateResult.first){
694 return pair<bool,reco::Track>(
false,
reco::Track());
697 LogTrace(metname) <<
"FTS after the vertex constraint";
714 return pair<bool,reco::Track>(
true,updatedTrack);
720 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
730 unsigned int innerId=0, outerId=0;
744 LogTrace(metname)<<
"oppositeToMomentum";
752 else LogError(metname)<<
"Wrong propagation direction!";
762 LogTrace(metname)<<
"The Global Muon outerMostMeasurementState is not compatible with the recHit detector! Setting outerMost postition to recHit position if recHit isValid: " << outerRecHit->isValid();
763 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!
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.
const Bounds & bounds() const
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
tuple MuonUpdatorAtVertex
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]
void appendHitPattern(const TrackingRecHit &hit)
const MuonServiceProxy * theService
TrajectoryStateOnSurface const & updatedState() const
boost::remove_cv< typename boost::remove_reference< argument_type >::type >::type key_type
bool isNonnull() const
Checks for non-null.
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)