49 theCategory =
"FastSimulation|Muons||FastTSGFromPropagation";
55 theCategory =
"FastSimulation|Muons|FastTSGFromPropagation";
91 if ( nls.empty() )
return;
95 bool usePredictedState =
false;
98 std::vector<TrajectoryMeasurement> alltm;
100 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
101 inl != nls.end(); inl++, ndesLayer++ ) {
102 if ( (*inl == 0) )
break;
105 if ( (!alltm.empty()) ) {
111 if ( alltm.empty() ) {
113 usePredictedState =
true;
117 if ( alltm.size() > 5 ) alltm.erase(alltm.begin() + 5, alltm.end());
120 const std::vector<unsigned> theSimTrackIds =
theGSRecHits->ids();
122 std::vector<TrackerRecHit> outerHits;
125 bool isMatch =
false;
126 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
133 for(
unsigned tkId=0; tkId != theSimTrackIds.size(); ++tkId ) {
134 const SimTrack & simtrack = (*simTracks)[theSimTrackIds[tkId]];
150 unsigned int outerId = 0;
151 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
155 if(
id > outerId ) outerId =
id;
158 if(
id > outerId ) outerId =
id;
161 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
164 aTrackingRecHit = theSeedHits.
hit()->
clone();
166 if( !recHit )
continue;
170 container.
push_back(recHit->hit()->clone());
179 result.push_back(ts);
188 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
195 for(
unsigned tkId=0; tkId != theSimTrackIds.size(); ++tkId ) {
196 const SimTrack & simtrack = (*simTracks)[theSimTrackIds[tkId]];
212 unsigned int outerId = 0;
213 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
217 if(
id > outerId ) outerId =
id;
220 if(
id > outerId ) outerId =
id;
223 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
226 aTrackingRecHit = theSeedHits.
hit()->
clone();
228 if( !recHit )
continue;
232 container.
push_back(recHit->hit()->clone());
241 result.push_back(ts);
271 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
272 inl != nls.end(); inl++ ) {
274 if ( !result.empty() || *inl == 0 ) {
277 std::vector<DetLayer::DetWithState> compatDets = (*inl)->compatibleDets(staState, *
propagator(), *
estimator());
279 if ( compatDets.empty() )
continue;
281 result.push_back(ts);
303 <<
"Possible choices are: discrete, fixed, matrix.\n"
304 <<
"Use discrete method" <<std::endl;
353 bool measTrackerChanged =
false;
368 measTrackerChanged =
true;
378 bool trackerGeomChanged =
false;
386 trackerGeomChanged =
true;
399 if ( staMuon.first && staMuon.first->isValid() ) {
401 innerTS = staMuon.first->firstMeasurement().updatedState();
404 innerTS = staMuon.first->lastMeasurement().updatedState();
426 result = fromInside(iniState);
451 std::vector<TrajectoryMeasurement>::iterator tmsend = std::remove_if(tms.begin(), tms.end(),
isInvalid());
452 tms.erase(tmsend, tms.end());
459 std::vector<TrajectoryMeasurement>
result;
462 if ( compatDets.empty() )
return result;
464 for (std::vector<DetLayer::DetWithState>::const_iterator idws = compatDets.begin(); idws != compatDets.end(); ++idws) {
465 if ( idws->second.isValid() && (idws->first) ) {
466 std::vector<TrajectoryMeasurement> tmptm =
473 result.insert(result.end(),tmptm.begin(), tmptm.end());
513 float pt = (staMuon.second)->pt();
573 float localErrors[15];
575 for (
int i=0;
i<dim; ++
i) {
576 for (
int j=0;
j<=
i; ++
j) {
577 localErrors[k++] =
m(
i,
j);
580 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...
bool getByType(Handle< PROD > &result) const
const MuonServiceProxy * theService
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
std::string theResetMethod
float charge() const
charge
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
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
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.
void trackerSeeds(const TrackCand &, const TrackingRegion &, std::vector< TrajectorySeed > &)
generate seed(s) for a track
const GSSiTrackerRecHit2DLocalPos * hit() const
edm::InputTag theSimTrackCollectionLabel
const LayerMeasurements * theTkLayerMeasurements
ESHandle< TrackerGeometry > geometry
GlobalVector globalMomentum() const
const BoundPlane & surface() const
The nominal surface of the GeomDet.
static int position[264][3]
const Surface & surface() 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
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