50 theCategory(
"FastSimulation|Muons|FastTSGFromPropagation"),
84 if ( nls.empty() )
return;
88 bool usePredictedState =
false;
91 std::vector<TrajectoryMeasurement> alltm;
93 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
94 inl != nls.end(); inl++, ndesLayer++ ) {
95 if ( (*inl ==
nullptr) )
break;
98 if ( (!alltm.empty()) ) {
104 if ( alltm.empty() ) {
106 usePredictedState =
true;
110 if ( alltm.size() > 5 ) alltm.erase(alltm.begin() + 5, alltm.end());
114 std::vector<TrajectorySeedHitCandidate> outerHits;
117 bool isMatch =
false;
118 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
125 const auto & recHitCombination = (*recHitCombinations)[icomb];
126 if(recHitCombination.empty())
128 int32_t simTrackId = recHitCombination.back()->simTrackId(0);
129 const SimTrack & simtrack = (*simTracks)[simTrackId];
141 unsigned int outerId = 0;
142 for(
const auto & recHitRef : recHitCombination) {
146 if(
id > outerId ) outerId =
id;
149 if(
id > outerId ) outerId =
id;
152 for(
const auto & recHitRef : recHitCombination ) {
155 auto aTrackingRecHit = std::unique_ptr<TrackingRecHit>(theSeedHits.
hit()->
clone());
157 if( !recHit )
continue;
161 container.
push_back(recHit->hit()->clone());
171 result.push_back(ts);
180 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
189 const auto & recHitCombination = (*recHitCombinations)[icomb];
190 if(recHitCombination.empty())
192 int32_t simTrackId = recHitCombination.back()->simTrackId(0);
193 const SimTrack & simtrack = (*simTracks)[simTrackId];
205 unsigned int outerId = 0;
206 for(
const auto & recHitRef : recHitCombination ) {
210 if(
id > outerId ) outerId =
id;
213 if(
id > outerId ) outerId =
id;
216 for(
const auto & recHitRef : recHitCombination ) {
219 aTrackingRecHit = theSeedHits.
hit()->
clone();
221 if( !recHit )
continue;
225 container.
push_back(recHit->hit()->clone());
235 result.push_back(ts);
265 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
266 inl != nls.end(); inl++ ) {
268 if ( !result.empty() || *inl ==
nullptr ) {
271 std::vector<DetLayer::DetWithState> compatDets = (*inl)->compatibleDets(staState, *
propagator(), *
estimator());
273 if ( compatDets.empty() )
continue;
275 result.push_back(ts);
297 <<
"Possible choices are: discrete, fixed, matrix.\n" 298 <<
"Use discrete method" <<std::endl;
363 bool trackerGeomChanged =
false;
371 trackerGeomChanged =
true;
383 if ( staMuon.first && staMuon.first->isValid() ) {
385 innerTS = staMuon.first->firstMeasurement().updatedState();
388 innerTS = staMuon.first->lastMeasurement().updatedState();
410 result = fromInside(iniState);
435 std::vector<TrajectoryMeasurement>::iterator tmsend = std::remove_if(tms.begin(), tms.end(),
isInvalid());
436 tms.erase(tmsend, tms.end());
443 std::vector<TrajectoryMeasurement>
result;
446 if ( compatDets.empty() )
return result;
448 for (std::vector<DetLayer::DetWithState>::const_iterator idws = compatDets.begin(); idws != compatDets.end(); ++idws) {
449 if ( idws->second.isValid() && (idws->first) ) {
450 std::vector<TrajectoryMeasurement> tmptm =
457 result.insert(result.end(),tmptm.begin(), tmptm.end());
497 float pt = (staMuon.second)->
pt();
557 float localErrors[15];
559 for (
int i=0;
i<dim; ++
i) {
560 for (
int j=0; j<=
i; ++j) {
561 localErrors[k++] =
m(
i,j);
564 int surfaceSide =
static_cast<int>(ts.
surfaceSide());
std::vector< TrajectoryMeasurement > findMeasurements(const DetLayer *, const TrajectoryStateOnSurface &) const
look for measurements on the first compatible layer
edm::Handle< MeasurementTrackerEvent > theMeasTrackerEvent
edm::ESHandle< MeasurementTracker > theMeasTracker
std::unique_ptr< const TrajectoryStateUpdator > theUpdator
void rescaleError(double factor)
void setRecHitCombinationIndex(edm::OwnVector< T > &recHits, int32_t icomb)
const math::XYZVectorD & trackerSurfacePosition() const
T getParameter(std::string const &) const
double z0() const
z coordinate
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
FastTSGFromPropagation(const edm::ParameterSet &pset, edm::ConsumesCollector &iC)
constructor
edm::Handle< reco::BeamSpot > theBeamSpot
bool theUseVertexStateFlag
void adjust(FreeTrajectoryState &) const
adjust the error matrix of the FTS
unsigned long long theCacheId_MT
std::pair< const Trajectory *, reco::TrackRef > TrackCand
const LocalTrajectoryParameters & localParameters() const
const LayerMeasurements * tkLayerMeasurements() const
const GlobalTrajectoryParameters & parameters() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< edm::SimTrackContainer > theSimTrackCollectionToken_
edm::Handle< edm::SimTrackContainer > theSimTracks
const CurvilinearTrajectoryError & curvilinearError() const
std::string thePropagatorName
edm::ESHandle< GeometricSearchTracker > theTracker
GlobalPoint globalPosition() const
void validMeasurements(std::vector< TrajectoryMeasurement > &) const
select valid measurements
const MuonServiceProxy * theService
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
std::string theResetMethod
float charge() const
charge
const Plane & surface() const
The nominal surface of the GeomDet.
const CurvilinearTrajectoryError & curvilinearError() const
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const =0
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
const Chi2MeasurementEstimator * estimator() const
FastTrackerRecHit * clone() const override
uint32_t rawId() const
get the raw id
double theFlexErrorRescaling
void getRescalingFactor(const TrackCand &staMuon)
static const double pts[33]
edm::EDGetTokenT< MeasurementTrackerEvent > theMeasurementTrackerEventToken_
~FastTSGFromPropagation() override
destructor
const edm::ParameterSet theConfig
const SurfaceType & surface() const
bool passSelection(const TrajectoryStateOnSurface &) const
check some quantity and beam-spot compatibility and decide to continue
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
SurfaceSide surfaceSide() const
Position relative to material, defined relative to momentum vector.
FreeTrajectoryState const * freeState(bool withErrors=true) const
std::vector< TrajectoryMeasurement > findMeasurements_new(const DetLayer *, const TrajectoryStateOnSurface &) const
look for measurements on the first compatible layer (faster way)
unsigned int detId() const
TrajectoryStateOnSurface outerTkState(const TrackCand &) const
const AlgebraicSymMatrix55 & matrix() const
static void multiply(CurvilinearTrajectoryError &initial_error, const CurvilinearTrajectoryError &scale_error)
multiply term by term the two matrix
TrajectoryStateOnSurface innerState(const TrackCand &) const
LayerMeasurements theTkLayerMeasurements
const LocalTrajectoryError & localError() const
GlobalVector momentum() const
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
void trackerSeeds(const TrackCand &, const TrackingRegion &, const TrackerTopology *tTopo, std::vector< TrajectorySeed > &) override
generate seed(s) for a track
void init(const MuonServiceProxy *) override
initialize
void rescaleError(double factor)
const TrackerGeometry * theGeometry
double zDis(const TrajectoryStateOnSurface &tsos) const
const TrajectoryStateUpdator * updator() const
const GlobalTrajectoryParameters & globalParameters() const
std::unique_ptr< const DirectTrackerNavigation > theNavigation
const math::XYZTLorentzVectorD & trackerSurfaceMomentum() const
edm::ESHandle< Propagator > propagator() const
TrajectorySeed createSeed(const TrajectoryStateOnSurface &, const DetId &) const
create a hitless seed from a trajectory state
void stateOnDet(const TrajectoryStateOnSurface &ts, unsigned int detid, PTrajectoryStateOnDet &pts) const
A mere copy (without memory leak) of an existing tracking method.
edm::Handle< FastTrackerRecHitCombinationCollection > recHitCombinations
void setEvent(const edm::Event &) override
set an event
ESHandle< TrackerGeometry > geometry
GlobalVector globalMomentum() const
edm::EDGetTokenT< reco::BeamSpot > beamSpot_
static int position[264][3]
std::vector< FastTrackerRecHitCombination > FastTrackerRecHitCombinationCollection
const TrackerGeomDet * idToDet(DetId) const override
double theFixedErrorRescaling
std::unique_ptr< const Chi2MeasurementEstimator > theEstimator
double dxyDis(const TrajectoryStateOnSurface &tsos) const
edm::EDGetTokenT< FastTrackerRecHitCombinationCollection > recHitCombinationsToken_
const FastTrackerRecHit * hit() const
The Hit itself.
DetId geographicalId() const
const BasicVectorType & basicVector() const
edm::ESHandle< TransientTrackingRecHitBuilder > theTTRHBuilder
std::vector< SimTrack > SimTrackContainer
unsigned long long theCacheId_TG
std::unique_ptr< MuonErrorMatrix > theErrorMatrixAdjuster