51 theCategory(
"FastSimulation|Muons|FastTSGFromPropagation"),
52 theTkLayerMeasurements(), theTracker(), theNavigation(), theService(service), theUpdator(), theEstimator(), theSigmaZ(0.0), theConfig (iConfig),
53 theSimTrackCollectionToken_(iC.consumes<edm::
SimTrackContainer>(theConfig.getParameter<edm::
InputTag>(
"SimTrackCollectionLabel"))),
85 if ( nls.empty() )
return;
89 bool usePredictedState =
false;
92 std::vector<TrajectoryMeasurement> alltm;
94 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
95 inl != nls.end(); inl++, ndesLayer++ ) {
96 if ( (*inl == 0) )
break;
99 if ( (!alltm.empty()) ) {
105 if ( alltm.empty() ) {
107 usePredictedState =
true;
111 if ( alltm.size() > 5 ) alltm.erase(alltm.begin() + 5, alltm.end());
115 std::vector<TrajectorySeedHitCandidate> outerHits;
118 bool isMatch =
false;
119 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
127 const auto & recHitCombination = (*recHitCombinations)[icomb];
128 if(recHitCombination.size() ==0)
130 int32_t simTrackId = recHitCombination.back()->simTrackId(0);
131 const SimTrack & simtrack = (*simTracks)[simTrackId];
143 unsigned int outerId = 0;
144 for(
const auto & recHitRef : recHitCombination) {
148 if(
id > outerId ) outerId = id;
151 if(
id > outerId ) outerId = id;
154 for(
const auto & recHitRef : recHitCombination ) {
157 aTrackingRecHit = theSeedHits.
hit()->
clone();
159 if( !recHit )
continue;
163 container.
push_back(recHit->hit()->clone());
173 result.push_back(ts);
182 for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
191 const auto & recHitCombination = (*recHitCombinations)[icomb];
192 if(recHitCombination.size() ==0)
194 int32_t simTrackId = recHitCombination.back()->simTrackId(0);
195 const SimTrack & simtrack = (*simTracks)[simTrackId];
207 unsigned int outerId = 0;
208 for(
const auto & recHitRef : recHitCombination ) {
212 if(
id > outerId ) outerId = id;
215 if(
id > outerId ) outerId = id;
218 for(
const auto & recHitRef : recHitCombination ) {
221 aTrackingRecHit = theSeedHits.
hit()->
clone();
223 if( !recHit )
continue;
227 container.
push_back(recHit->hit()->clone());
237 result.push_back(ts);
267 for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
268 inl != nls.end(); inl++ ) {
270 if ( !result.empty() || *inl == 0 ) {
273 std::vector<DetLayer::DetWithState> compatDets = (*inl)->compatibleDets(staState, *
propagator(), *
estimator());
275 if ( compatDets.empty() )
continue;
277 result.push_back(ts);
299 <<
"Possible choices are: discrete, fixed, matrix.\n"
300 <<
"Use discrete method" <<std::endl;
365 bool trackerGeomChanged =
false;
373 trackerGeomChanged =
true;
385 if ( staMuon.first && staMuon.first->isValid() ) {
387 innerTS = staMuon.first->firstMeasurement().updatedState();
390 innerTS = staMuon.first->lastMeasurement().updatedState();
412 result = fromInside(iniState);
437 std::vector<TrajectoryMeasurement>::iterator tmsend = std::remove_if(tms.begin(), tms.end(),
isInvalid());
438 tms.erase(tmsend, tms.end());
445 std::vector<TrajectoryMeasurement>
result;
448 if ( compatDets.empty() )
return result;
450 for (std::vector<DetLayer::DetWithState>::const_iterator idws = compatDets.begin(); idws != compatDets.end(); ++idws) {
451 if ( idws->second.isValid() && (idws->first) ) {
452 std::vector<TrajectoryMeasurement> tmptm =
459 result.insert(result.end(),tmptm.begin(), tmptm.end());
499 float pt = (staMuon.second)->
pt();
559 float localErrors[15];
561 for (
int i=0;
i<dim; ++
i) {
562 for (
int j=0;
j<=
i; ++
j) {
563 localErrors[k++] =
m(
i,
j);
566 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
virtual FastTrackerRecHit * clone() const override
void rescaleError(double factor)
void setRecHitCombinationIndex(edm::OwnVector< T > &recHits, int32_t icomb)
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
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
virtual ~FastTSGFromPropagation()
destructor
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 std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
const Chi2MeasurementEstimator * estimator() const
uint32_t rawId() const
get the raw id
double theFlexErrorRescaling
void getRescalingFactor(const TrackCand &staMuon)
static const double pts[33]
edm::EDGetTokenT< MeasurementTrackerEvent > theMeasurementTrackerEventToken_
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const =0
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
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
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
tuple MeasurementTrackerEvent
ESHandle< TrackerGeometry > geometry
GlobalVector globalMomentum() const
edm::EDGetTokenT< reco::BeamSpot > beamSpot_
static int position[264][3]
std::vector< FastTrackerRecHitCombination > FastTrackerRecHitCombinationCollection
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
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
virtual const TrackerGeomDet * idToDet(DetId) const
unsigned long long theCacheId_TG
std::unique_ptr< MuonErrorMatrix > theErrorMatrixAdjuster