CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
MuonTrackLoader Class Reference

#include <MuonTrackLoader.h>

Public Types

typedef
MuonCandidate::CandidateContainer 
CandidateContainer
 
typedef
MuonCandidate::TrajectoryContainer 
TrajectoryContainer
 

Public Member Functions

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. More...
 
edm::OrphanHandle
< reco::TrackCollection
loadTracks (const TrajectoryContainer &, edm::Event &, std::vector< bool > &, const std::string &="", bool=true)
 Convert the trajectories into tracks and load the tracks in the event. More...
 
edm::OrphanHandle
< reco::TrackCollection
loadTracks (const TrajectoryContainer &, edm::Event &, const std::vector< std::pair< Trajectory *, reco::TrackRef > > &, edm::Handle< reco::TrackCollection > const &trackHandle, const std::string &="", bool=true)
 Convert the trajectories into tracks and load the tracks in the event. More...
 
edm::OrphanHandle
< reco::MuonTrackLinksCollection
loadTracks (const CandidateContainer &, edm::Event &)
 Convert the trajectories into tracks and load the tracks in the event. More...
 
 MuonTrackLoader (edm::ParameterSet &parameterSet, edm::ConsumesCollector &iC, const MuonServiceProxy *service=0)
 Constructor for the STA reco the args must be specify! More...
 
virtual ~MuonTrackLoader ()
 Destructor. More...
 

Private Member Functions

std::pair< bool, reco::TrackbuildTrackAtPCA (const Trajectory &trajectory, const reco::BeamSpot &) const
 Build a track at the PCA WITHOUT any vertex constriant. More...
 
reco::TrackExtra buildTrackExtra (const Trajectory &) const
 
std::pair< bool, reco::TrackbuildTrackUpdatedAtPCA (const reco::Track &trackAtPCA, const reco::BeamSpot &) const
 Takes a track at the PCA and applies the vertex constriant. More...
 

Static Private Member Functions

static std::vector< const
TrackingRecHit * > 
unpackHit (const TrackingRecHit &hit)
 

Private Attributes

TkClonerImpl hitCloner
 
bool theAllowNoVtxFlag
 
edm::InputTag theBeamSpotInputTag
 
edm::EDGetTokenT< reco::BeamSpottheBeamSpotToken
 
std::string theL2SeededTkLabel
 Label for L2SeededTracks. More...
 
bool thePutTkTrackFlag
 
const MuonServiceProxytheService
 
std::unique_ptr
< TrajectorySmoother
theSmoother
 
std::string theSmootherName
 
bool theSmoothingStep
 
bool theSmoothTkTrackFlag
 
std::string theTrackerRecHitBuilderName
 
bool theTrajectoryFlag
 
bool theUpdatingAtVtx
 
MuonUpdatorAtVertextheUpdatorAtVtx
 

Detailed Description

Class to load the tracks in the event, it provide some common functionalities both for all the RecoMuon producers.

Author
R. Bellan - INFN Torino ricca.nosp@m.rdo..nosp@m.bella.nosp@m.n@ce.nosp@m.rn.ch

Class to load the product in the event

Author
R. Bellan - INFN Torino ricca.nosp@m.rdo..nosp@m.bella.nosp@m.n@ce.nosp@m.rn.ch

Definition at line 39 of file MuonTrackLoader.h.

Member Typedef Documentation

Definition at line 43 of file MuonTrackLoader.h.

Definition at line 42 of file MuonTrackLoader.h.

Constructor & Destructor Documentation

MuonTrackLoader::MuonTrackLoader ( edm::ParameterSet parameterSet,
edm::ConsumesCollector iC,
const MuonServiceProxy service = 0 
)

Constructor for the STA reco the args must be specify!

Definition at line 87 of file MuonTrackLoader.cc.

References edm::ConsumesCollector::consumes(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), MuonUpdatorAtVertex_cff::MuonUpdatorAtVertex, AlCaHLTBitMon_QueryRunRegistry::string, theAllowNoVtxFlag, theBeamSpotInputTag, theBeamSpotToken, theL2SeededTkLabel, thePutTkTrackFlag, theSmootherName, theSmoothingStep, theSmoothTkTrackFlag, theTrackerRecHitBuilderName, theTrajectoryFlag, theUpdatingAtVtx, and theUpdatorAtVtx.

87  :
88  theService(service){
89 
90 
91  // option to do or not the smoothing step.
92  // the trajectories which are passed to the track loader are supposed to be non-smoothed
93  theSmoothingStep = parameterSet.getParameter<bool>("DoSmoothing");
95  theSmootherName = parameterSet.getParameter<string>("Smoother");
96 
97  theTrackerRecHitBuilderName = parameterSet.getParameter<std::string>("TTRHBuilder");
98 
99  // update at vertex
100  theUpdatingAtVtx = parameterSet.getParameter<bool>("VertexConstraint");
101 
102  // beam spot input tag
103  theBeamSpotInputTag = parameterSet.getParameter<edm::InputTag>("beamSpot");
105 
106 
107  // Flag to put the trajectory into the event
108  theTrajectoryFlag = parameterSet.getUntrackedParameter<bool>("PutTrajectoryIntoEvent",true);
109 
110  theL2SeededTkLabel = parameterSet.getUntrackedParameter<string>("MuonSeededTracksInstance",string());
111 
112  ParameterSet updatorPar = parameterSet.getParameter<ParameterSet>("MuonUpdatorAtVertexParameters");
113  theUpdatorAtVtx = new MuonUpdatorAtVertex(updatorPar,service);
114 
115  thePutTkTrackFlag = parameterSet.getUntrackedParameter<bool>("PutTkTrackIntoEvent",false);
116  theSmoothTkTrackFlag = parameterSet.getUntrackedParameter<bool>("SmoothTkTrack",false);
117  theAllowNoVtxFlag = parameterSet.getUntrackedParameter<bool>("AllowNoVertex",false);
118 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::BeamSpot > theBeamSpotToken
T getUntrackedParameter(std::string const &, T const &) const
std::string theSmootherName
edm::InputTag theBeamSpotInputTag
std::string theTrackerRecHitBuilderName
MuonUpdatorAtVertex * theUpdatorAtVtx
std::string theL2SeededTkLabel
Label for L2SeededTracks.
const MuonServiceProxy * theService
MuonTrackLoader::~MuonTrackLoader ( )
virtual

Destructor.

Definition at line 120 of file MuonTrackLoader.cc.

References theUpdatorAtVtx.

120  {
121  if(theUpdatorAtVtx) delete theUpdatorAtVtx;
122 }
MuonUpdatorAtVertex * theUpdatorAtVtx

Member Function Documentation

pair< bool, reco::Track > MuonTrackLoader::buildTrackAtPCA ( const Trajectory trajectory,
const reco::BeamSpot beamSpot 
) const
private

Build a track at the PCA WITHOUT any vertex constriant.

Definition at line 702 of file MuonTrackLoader.cc.

References FreeTrajectoryState::charge(), Trajectory::chiSquared(), FreeTrajectoryState::curvilinearError(), debug, MuonPatternRecoDumper::dumpFTS(), TrajectoryStateOnSurface::freeState(), Trajectory::geometricalInnermostState(), TrajectoryStateOnSurface::globalPosition(), TrackerBounds::isInside(), LogTrace, FreeTrajectoryState::momentum(), ndof, Trajectory::ndof(), AlCaHLTBitMon_ParallelJobs::p, FreeTrajectoryState::position(), MuonUpdatorAtVertex::propagate(), theAllowNoVtxFlag, theService, theUpdatorAtVtx, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

702  {
703 
704  const string metname = "Muon|RecoMuon|MuonTrackLoader";
705 
707 
708  // FIXME: check the prop direction
709  TrajectoryStateOnSurface innerTSOS = trajectory.geometricalInnermostState();
710 
711  // This is needed to extrapolate the tsos at vertex
712  LogTrace(metname) << "Propagate to PCA...";
713  pair<bool,FreeTrajectoryState>
714  extrapolationResult = theUpdatorAtVtx->propagate(innerTSOS, beamSpot);
715  FreeTrajectoryState ftsAtVtx;
716 
717  if(extrapolationResult.first)
718  ftsAtVtx = extrapolationResult.second;
719  else{
720  if(TrackerBounds::isInside(innerTSOS.globalPosition())){
721  LogInfo(metname) << "Track in the Tracker: taking the innermost state instead of the state at PCA";
722  ftsAtVtx = *innerTSOS.freeState();
723  }
724  else{
725  if ( theAllowNoVtxFlag ) {
726  LogInfo(metname) << "Propagation to PCA failed, taking the innermost state instead of the state at PCA";
727  ftsAtVtx = *innerTSOS.freeState();
728  } else {
729  LogInfo(metname) << "Stand Alone track: this track will be rejected";
730  return pair<bool,reco::Track>(false,reco::Track());
731  }
732  }
733  }
734 
735  LogTrace(metname) << "TSOS after the extrapolation at vtx";
736  LogTrace(metname) << debug.dumpFTS(ftsAtVtx);
737 
738  GlobalPoint pca = ftsAtVtx.position();
739  math::XYZPoint persistentPCA(pca.x(),pca.y(),pca.z());
740  GlobalVector p = ftsAtVtx.momentum();
741  math::XYZVector persistentMomentum(p.x(),p.y(),p.z());
742 
743  bool bon = true;
744  if(fabs(theService->magneticField()->inTesla(GlobalPoint(0,0,0)).z()) < 0.01) bon=false;
745  double ndof = trajectory.ndof(bon);
746 
747  reco::Track track(trajectory.chiSquared(),
748  ndof,
749  persistentPCA,
750  persistentMomentum,
751  ftsAtVtx.charge(),
752  ftsAtVtx.curvilinearError());
753 
754  return pair<bool,reco::Track>(true,track);
755 }
static bool isInside(const GlobalPoint &)
const std::string metname
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
T y() const
Definition: PV3DBase.h:63
std::pair< bool, FreeTrajectoryState > propagate(const TrajectoryStateOnSurface &tsos, const reco::BeamSpot &beamSpot) const
Propagate the state to the 2D-PCA.
GlobalPoint globalPosition() const
TrackCharge charge() const
TrajectoryStateOnSurface geometricalInnermostState() const
Definition: Trajectory.cc:155
const CurvilinearTrajectoryError & curvilinearError() const
std::string dumpFTS(const FreeTrajectoryState &fts) const
FreeTrajectoryState const * freeState(bool withErrors=true) const
T z() const
Definition: PV3DBase.h:64
MuonUpdatorAtVertex * theUpdatorAtVtx
GlobalVector momentum() const
#define LogTrace(id)
GlobalPoint position() const
int ndof(bool bon=true) const
Definition: Trajectory.cc:78
#define debug
Definition: HDRShower.cc:19
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
float chiSquared() const
Definition: Trajectory.h:252
const MuonServiceProxy * theService
T x() const
Definition: PV3DBase.h:62
reco::TrackExtra MuonTrackLoader::buildTrackExtra ( const Trajectory trajectory) const
private

Definition at line 796 of file MuonTrackLoader.cc.

References alongMomentum, Surface::bounds(), TrajectoryStateOnSurface::curvilinearError(), Trajectory::direction(), Trajectory::firstMeasurement(), TrajectoryStateOnSurface::globalParameters(), Bounds::inside(), Trajectory::lastMeasurement(), LogTrace, GlobalTrajectoryParameters::momentum(), oppositeToMomentum, AlCaHLTBitMon_ParallelJobs::p, GlobalTrajectoryParameters::position(), TrajectoryMeasurement::recHit(), Trajectory::seedRef(), GeomDet::surface(), theService, GeomDet::toLocal(), TrajectoryMeasurement::updatedState(), findQualityFiles::v, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

796  {
797 
798  const string metname = "Muon|RecoMuon|MuonTrackLoader";
799 
800  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
801 
802  // put the collection of TrackingRecHit in the event
803 
804  // sets the outermost and innermost TSOSs
805  // FIXME: check it!
806  TrajectoryStateOnSurface outerTSOS;
807  TrajectoryStateOnSurface innerTSOS;
808  unsigned int innerId=0, outerId=0;
810  DetId outerDetId;
811 
812  if (trajectory.direction() == alongMomentum) {
813  LogTrace(metname)<<"alongMomentum";
814  outerTSOS = trajectory.lastMeasurement().updatedState();
815  innerTSOS = trajectory.firstMeasurement().updatedState();
816  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
817  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
818  outerRecHit = trajectory.lastMeasurement().recHit();
819  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
820  }
821  else if (trajectory.direction() == oppositeToMomentum) {
822  LogTrace(metname)<<"oppositeToMomentum";
823  outerTSOS = trajectory.firstMeasurement().updatedState();
824  innerTSOS = trajectory.lastMeasurement().updatedState();
825  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
826  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
827  outerRecHit = trajectory.firstMeasurement().recHit();
828  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
829  }
830  else LogError(metname)<<"Wrong propagation direction!";
831 
832  const GeomDet *outerDet = theService->trackingGeometry()->idToDet(outerDetId);
833  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
834  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
835 
836 
837  GlobalPoint hitPos = (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position() ;
838 
839  if(!inside) {
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;
842  }
843 
844 
845  //build the TrackExtra
846  GlobalPoint v = (inside) ? outerTSOSPos : hitPos ;
847  GlobalVector p = outerTSOS.globalParameters().momentum();
848  math::XYZPoint outpos( v.x(), v.y(), v.z() );
849  math::XYZVector outmom( p.x(), p.y(), p.z() );
850 
851  v = innerTSOS.globalParameters().position();
852  p = innerTSOS.globalParameters().momentum();
853  math::XYZPoint inpos( v.x(), v.y(), v.z() );
854  math::XYZVector inmom( p.x(), p.y(), p.z() );
855 
856  reco::TrackExtra trackExtra(outpos, outmom, true, inpos, inmom, true,
857  outerTSOS.curvilinearError(), outerId,
858  innerTSOS.curvilinearError(), innerId,
859  trajectory.direction(),trajectory.seedRef());
860 
861  return trackExtra;
862 
863 }
ConstRecHitPointer const & recHit() const
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
const std::string metname
const CurvilinearTrajectoryError & curvilinearError() const
T y() const
Definition: PV3DBase.h:63
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:67
const Bounds & bounds() const
Definition: Surface.h:128
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:40
PropagationDirection const & direction() const
Definition: Trajectory.cc:118
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:181
T z() const
Definition: PV3DBase.h:64
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
edm::RefToBase< TrajectorySeed > seedRef(void) const
Definition: Trajectory.h:306
#define LogTrace(id)
Definition: DetId.h:18
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:194
const GlobalTrajectoryParameters & globalParameters() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
ConstRecHitContainer RecHitContainer
Definition: Trajectory.h:48
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
const MuonServiceProxy * theService
TrajectoryStateOnSurface const & updatedState() const
T x() const
Definition: PV3DBase.h:62
pair< bool, reco::Track > MuonTrackLoader::buildTrackUpdatedAtPCA ( const reco::Track trackAtPCA,
const reco::BeamSpot beamSpot 
) const
private

Takes a track at the PCA and applies the vertex constriant.

Definition at line 758 of file MuonTrackLoader.cc.

References FreeTrajectoryState::charge(), reco::TrackBase::chi2(), FreeTrajectoryState::curvilinearError(), debug, MuonPatternRecoDumper::dumpFTS(), LogTrace, FreeTrajectoryState::momentum(), reco::TrackBase::ndof(), AlCaHLTBitMon_ParallelJobs::p, FreeTrajectoryState::position(), theService, theUpdatorAtVtx, MuonUpdatorAtVertex::update(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

758  {
759 
760  const string metname = "Muon|RecoMuon|MuonTrackLoader";
762 
763  // build the transient track
764  reco::TransientTrack transientTrack(track,
765  &*theService->magneticField(),
766  theService->trackingGeometry());
767 
768  LogTrace(metname) << "Apply the vertex constraint";
769  pair<bool,FreeTrajectoryState> updateResult = theUpdatorAtVtx->update(transientTrack,beamSpot);
770 
771  if(!updateResult.first){
772  return pair<bool,reco::Track>(false,reco::Track());
773  }
774 
775  LogTrace(metname) << "FTS after the vertex constraint";
776  FreeTrajectoryState &ftsAtVtx = updateResult.second;
777 
778  LogTrace(metname) << debug.dumpFTS(ftsAtVtx);
779 
780  GlobalPoint pca = ftsAtVtx.position();
781  math::XYZPoint persistentPCA(pca.x(),pca.y(),pca.z());
782  GlobalVector p = ftsAtVtx.momentum();
783  math::XYZVector persistentMomentum(p.x(),p.y(),p.z());
784 
785  reco::Track updatedTrack(track.chi2(),
786  track.ndof(),
787  persistentPCA,
788  persistentMomentum,
789  ftsAtVtx.charge(),
790  ftsAtVtx.curvilinearError());
791 
792  return pair<bool,reco::Track>(true,updatedTrack);
793 }
const std::string metname
T y() const
Definition: PV3DBase.h:63
TrackCharge charge() const
const CurvilinearTrajectoryError & curvilinearError() const
std::string dumpFTS(const FreeTrajectoryState &fts) const
std::pair< bool, FreeTrajectoryState > update(const reco::TransientTrack &track, const reco::BeamSpot &beamSpot) const
Applies the vertex constraint.
T z() const
Definition: PV3DBase.h:64
MuonUpdatorAtVertex * theUpdatorAtVtx
GlobalVector momentum() const
#define LogTrace(id)
GlobalPoint position() const
#define debug
Definition: HDRShower.cc:19
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
const MuonServiceProxy * theService
T x() const
Definition: PV3DBase.h:62
edm::OrphanHandle<reco::TrackCollection> MuonTrackLoader::loadTracks ( const TrajectoryContainer ,
edm::Event ,
const std::string &  = "",
bool  = true 
)

Convert the trajectories into tracks and load the tracks in the event.

Referenced by MuonTrackFinder::load(), and loadTracks().

edm::OrphanHandle<reco::TrackCollection> MuonTrackLoader::loadTracks ( const TrajectoryContainer ,
edm::Event ,
std::vector< bool > &  ,
const std::string &  = "",
bool  = true 
)

Convert the trajectories into tracks and load the tracks in the event.

edm::OrphanHandle<reco::TrackCollection> MuonTrackLoader::loadTracks ( const TrajectoryContainer ,
edm::Event ,
const std::vector< std::pair< Trajectory *, reco::TrackRef > > &  ,
edm::Handle< reco::TrackCollection > const &  trackHandle,
const std::string &  = "",
bool  = true 
)

Convert the trajectories into tracks and load the tracks in the event.

OrphanHandle< reco::MuonTrackLinksCollection > MuonTrackLoader::loadTracks ( const CandidateContainer muonCands,
edm::Event event 
)

Convert the trajectories into tracks and load the tracks in the event.

Definition at line 366 of file MuonTrackLoader.cc.

References edm::OrphanHandleBase::isValid(), electronStore::links, loadTracks(), LogDebug, LogTrace, position, reco::MuonTrackLinks::setGlobalTrack(), reco::MuonTrackLinks::setStandAloneTrack(), reco::MuonTrackLinks::setTrackerTrack(), theL2SeededTkLabel, thePutTkTrackFlag, theSmoothTkTrackFlag, and HLT_25ns14e33_v3_cff::trackCollection.

367  {
368 
369  const string metname = "Muon|RecoMuon|MuonTrackLoader";
370 
371  // the muon collection, it will be loaded in the event
372  auto_ptr<reco::MuonTrackLinksCollection> trackLinksCollection(new reco::MuonTrackLinksCollection());
373 
374  // don't waste any time...
375  if ( muonCands.empty() ) {
376  auto_ptr<reco::TrackExtraCollection> trackExtraCollection(new reco::TrackExtraCollection() );
377  auto_ptr<TrackingRecHitCollection> recHitCollection(new TrackingRecHitCollection() );
378  auto_ptr<reco::TrackCollection> trackCollection( new reco::TrackCollection() );
379 
380  event.put(recHitCollection);
381  event.put(trackExtraCollection);
382  event.put(trackCollection);
383 
384  //need to also put the tracker tracks collection if requested
385  if(thePutTkTrackFlag){
386  //will take care of putting nothing in the event but the empty collection
387  TrajectoryContainer trackerTrajs;
388  loadTracks(trackerTrajs, event, theL2SeededTkLabel, theSmoothTkTrackFlag);
389  }
390 
391  return event.put(trackLinksCollection);
392  }
393 
394  // get combined Trajectories
395  TrajectoryContainer combinedTrajs;
396  TrajectoryContainer trackerTrajs;
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();
400 
401  combinedTrajs.push_back((*it)->trajectory());
402  if ( thePutTkTrackFlag ) trackerTrajs.push_back((*it)->trackerTrajectory());
403 
404  else {
405  if ((*it)->trackerTrajectory()) delete ((*it)->trackerTrajectory());
406  }
407 
408  // // Create the links between sta and tracker tracks
409  // reco::MuonTrackLinks links;
410  // links.setStandAloneTrack((*it)->muonTrack());
411  // links.setTrackerTrack((*it)->trackerTrack());
412  // trackLinksCollection->push_back(links);
413  // delete *it;
414  }
415 
416  // create the TrackCollection of combined Trajectories
417  // FIXME: could this be done one track at a time in the previous loop?
418  LogTrace(metname) << "Build combinedTracks";
419  std::vector<bool> combTksVec(combinedTrajs.size(), false);
420  OrphanHandle<reco::TrackCollection> combinedTracks = loadTracks(combinedTrajs, event, combTksVec);
421 
423  std::vector<bool> trackerTksVec(trackerTrajs.size(), false);
424  if(thePutTkTrackFlag) {
425  LogTrace(metname) << "Build trackerTracks: "
426  << trackerTrajs.size();
427  trackerTracks = loadTracks(trackerTrajs, event, trackerTksVec, theL2SeededTkLabel, theSmoothTkTrackFlag);
428  } else {
429  for (TrajectoryContainer::iterator it = trackerTrajs.begin(); it != trackerTrajs.end(); ++it) {
430  if(*it) delete *it;
431  }
432  }
433 
434  LogTrace(metname) << "Set the final links in the MuonTrackLinks collection";
435 
436  unsigned int candposition(0), position(0), tkposition(0);
437  //reco::TrackCollection::const_iterator glIt = combinedTracks->begin(),
438  // glEnd = combinedTracks->end();
439 
440  for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it, ++candposition) {
441 
442  // The presence of the global track determines whether to fill the MuonTrackLinks or not
443  // N.B. We are assuming here that the global tracks in "combinedTracks"
444  // have the same order as the muon candidates in "muonCands"
445  // (except for possible missing tracks), which should always be the case...
446  //if( glIt == glEnd ) break;
447  if(combTksVec[candposition]) {
448  reco::TrackRef combinedTR(combinedTracks, position++);
449  //++glIt;
450 
451  // Create the links between sta and tracker tracks
453  links.setStandAloneTrack((*it)->muonTrack());
454  links.setTrackerTrack((*it)->trackerTrack());
455  links.setGlobalTrack(combinedTR);
456 
457  if(thePutTkTrackFlag && trackerTksVec[candposition]) {
458  reco::TrackRef trackerTR(trackerTracks, tkposition++);
459  links.setTrackerTrack(trackerTR);
460  }
461 
462  trackLinksCollection->push_back(links);
463  }
464 
465  else { // if no global track, still increment the tracker-track counter when appropriate
466  if(thePutTkTrackFlag && trackerTksVec[candposition]) tkposition++;
467  }
468 
469  delete *it;
470  }
471 
472  if( thePutTkTrackFlag && trackerTracks.isValid() && !(combinedTracks->size() > 0 && trackerTracks->size() > 0 ) )
473  LogWarning(metname)<<"The MuonTrackLinkCollection is incomplete";
474 
475  // put the MuonCollection in the event
476  LogTrace(metname) << "put the MuonCollection in the event" << "\n";
477 
478  return event.put(trackLinksCollection);
479 }
#define LogDebug(id)
const std::string metname
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:13
std::vector< MuonTrackLinks > MuonTrackLinksCollection
collection of MuonTrackLinks
Definition: MuonFwd.h:22
#define LogTrace(id)
MuonCandidate::TrajectoryContainer TrajectoryContainer
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.
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:11
edm::OwnVector< TrackingRecHit > TrackingRecHitCollection
collection of TrackingRecHits
std::string theL2SeededTkLabel
Label for L2SeededTracks.
static int position[264][3]
Definition: ReadPGInfo.cc:509
std::vector< const TrackingRecHit * > MuonTrackLoader::unpackHit ( const TrackingRecHit hit)
staticprivate

Definition at line 47 of file MuonTrackLoader.cc.

References filterCSVwithJSON::copy, MuonSubdetId::CSC, cond::rpcobgas::detid, TrackingRecHit::dimension(), MuonSubdetId::DT, TrackingRecHit::geographicalId(), DetId::Muon, TrackingRecHit::recHits(), MuonSubdetId::RPC, and DetId::Tracker.

48 {
49  // get rec hit det id and rec hit type
50  DetId id = hit.geographicalId();
51  uint16_t detid = id.det();
52 
53  std::vector<const TrackingRecHit*> hits;
54 
55  if (detid == DetId::Tracker) {
56  hits.push_back(&hit);
57  } else if (detid == DetId::Muon) {
58  uint16_t subdet = id.subdetId();
59  if (subdet == (uint16_t) MuonSubdetId::DT) {
60  if (hit.dimension() == 1) { // DT rechit (granularity 2)
61  hits.push_back(&hit);
62  } else if (hit.dimension() > 1) { // 4D segment (granularity 0).
63  // Both 2 and 4 dim cases. MB4s have 2D, but formatted in 4D segment
64  // 4D --> 2D
65  std::vector<const TrackingRecHit*> seg2D = hit.recHits();
66  // load 1D hits (2D --> 1D)
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));
70  }
71  }
72  } else if (subdet == (uint16_t) MuonSubdetId::CSC) {
73  if (hit.dimension() == 2) { // CSC rechit (granularity 2)
74  hits.push_back(&hit);
75  } else if (hit.dimension() == 4) { // 4D segment (granularity 0)
76  // load 2D hits (4D --> 1D)
77  hits = hit.recHits();
78  }
79  } else if (subdet == (uint16_t) MuonSubdetId::RPC) {
80  hits.push_back(&hit);
81  }
82  }
83  return hits;
84 }
virtual int dimension() const =0
static const int CSC
Definition: MuonSubdetId.h:13
virtual std::vector< const TrackingRecHit * > recHits() const =0
Access to component RecHits (if any)
Definition: DetId.h:18
static const int RPC
Definition: MuonSubdetId.h:14
static const int DT
Definition: MuonSubdetId.h:12
DetId geographicalId() const

Member Data Documentation

TkClonerImpl MuonTrackLoader::hitCloner
private

Definition at line 95 of file MuonTrackLoader.h.

bool MuonTrackLoader::theAllowNoVtxFlag
private

Definition at line 105 of file MuonTrackLoader.h.

Referenced by buildTrackAtPCA(), and MuonTrackLoader().

edm::InputTag MuonTrackLoader::theBeamSpotInputTag
private

Definition at line 98 of file MuonTrackLoader.h.

Referenced by MuonTrackLoader().

edm::EDGetTokenT<reco::BeamSpot> MuonTrackLoader::theBeamSpotToken
private

Definition at line 99 of file MuonTrackLoader.h.

Referenced by MuonTrackLoader().

std::string MuonTrackLoader::theL2SeededTkLabel
private

Label for L2SeededTracks.

Definition at line 102 of file MuonTrackLoader.h.

Referenced by loadTracks(), and MuonTrackLoader().

bool MuonTrackLoader::thePutTkTrackFlag
private

Definition at line 103 of file MuonTrackLoader.h.

Referenced by loadTracks(), and MuonTrackLoader().

const MuonServiceProxy* MuonTrackLoader::theService
private

Definition at line 84 of file MuonTrackLoader.h.

Referenced by buildTrackAtPCA(), buildTrackExtra(), and buildTrackUpdatedAtPCA().

std::unique_ptr<TrajectorySmoother> MuonTrackLoader::theSmoother
private

Definition at line 94 of file MuonTrackLoader.h.

std::string MuonTrackLoader::theSmootherName
private

Definition at line 92 of file MuonTrackLoader.h.

Referenced by MuonTrackLoader().

bool MuonTrackLoader::theSmoothingStep
private

Definition at line 91 of file MuonTrackLoader.h.

Referenced by MuonTrackLoader().

bool MuonTrackLoader::theSmoothTkTrackFlag
private

Definition at line 104 of file MuonTrackLoader.h.

Referenced by loadTracks(), and MuonTrackLoader().

std::string MuonTrackLoader::theTrackerRecHitBuilderName
private

Definition at line 93 of file MuonTrackLoader.h.

Referenced by MuonTrackLoader().

bool MuonTrackLoader::theTrajectoryFlag
private

Definition at line 89 of file MuonTrackLoader.h.

Referenced by MuonTrackLoader().

bool MuonTrackLoader::theUpdatingAtVtx
private

Definition at line 86 of file MuonTrackLoader.h.

Referenced by MuonTrackLoader().

MuonUpdatorAtVertex* MuonTrackLoader::theUpdatorAtVtx
private