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";
165 auto_ptr<vector<Trajectory> > trajectoryCollection(
new vector<Trajectory>);
171 if ( trajectories.empty() ) {
172 event.put(recHitCollection,instance);
173 event.put(trackExtraCollection,instance);
175 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;
350 for ( std::map<unsigned int, unsigned int>::iterator
i = tjTkMap.begin();
351 i != tjTkMap.end();
i++ ) {
352 trajTrackMap->insert(
edm::Ref<std::vector<Trajectory> >( rTrajs, (*i).first ),
355 event.put( trajTrackMap, instance );
358 return returnTrackHandle;
365 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
371 if ( muonCands.empty() ) {
376 event.put(recHitCollection);
377 event.put(trackExtraCollection);
378 event.put(trackCollection);
387 return event.put(trackLinksCollection);
393 for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it) {
394 LogDebug(metname) <<
"Loader glbSeedRef " << (*it)->trajectory()->seedRef().isNonnull();
395 if ((*it)->trackerTrajectory() )
LogDebug(metname) <<
" " <<
"tkSeedRef " << (*it)->trackerTrajectory()->seedRef().isNonnull();
397 combinedTrajs.push_back((*it)->trajectory());
401 if ((*it)->trackerTrajectory())
delete ((*it)->trackerTrajectory());
414 LogTrace(metname) <<
"Build combinedTracks";
415 std::vector<bool> combTksVec(combinedTrajs.size(),
false);
419 std::vector<bool> trackerTksVec(trackerTrajs.size(),
false);
421 LogTrace(metname) <<
"Build trackerTracks: "
422 << trackerTrajs.size();
425 for (TrajectoryContainer::iterator it = trackerTrajs.begin(); it != trackerTrajs.end(); ++it) {
430 LogTrace(metname) <<
"Set the final links in the MuonTrackLinks collection";
432 unsigned int candposition(0),
position(0), tkposition(0);
436 for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it, ++candposition) {
443 if(combTksVec[candposition]) {
458 trackLinksCollection->push_back(links);
469 LogWarning(metname)<<
"The MuonTrackLinkCollection is incomplete";
472 LogTrace(metname) <<
"put the MuonCollection in the event" <<
"\n";
474 return event.put(trackLinksCollection);
479 Event& event,
const std::vector<std::pair<Trajectory*,reco::TrackRef> >& miniMap,
const string& instance,
bool reallyDoSmoothing) {
483 const string metname =
"Muon|RecoMuon|MuonTrackLoader|TevMuonTrackLoader";
506 auto_ptr<vector<Trajectory> > trajectoryCollection(
new vector<Trajectory>);
512 if ( trajectories.empty() ) {
513 event.put(recHitCollection,instance);
514 event.put(trackExtraCollection,instance);
516 event.put(trajectoryCollection,instance);
517 event.put( trajTrackMap, instance );
519 event.put(trackToTrackmap, instance);
523 LogTrace(metname) <<
"Create the collection of Tracks";
536 std::map<unsigned int, unsigned int> tjTkMap;
546 theTrackerRecHitBuilder.
product();
555 for(TrajectoryContainer::const_iterator rawTrajectory = trajectories.begin();
556 rawTrajectory != trajectories.end(); ++rawTrajectory){
559 std::vector<std::pair<Trajectory*,reco::TrackRef> >::const_iterator mmit;
560 for(mmit = miniMap.begin();mmit!=miniMap.end();++mmit){
561 if(mmit->first == *rawTrajectory) glbRef = mmit->second;
567 vector<Trajectory> trajectoriesSM =
theSmoother->trajectories(**rawTrajectory);
569 if(!trajectoriesSM.empty()) {
571 trajectory = trajectoriesSM.front();
574 LogInfo(metname)<<
"The trajectory has not been smoothed!"<<endl;
578 trajectoryCollection->push_back(trajectory);
586 reverse(transHits.begin(),transHits.end());
590 pair<bool,reco::Track> resultOfTrackExtrapAtPCA =
buildTrackAtPCA(trajectory, *beamSpot);
593 if(!resultOfTrackExtrapAtPCA.first) {
595 delete *rawTrajectory;
600 reco::Track &track = resultOfTrackExtrapAtPCA.second;
612 trackToTrackmap->insert(glbRef,
616 pair<bool,reco::Track> updateResult(
false,
reco::Track());
619 unsigned int nHitsAdded = 0;
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 );
643 trackExtra.
setHits(recHitCollectionRefProd, recHitsIndex, nHitsAdded);
644 recHitsIndex += nHitsAdded;
647 trackExtraCollection->push_back(trackExtra);
652 LogTrace(metname) <<
"Debug Track being loaded pt "<< track.
pt();
657 delete *rawTrajectory;
665 LogTrace(metname) <<
"put the Collections in the event";
666 event.put(recHitCollection,instance);
667 event.put(trackExtraCollection,instance);
674 event.put(trackToTrackmap,instance);
676 nonUpdatedHandle = returnTrackHandle;
682 for ( std::map<unsigned int, unsigned int>::iterator
i = tjTkMap.begin();
683 i != tjTkMap.end();
i++ ) {
684 trajTrackMap->insert(
edm::Ref<std::vector<Trajectory> >( rTrajs, (*i).first ),
687 event.put( trajTrackMap, instance );
690 return returnTrackHandle;
696 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
704 LogTrace(metname) <<
"Propagate to PCA...";
705 pair<bool,FreeTrajectoryState>
709 if(extrapolationResult.first)
710 ftsAtVtx = extrapolationResult.second;
713 LogInfo(metname) <<
"Track in the Tracker: taking the innermost state instead of the state at PCA";
718 LogInfo(metname) <<
"Propagation to PCA failed, taking the innermost state instead of the state at PCA";
721 LogInfo(metname) <<
"Stand Alone track: this track will be rejected";
722 return pair<bool,reco::Track>(
false,
reco::Track());
727 LogTrace(metname) <<
"TSOS after the extrapolation at vtx";
737 double ndof = trajectory.
ndof(bon);
746 return pair<bool,reco::Track>(
true,track);
752 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
760 LogTrace(metname) <<
"Apply the vertex constraint";
763 if(!updateResult.first){
764 return pair<bool,reco::Track>(
false,
reco::Track());
767 LogTrace(metname) <<
"FTS after the vertex constraint";
784 return pair<bool,reco::Track>(
true,updatedTrack);
790 const string metname =
"Muon|RecoMuon|MuonTrackLoader";
800 unsigned int innerId=0, outerId=0;
814 LogTrace(metname)<<
"oppositeToMomentum";
822 else LogError(metname)<<
"Wrong propagation direction!";
832 LogTrace(metname)<<
"The Global Muon outerMostMeasurementState is not compatible with the recHit detector! Setting outerMost postition to recHit position if recHit isValid: " << outerRecHit->isValid();
833 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