48 beamSpot_(iConfig.getParameter<edm::InputTag>(
"beamSpot"))
50 theCategory =
"FastSimulation|Muons||FastTSGFromPropagation";
55 beamSpot_(iConfig.getParameter<edm::InputTag>(
"beamSpot"))
57 theCategory =
"FastSimulation|Muons|FastTSGFromPropagation";
94 if ( nls.empty() )
return;
98 bool usePredictedState =
false;
101 std::vector<TrajectoryMeasurement> alltm;
103 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
104 inl != nls.end(); inl++, ndesLayer++ ) {
105 if ( (*inl == 0) )
break;
108 if ( (!alltm.empty()) ) {
114 if ( alltm.empty() ) {
116 usePredictedState =
true;
120 if ( alltm.size() > 5 ) alltm.erase(alltm.begin() + 5, alltm.end());
123 const std::vector<unsigned> theSimTrackIds =
theGSRecHits->ids();
125 std::vector<TrackerRecHit> outerHits;
128 bool isMatch =
false;
129 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
136 for(
unsigned tkId=0; tkId != theSimTrackIds.size(); ++tkId ) {
137 const SimTrack & simtrack = (*simTracks)[theSimTrackIds[tkId]];
153 unsigned int outerId = 0;
154 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
158 if(
id > outerId ) outerId = id;
161 if(
id > outerId ) outerId = id;
164 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
167 aTrackingRecHit = theSeedHits.
hit()->
clone();
169 if( !recHit )
continue;
173 container.
push_back(recHit->hit()->clone());
182 result.push_back(ts);
191 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
198 for(
unsigned tkId=0; tkId != theSimTrackIds.size(); ++tkId ) {
199 const SimTrack & simtrack = (*simTracks)[theSimTrackIds[tkId]];
215 unsigned int outerId = 0;
216 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
220 if(
id > outerId ) outerId = id;
223 if(
id > outerId ) outerId = id;
226 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
229 aTrackingRecHit = theSeedHits.
hit()->
clone();
231 if( !recHit )
continue;
235 container.
push_back(recHit->hit()->clone());
244 result.push_back(ts);
274 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
275 inl != nls.end(); inl++ ) {
277 if ( !result.empty() || *inl == 0 ) {
280 std::vector<DetLayer::DetWithState> compatDets = (*inl)->compatibleDets(staState, *
propagator(), *
estimator());
282 if ( compatDets.empty() )
continue;
284 result.push_back(ts);
306 <<
"Possible choices are: discrete, fixed, matrix.\n"
307 <<
"Use discrete method" <<std::endl;
356 bool measTrackerChanged =
false;
371 measTrackerChanged =
true;
381 bool trackerGeomChanged =
false;
389 trackerGeomChanged =
true;
402 if ( staMuon.first && staMuon.first->isValid() ) {
404 innerTS = staMuon.first->firstMeasurement().updatedState();
407 innerTS = staMuon.first->lastMeasurement().updatedState();
429 result = fromInside(iniState);
454 std::vector<TrajectoryMeasurement>::iterator tmsend = std::remove_if(tms.begin(), tms.end(),
isInvalid());
455 tms.erase(tmsend, tms.end());
462 std::vector<TrajectoryMeasurement>
result;
465 if ( compatDets.empty() )
return result;
467 for (std::vector<DetLayer::DetWithState>::const_iterator idws = compatDets.begin(); idws != compatDets.end(); ++idws) {
468 if ( idws->second.isValid() && (idws->first) ) {
469 std::vector<TrajectoryMeasurement> tmptm =
476 result.insert(result.end(),tmptm.begin(), tmptm.end());
516 float pt = (staMuon.second)->pt();
576 float localErrors[15];
578 for (
int i=0;
i<dim; ++
i) {
579 for (
int j=0;
j<=
i; ++
j) {
580 localErrors[k++] =
m(
i,
j);
583 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::ESHandle< MeasurementTracker > theMeasTracker
void rescaleError(double factor)
const math::XYZVectorD & trackerSurfacePosition() const
T getParameter(std::string const &) const
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
edm::Handle< reco::BeamSpot > theBeamSpot
bool theUseVertexStateFlag
std::pair< const_iterator, const_iterator > range
iterator range
const Chi2MeasurementEstimator * theEstimator
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
edm::Handle< edm::SimTrackContainer > theSimTracks
const DirectTrackerNavigation * theNavigation
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const =0
const CurvilinearTrajectoryError & curvilinearError() const
std::string thePropagatorName
virtual ~FastTSGFromPropagation()
destructor
virtual RecHit2DLocalPos * clone() const =0
edm::ESHandle< GeometricSearchTracker > theTracker
GlobalPoint globalPosition() const
void validMeasurements(std::vector< TrajectoryMeasurement > &) const
select valid measurements
CurvilinearTrajectoryError get(GlobalVector momentum, bool convolute=true)
main method to be used. Retrieve a 5x5 symetrical matrix according to parametrization of error or sca...
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 std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
static int position[TOTALCHAMBERS][3]
const Chi2MeasurementEstimator * estimator() const
FastTSGFromPropagation(const edm::ParameterSet &pset)
constructor
edm::InputTag theHitProducer
uint32_t rawId() const
get the raw id
double theFlexErrorRescaling
void getRescalingFactor(const TrackCand &staMuon)
edm::ParameterSet theConfig
static const double pts[33]
C::const_iterator const_iterator
constant access iterator type
const SurfaceType & surface() const
bool passSelection(const TrajectoryStateOnSurface &) const
check some quantity and beam-spot compatibility and decide to continue
FreeTrajectoryState * freeState(bool withErrors=true) const
const TrajectoryStateUpdator * theUpdator
SurfaceSide surfaceSide() const
Position relative to material, defined relative to momentum vector.
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
const LocalTrajectoryError & localError() const
tuple Chi2MeasurementEstimator
virtual const GeomDet * idToDet(DetId) const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
GlobalVector momentum() const
MuonErrorMatrix * theErrorMatrixAdjuster
edm::Handle< SiTrackerGSMatchedRecHit2DCollection > theGSRecHits
void rescaleError(double factor)
const TrackerGeometry * theGeometry
void init(const MuonServiceProxy *)
initialize
double zDis(const TrajectoryStateOnSurface &tsos) const
const TrajectoryStateUpdator * updator() const
const GlobalTrajectoryParameters & globalParameters() const
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.
const GSSiTrackerRecHit2DLocalPos * hit() const
edm::InputTag theSimTrackCollectionLabel
const LayerMeasurements * theTkLayerMeasurements
ESHandle< TrackerGeometry > geometry
GlobalVector globalMomentum() const
double theFixedErrorRescaling
std::vector< const DetLayer * > compatibleLayers(const FreeTrajectoryState &fts, PropagationDirection timeDirection) const
find compatible layers for a given trajectory state
double dxyDis(const TrajectoryStateOnSurface &tsos) const
DetId geographicalId() const
void trackerSeeds(const TrackCand &, const TrackingRegion &, const TrackerTopology *tTopo, std::vector< TrajectorySeed > &)
generate seed(s) for a track
const BasicVectorType & basicVector() const
edm::ESHandle< TransientTrackingRecHitBuilder > theTTRHBuilder
std::vector< SimTrack > SimTrackContainer
void setEvent(const edm::Event &)
set an event
unsigned long long theCacheId_TG