49 theCategory =
"FastSimulation|Muons||FastTSGFromPropagation";
55 theCategory =
"FastSimulation|Muons|FastTSGFromPropagation";
92 if ( nls.empty() )
return;
96 bool usePredictedState =
false;
99 std::vector<TrajectoryMeasurement> alltm;
101 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
102 inl != nls.end(); inl++, ndesLayer++ ) {
103 if ( (*inl == 0) )
break;
106 if ( (!alltm.empty()) ) {
112 if ( alltm.empty() ) {
114 usePredictedState =
true;
118 if ( alltm.size() > 5 ) alltm.erase(alltm.begin() + 5, alltm.end());
121 const std::vector<unsigned> theSimTrackIds =
theGSRecHits->ids();
123 std::vector<TrackerRecHit> outerHits;
126 bool isMatch =
false;
127 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
134 for(
unsigned tkId=0; tkId != theSimTrackIds.size(); ++tkId ) {
135 const SimTrack & simtrack = (*simTracks)[theSimTrackIds[tkId]];
151 unsigned int outerId = 0;
152 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
156 if(
id > outerId ) outerId = id;
159 if(
id > outerId ) outerId = id;
162 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
165 aTrackingRecHit = theSeedHits.
hit()->
clone();
167 if( !recHit )
continue;
171 container.
push_back(recHit->hit()->clone());
180 result.push_back(ts);
189 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
196 for(
unsigned tkId=0; tkId != theSimTrackIds.size(); ++tkId ) {
197 const SimTrack & simtrack = (*simTracks)[theSimTrackIds[tkId]];
213 unsigned int outerId = 0;
214 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
218 if(
id > outerId ) outerId = id;
221 if(
id > outerId ) outerId = id;
224 for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) {
227 aTrackingRecHit = theSeedHits.
hit()->
clone();
229 if( !recHit )
continue;
233 container.
push_back(recHit->hit()->clone());
242 result.push_back(ts);
272 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
273 inl != nls.end(); inl++ ) {
275 if ( !result.empty() || *inl == 0 ) {
278 std::vector<DetLayer::DetWithState> compatDets = (*inl)->compatibleDets(staState, *
propagator(), *
estimator());
280 if ( compatDets.empty() )
continue;
282 result.push_back(ts);
304 <<
"Possible choices are: discrete, fixed, matrix.\n"
305 <<
"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();
430 result = fromInside(iniState);
455 std::vector<TrajectoryMeasurement>::iterator tmsend = std::remove_if(tms.begin(), tms.end(),
isInvalid());
456 tms.erase(tmsend, tms.end());
463 std::vector<TrajectoryMeasurement>
result;
466 if ( compatDets.empty() )
return result;
468 for (std::vector<DetLayer::DetWithState>::const_iterator idws = compatDets.begin(); idws != compatDets.end(); ++idws) {
469 if ( idws->second.isValid() && (idws->first) ) {
470 std::vector<TrajectoryMeasurement> tmptm =
477 result.insert(result.end(),tmptm.begin(), tmptm.end());
517 float pt = (staMuon.second)->pt();
577 float localErrors[15];
579 for (
int i=0;
i<dim; ++
i) {
580 for (
int j=0;
j<=
i; ++
j) {
581 localErrors[k++] =
m(
i,
j);
584 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
TrajectoryStateTransform * theTSTransformer
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
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
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)
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 unsigned int detId() const
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 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
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
void setEvent(const edm::Event &)
set an event
unsigned long long theCacheId_TG