CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
TSGFromPropagation Class Reference

#include <TSGFromPropagation.h>

Inheritance diagram for TSGFromPropagation:
TrackerSeedGenerator

Classes

struct  increasingEstimate
 
struct  isInvalid
 

Public Member Functions

void init (const MuonServiceProxy *)
 initialize More...
 
void setEvent (const edm::Event &)
 set an event More...
 
void trackerSeeds (const TrackCand &, const TrackingRegion &, const TrackerTopology *, std::vector< TrajectorySeed > &)
 generate seed(s) for a track More...
 
 TSGFromPropagation (const edm::ParameterSet &pset)
 constructor More...
 
 TSGFromPropagation (const edm::ParameterSet &par, const MuonServiceProxy *)
 
virtual ~TSGFromPropagation ()
 destructor More...
 
- Public Member Functions inherited from TrackerSeedGenerator
const edm::EventgetEvent () const
 
 TrackerSeedGenerator ()
 
virtual void trackerSeeds (const TrackCand &, const TrackingRegion &, const TrackerTopology *, BTSeedCollection &)
 
virtual ~TrackerSeedGenerator ()
 destructor More...
 

Private Member Functions

void adjust (FreeTrajectoryState &) const
 adjust the error matrix of the FTS More...
 
void adjust (TrajectoryStateOnSurface &) const
 adjust the error matrix of the TSOS More...
 
TrajectorySeed createSeed (const TrajectoryStateOnSurface &, const DetId &) const
 create a hitless seed from a trajectory state More...
 
TrajectorySeed createSeed (const TrajectoryStateOnSurface &tsos, const edm::OwnVector< TrackingRecHit > &container, const DetId &id) const
 create a seed from a trajectory state More...
 
double dxyDis (const TrajectoryStateOnSurface &tsos) const
 
const Chi2MeasurementEstimatorestimator () const
 
std::vector
< TrajectoryMeasurement
findMeasurements (const DetLayer *, const TrajectoryStateOnSurface &) const
 look for measurements on the first compatible layer More...
 
std::vector
< TrajectoryMeasurement
findMeasurements_new (const DetLayer *, const TrajectoryStateOnSurface &) const
 look for measurements on the first compatible layer (faster way) More...
 
void getRescalingFactor (const TrackCand &staMuon)
 
TrajectoryStateOnSurface innerState (const TrackCand &) const
 
TrajectoryStateOnSurface outerTkState (const TrackCand &) const
 
bool passSelection (const TrajectoryStateOnSurface &) const
 check some quantity and beam-spot compatibility and decide to continue More...
 
edm::ESHandle< Propagatorpropagator () const
 
const LayerMeasurementstkLayerMeasurements () const
 
const TrajectoryStateUpdatorupdator () const
 
void validMeasurements (std::vector< TrajectoryMeasurement > &) const
 select valid measurements More...
 
double zDis (const TrajectoryStateOnSurface &tsos) const
 

Private Attributes

edm::Handle< reco::BeamSpotbeamSpot
 
bool theAdjustAtIp
 
edm::InputTag theBeamSpotInputTag
 
unsigned long long theCacheId_MT
 
unsigned long long theCacheId_TG
 
std::string theCategory
 
edm::ParameterSet theConfig
 
MuonErrorMatrixtheErrorMatrixAdjuster
 
const Chi2MeasurementEstimatortheEstimator
 
double theFixedErrorRescaling
 
double theFlexErrorRescaling
 
double theMaxChi2
 
edm::ESHandle< MeasurementTrackertheMeasTracker
 
std::string theMeasTrackerName
 
const DirectTrackerNavigationtheNavigation
 
std::string thePropagatorName
 
std::string theResetMethod
 
bool theSelectStateFlag
 
const MuonServiceProxytheService
 
double theSigmaZ
 
const LayerMeasurementstheTkLayerMeasurements
 
edm::ESHandle
< GeometricSearchTracker
theTracker
 
TrajectoryStateTransformtheTSTransformer
 
bool theUpdateStateFlag
 
const TrajectoryStateUpdatortheUpdator
 
bool theUseVertexStateFlag
 

Additional Inherited Members

- Public Types inherited from TrackerSeedGenerator
typedef std::vector
< TrajectorySeed
BTSeedCollection
 
typedef std::pair< const
Trajectory *, reco::TrackRef
TrackCand
 
- Protected Attributes inherited from TrackerSeedGenerator
const edm::EventtheEvent
 
const MuonServiceProxytheProxyService
 

Detailed Description

Date:
2013/01/08 17:08:25
Revision:
1.40
Author
Chang Liu - Purdue University

Tracker Seed Generator by propagating and updating a standAlone muon to the first 2 (or 1) rechits it meets in tracker system

Date:
2013/01/08 17:08:25
Revision:
1.15
Author
Chang Liu - Purdue University

Definition at line 31 of file TSGFromPropagation.h.

Constructor & Destructor Documentation

TSGFromPropagation::TSGFromPropagation ( const edm::ParameterSet pset)

constructor

Definition at line 31 of file TSGFromPropagation.cc.

References edm::ParameterSet::getParameter(), AlCaHLTBitMon_QueryRunRegistry::string, theCategory, and theMeasTrackerName.

32 {
33  theCategory = "Muon|RecoMuon|TSGFromPropagation";
34  theMeasTrackerName = iConfig.getParameter<std::string>("MeasurementTrackerName");
35 
36 }
const MuonServiceProxy * theService
TrajectoryStateTransform * theTSTransformer
edm::ParameterSet theConfig
edm::ESHandle< MeasurementTracker > theMeasTracker
edm::ESHandle< GeometricSearchTracker > theTracker
const DirectTrackerNavigation * theNavigation
std::string theMeasTrackerName
const LayerMeasurements * theTkLayerMeasurements
const Chi2MeasurementEstimator * theEstimator
TSGFromPropagation::TSGFromPropagation ( const edm::ParameterSet par,
const MuonServiceProxy service 
)

Definition at line 38 of file TSGFromPropagation.cc.

References edm::ParameterSet::getParameter(), AlCaHLTBitMon_QueryRunRegistry::string, theCategory, and theMeasTrackerName.

39 {
40  theCategory = "Muon|RecoMuon|TSGFromPropagation";
41  theMeasTrackerName = iConfig.getParameter<std::string>("MeasurementTrackerName");
42 }
const MuonServiceProxy * theService
TrajectoryStateTransform * theTSTransformer
edm::ParameterSet theConfig
const TrajectoryStateUpdator * theUpdator
edm::ESHandle< MeasurementTracker > theMeasTracker
edm::ESHandle< GeometricSearchTracker > theTracker
const DirectTrackerNavigation * theNavigation
std::string theMeasTrackerName
const LayerMeasurements * theTkLayerMeasurements
const Chi2MeasurementEstimator * theEstimator
TSGFromPropagation::~TSGFromPropagation ( )
virtual

destructor

Definition at line 44 of file TSGFromPropagation.cc.

References LogTrace, theCategory, theErrorMatrixAdjuster, theEstimator, theNavigation, theTkLayerMeasurements, and theUpdator.

45 {
46 
47  LogTrace(theCategory) << " TSGFromPropagation dtor called ";
48  if ( theNavigation ) delete theNavigation;
49  if ( theUpdator ) delete theUpdator;
50  if ( theEstimator ) delete theEstimator;
53 
54 }
const TrajectoryStateUpdator * theUpdator
#define LogTrace(id)
const DirectTrackerNavigation * theNavigation
const LayerMeasurements * theTkLayerMeasurements
MuonErrorMatrix * theErrorMatrixAdjuster
const Chi2MeasurementEstimator * theEstimator

Member Function Documentation

void TSGFromPropagation::adjust ( FreeTrajectoryState state) const
private

adjust the error matrix of the FTS

Definition at line 362 of file TSGFromPropagation.cc.

References FreeTrajectoryState::curvilinearError(), MuonErrorMatrix::get(), FreeTrajectoryState::momentum(), MuonErrorMatrix::multiply(), FreeTrajectoryState::parameters(), FreeTrajectoryState::rescaleError(), theErrorMatrixAdjuster, theFixedErrorRescaling, theFlexErrorRescaling, and theResetMethod.

Referenced by innerState(), and outerTkState().

362  {
363 
364  //rescale the error
365  if ( theResetMethod == "discreate" ) {
367  return;
368  }
369 
370  //rescale the error
371  if ( theResetMethod == "fixed" || !theErrorMatrixAdjuster) {
373  return;
374  }
375 
377  CurvilinearTrajectoryError sfMat = theErrorMatrixAdjuster->get(state.momentum());//FIXME with position
378  MuonErrorMatrix::multiply(oMat, sfMat);
379 
380  state = FreeTrajectoryState(state.parameters(),
381  oMat);
382 }
const GlobalTrajectoryParameters & parameters() const
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 CurvilinearTrajectoryError & curvilinearError() const
static void multiply(CurvilinearTrajectoryError &initial_error, const CurvilinearTrajectoryError &scale_error)
multiply term by term the two matrix
GlobalVector momentum() const
void rescaleError(double factor)
MuonErrorMatrix * theErrorMatrixAdjuster
void TSGFromPropagation::adjust ( TrajectoryStateOnSurface state) const
private

adjust the error matrix of the TSOS

Definition at line 384 of file TSGFromPropagation.cc.

References TrajectoryStateOnSurface::curvilinearError(), MuonErrorMatrix::get(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalParameters(), MuonErrorMatrix::multiply(), TrajectoryStateOnSurface::rescaleError(), TrajectoryStateOnSurface::surface(), TrajectoryStateOnSurface::surfaceSide(), theErrorMatrixAdjuster, theFixedErrorRescaling, theFlexErrorRescaling, theResetMethod, and TrajectoryStateOnSurface::weight().

384  {
385 
386  //rescale the error
387  if ( theResetMethod == "discreate" ) {
389  return;
390  }
391 
392  if ( theResetMethod == "fixed" || !theErrorMatrixAdjuster) {
394  return;
395  }
396 
398  CurvilinearTrajectoryError sfMat = theErrorMatrixAdjuster->get(state.globalMomentum());//FIXME with position
399  MuonErrorMatrix::multiply(oMat, sfMat);
400 
402  oMat,
403  state.surface(),
404  state.surfaceSide(),
405  state.weight());
406 }
const CurvilinearTrajectoryError & curvilinearError() const
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 SurfaceType & surface() const
SurfaceSide surfaceSide() const
Position relative to material, defined relative to momentum vector.
static void multiply(CurvilinearTrajectoryError &initial_error, const CurvilinearTrajectoryError &scale_error)
multiply term by term the two matrix
const GlobalTrajectoryParameters & globalParameters() const
GlobalVector globalMomentum() const
MuonErrorMatrix * theErrorMatrixAdjuster
TrajectorySeed TSGFromPropagation::createSeed ( const TrajectoryStateOnSurface tsos,
const DetId id 
) const
private

create a hitless seed from a trajectory state

Definition at line 275 of file TSGFromPropagation.cc.

Referenced by trackerSeeds().

275  {
276 
278  return createSeed(tsos, container, id);
279 
280 }
TrajectorySeed createSeed(const TrajectoryStateOnSurface &, const DetId &) const
create a hitless seed from a trajectory state
TrajectorySeed TSGFromPropagation::createSeed ( const TrajectoryStateOnSurface tsos,
const edm::OwnVector< TrackingRecHit > &  container,
const DetId id 
) const
private

create a seed from a trajectory state

Definition at line 282 of file TSGFromPropagation.cc.

References oppositeToMomentum, and trajectoryStateTransform::persistentState().

282  {
283 
284  PTrajectoryStateOnDet const & seedTSOS = trajectoryStateTransform::persistentState(tsos,id.rawId());
285  return TrajectorySeed(seedTSOS,container,oppositeToMomentum);
286 
287 }
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
double TSGFromPropagation::dxyDis ( const TrajectoryStateOnSurface tsos) const
private
const Chi2MeasurementEstimator* TSGFromPropagation::estimator ( void  ) const
inlineprivate

Definition at line 61 of file TSGFromPropagation.h.

References theEstimator.

Referenced by findMeasurements(), findMeasurements_new(), and trackerSeeds().

61 { return theEstimator; }
const Chi2MeasurementEstimator * theEstimator
std::vector< TrajectoryMeasurement > TSGFromPropagation::findMeasurements ( const DetLayer nl,
const TrajectoryStateOnSurface staState 
) const
private

look for measurements on the first compatible layer

Definition at line 323 of file TSGFromPropagation.cc.

References estimator(), LayerMeasurements::measurements(), propagator(), query::result, tkLayerMeasurements(), and validMeasurements().

323  {
324 
325  std::vector<TrajectoryMeasurement> result = tkLayerMeasurements()->measurements((*nl), staState, *propagator(), *estimator());
326  validMeasurements(result);
327  return result;
328 }
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
tuple result
Definition: query.py:137
void validMeasurements(std::vector< TrajectoryMeasurement > &) const
select valid measurements
const LayerMeasurements * tkLayerMeasurements() const
const Chi2MeasurementEstimator * estimator() const
edm::ESHandle< Propagator > propagator() const
std::vector< TrajectoryMeasurement > TSGFromPropagation::findMeasurements_new ( const DetLayer nl,
const TrajectoryStateOnSurface staState 
) const
private

look for measurements on the first compatible layer (faster way)

Definition at line 298 of file TSGFromPropagation.cc.

References GeometricSearchDet::compatibleDets(), estimator(), propagator(), query::result, theMeasTracker, and validMeasurements().

Referenced by trackerSeeds().

298  {
299 
300  std::vector<TrajectoryMeasurement> result;
301 
302  std::vector<DetLayer::DetWithState> compatDets = nl->compatibleDets(staState, *propagator(), *estimator());
303  if ( compatDets.empty() ) return result;
304 
305  for (std::vector<DetLayer::DetWithState>::const_iterator idws = compatDets.begin(); idws != compatDets.end(); ++idws) {
306  if ( idws->second.isValid() && (idws->first) ) {
307  std::vector<TrajectoryMeasurement> tmptm =
308  theMeasTracker->idToDet(idws->first->geographicalId())->fastMeasurements(idws->second, idws->second, *propagator(), *estimator());
309  validMeasurements(tmptm);
310 // if ( tmptm.size() > 2 ) {
311 // std::stable_sort(tmptm.begin(),tmptm.end(),increasingEstimate());
312 // result.insert(result.end(),tmptm.begin(), tmptm.begin()+2);
313 // } else {
314  result.insert(result.end(),tmptm.begin(), tmptm.end());
315 // }
316  }
317  }
318 
319  return result;
320 
321 }
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
edm::ESHandle< MeasurementTracker > theMeasTracker
tuple result
Definition: query.py:137
void validMeasurements(std::vector< TrajectoryMeasurement > &) const
select valid measurements
const Chi2MeasurementEstimator * estimator() const
edm::ESHandle< Propagator > propagator() const
void TSGFromPropagation::getRescalingFactor ( const TrackCand staMuon)
private

Definition at line 353 of file TSGFromPropagation.cc.

References theFlexErrorRescaling.

Referenced by trackerSeeds().

353  {
354  float pt = (staMuon.second)->pt();
355  if ( pt < 13.0 ) theFlexErrorRescaling = 3;
356  else if ( pt < 30.0 ) theFlexErrorRescaling = 5;
357  else theFlexErrorRescaling = 10;
358  return;
359 }
void TSGFromPropagation::init ( const MuonServiceProxy service)
virtual

initialize

Reimplemented from TrackerSeedGenerator.

Definition at line 141 of file TSGFromPropagation.cc.

References Chi2MeasurementEstimatorESProducer_cfi::Chi2MeasurementEstimator, MuonErrorMatrix::get(), edm::ParameterSet::getParameter(), AlCaHLTBitMon_QueryRunRegistry::string, theAdjustAtIp, theBeamSpotInputTag, theCacheId_MT, theCacheId_TG, theConfig, theErrorMatrixAdjuster, theEstimator, theFixedErrorRescaling, theFlexErrorRescaling, theMaxChi2, theNavigation, thePropagatorName, theResetMethod, theSelectStateFlag, theService, theSigmaZ, theTracker, theUpdateStateFlag, theUpdator, and theUseVertexStateFlag.

141  {
142 
143  theMaxChi2 = theConfig.getParameter<double>("MaxChi2");
144 
145  theFixedErrorRescaling = theConfig.getParameter<double>("ErrorRescaling");
146 
147  theFlexErrorRescaling = 1.0;
148 
150 
151  if (theResetMethod != "discrete" && theResetMethod != "fixed" && theResetMethod != "matrix" ) {
152  edm::LogError("TSGFromPropagation")
153  <<"Wrong error rescaling method: "<<theResetMethod <<"\n"
154  <<"Possible choices are: discrete, fixed, matrix.\n"
155  <<"Use discrete method" <<std::endl;
156  theResetMethod = "discrete";
157  }
158 
160 
161  theCacheId_MT = 0;
162 
163  theCacheId_TG = 0;
164 
166 
167  theService = service;
168 
169  theUseVertexStateFlag = theConfig.getParameter<bool>("UseVertexState");
170 
171  theUpdateStateFlag = theConfig.getParameter<bool>("UpdateState");
172 
173  theSelectStateFlag = theConfig.getParameter<bool>("SelectState");
174 
175  theUpdator = new KFUpdator();
176 
177  theSigmaZ = theConfig.getParameter<double>("SigmaZ");
178 
180 
181  edm::ParameterSet errorMatrixPset = theConfig.getParameter<edm::ParameterSet>("errorMatrixPset");
182  if ( theResetMethod == "matrix" && !errorMatrixPset.empty()){
183  theAdjustAtIp = errorMatrixPset.getParameter<bool>("atIP");
184  theErrorMatrixAdjuster = new MuonErrorMatrix(errorMatrixPset);
185  } else {
186  theAdjustAtIp =false;
188  }
189 
190  theService->eventSetup().get<TrackerRecoGeometryRecord>().get(theTracker);
192 
193 }
T getParameter(std::string const &) const
const MuonServiceProxy * theService
unsigned long long theCacheId_TG
CurvilinearTrajectoryError get(GlobalVector momentum, bool convolute=true)
main method to be used. Retrieve a 5x5 symetrical matrix according to parametrization of error or sca...
edm::ParameterSet theConfig
const TrajectoryStateUpdator * theUpdator
std::string thePropagatorName
edm::ESHandle< GeometricSearchTracker > theTracker
const DirectTrackerNavigation * theNavigation
unsigned long long theCacheId_MT
edm::InputTag theBeamSpotInputTag
MuonErrorMatrix * theErrorMatrixAdjuster
const Chi2MeasurementEstimator * theEstimator
TrajectoryStateOnSurface TSGFromPropagation::innerState ( const TrackCand staMuon) const
private

Definition at line 235 of file TSGFromPropagation.cc.

References adjust(), alongMomentum, trajectoryStateTransform::innerStateOnSurface(), MuonServiceProxy::magneticField(), oppositeToMomentum, theService, and MuonServiceProxy::trackingGeometry().

Referenced by outerTkState().

235  {
236 
237  TrajectoryStateOnSurface innerTS;
238 
239  if ( staMuon.first && staMuon.first->isValid() ) {
240  if (staMuon.first->direction() == alongMomentum) {
241  innerTS = staMuon.first->firstMeasurement().updatedState();
242  }
243  else if (staMuon.first->direction() == oppositeToMomentum) {
244  innerTS = staMuon.first->lastMeasurement().updatedState();
245  }
246  } else {
248  }
249  //rescale the error
250  adjust(innerTS);
251 
252  return innerTS;
253 
254 // return trajectoryStateTransform::innerStateOnSurface(*(staMuon.second),*theService->trackingGeometry(), &*theService->magneticField());
255 }
const MuonServiceProxy * theService
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field)
edm::ESHandle< MagneticField > magneticField() const
get the magnetic field
edm::ESHandle< GlobalTrackingGeometry > trackingGeometry() const
get the tracking geometry
void adjust(FreeTrajectoryState &) const
adjust the error matrix of the FTS
TrajectoryStateOnSurface TSGFromPropagation::outerTkState ( const TrackCand staMuon) const
private

Definition at line 257 of file TSGFromPropagation.cc.

References adjust(), trajectoryStateTransform::initialFreeState(), innerState(), MuonServiceProxy::magneticField(), MuonServiceProxy::propagator(), propagator(), query::result, theService, and theUseVertexStateFlag.

Referenced by trackerSeeds().

257  {
258 
260 
261  if ( theUseVertexStateFlag && staMuon.second->pt() > 1.0 ) {
263  //rescale the error at IP
264  adjust(iniState);
265 
266  StateOnTrackerBound fromInside(&*(theService->propagator("PropagatorWithMaterial")));
267  result = fromInside(iniState);
268  } else {
269  StateOnTrackerBound fromOutside(&*propagator());
270  result = fromOutside(innerState(staMuon));
271  }
272  return result;
273 }
const MuonServiceProxy * theService
edm::ESHandle< MagneticField > magneticField() const
get the magnetic field
TrajectoryStateOnSurface innerState(const TrackCand &) const
tuple result
Definition: query.py:137
FreeTrajectoryState initialFreeState(const reco::Track &tk, const MagneticField *field)
edm::ESHandle< Propagator > propagator() const
void adjust(FreeTrajectoryState &) const
adjust the error matrix of the FTS
edm::ESHandle< Propagator > propagator(std::string propagatorName) const
get the propagator
bool TSGFromPropagation::passSelection ( const TrajectoryStateOnSurface tsos) const
private

check some quantity and beam-spot compatibility and decide to continue

Definition at line 330 of file TSGFromPropagation.cc.

References beamSpot, edm::HandleBase::isValid(), theSelectStateFlag, theSigmaZ, and zDis().

Referenced by trackerSeeds().

330  {
331  if ( !theSelectStateFlag ) return true;
332  else {
333  if ( beamSpot.isValid() ) {
334  return ( ( fabs(zDis(tsos) - beamSpot->z0() ) < theSigmaZ) );
335 
336  } else {
337  return ( ( fabs(zDis(tsos)) < theSigmaZ) );
338 // double theDxyCut = 100;
339 // return ( (zDis(tsos) < theSigmaZ) && (dxyDis(tsos) < theDxyCut) );
340  }
341  }
342 
343 }
double zDis(const TrajectoryStateOnSurface &tsos) const
bool isValid() const
Definition: HandleBase.h:76
edm::Handle< reco::BeamSpot > beamSpot
edm::ESHandle<Propagator> TSGFromPropagation::propagator ( void  ) const
inlineprivate

Definition at line 63 of file TSGFromPropagation.h.

References MuonServiceProxy::propagator(), thePropagatorName, and theService.

Referenced by findMeasurements(), findMeasurements_new(), outerTkState(), and trackerSeeds().

const MuonServiceProxy * theService
std::string thePropagatorName
edm::ESHandle< Propagator > propagator(std::string propagatorName) const
get the propagator
void TSGFromPropagation::setEvent ( const edm::Event iEvent)
virtual

set an event

Reimplemented from TrackerSeedGenerator.

Definition at line 195 of file TSGFromPropagation.cc.

References beamSpot, MuonServiceProxy::eventSetup(), edm::EventSetup::get(), edm::Event::getByLabel(), LogTrace, theBeamSpotInputTag, theCacheId_MT, theCacheId_TG, theCategory, theMeasTracker, theMeasTrackerName, theNavigation, theService, theTkLayerMeasurements, theTracker, and theUpdateStateFlag.

195  {
196 
197  bool measTrackerChanged = false;
198 
199  //edm::Handle<reco::BeamSpot> beamSpot;
201 
202  unsigned long long newCacheId_MT = theService->eventSetup().get<CkfComponentsRecord>().cacheIdentifier();
203 
204  if ( theUpdateStateFlag && newCacheId_MT != theCacheId_MT ) {
205  LogTrace(theCategory) << "Measurment Tracker Geometry changed!";
206  theCacheId_MT = newCacheId_MT;
208  measTrackerChanged = true;
209  }
210 
211  if ( theUpdateStateFlag ) theMeasTracker->update(iEvent);
212 
213  if ( measTrackerChanged && (&*theMeasTracker) ) {
216  }
217 
218  bool trackerGeomChanged = false;
219 
220  unsigned long long newCacheId_TG = theService->eventSetup().get<TrackerRecoGeometryRecord>().cacheIdentifier();
221 
222  if ( newCacheId_TG != theCacheId_TG ) {
223  LogTrace(theCategory) << "Tracker Reco Geometry changed!";
224  theCacheId_TG = newCacheId_TG;
226  trackerGeomChanged = true;
227  }
228 
229  if ( trackerGeomChanged && (&*theTracker) ) {
230  if ( theNavigation ) delete theNavigation;
232  }
233 }
const edm::EventSetup & eventSetup() const
get the whole EventSetup
const MuonServiceProxy * theService
unsigned long long theCacheId_TG
edm::ESHandle< MeasurementTracker > theMeasTracker
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
#define LogTrace(id)
edm::ESHandle< GeometricSearchTracker > theTracker
const T & get() const
Definition: EventSetup.h:55
const DirectTrackerNavigation * theNavigation
std::string theMeasTrackerName
unsigned long long theCacheId_MT
edm::InputTag theBeamSpotInputTag
const LayerMeasurements * theTkLayerMeasurements
edm::Handle< reco::BeamSpot > beamSpot
const LayerMeasurements* TSGFromPropagation::tkLayerMeasurements ( ) const
inlineprivate

Definition at line 57 of file TSGFromPropagation.h.

References theTkLayerMeasurements.

Referenced by findMeasurements().

57 { return theTkLayerMeasurements; }
const LayerMeasurements * theTkLayerMeasurements
void TSGFromPropagation::trackerSeeds ( const TrackCand staMuon,
const TrackingRegion region,
const TrackerTopology tTopo,
std::vector< TrajectorySeed > &  result 
)

generate seed(s) for a track

Definition at line 56 of file TSGFromPropagation.cc.

References DirectTrackerNavigation::compatibleLayers(), createSeed(), estimator(), PV3DBase< T, PVType, FrameType >::eta(), findMeasurements_new(), TrajectoryStateOnSurface::freeState(), getRescalingFactor(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), i, TrajectoryStateOnSurface::isValid(), LogTrace, oppositeToMomentum, outerTkState(), passSelection(), PV3DBase< T, PVType, FrameType >::perp(), propagator(), edm::OwnVector< T, P >::push_back(), theCategory, theNavigation, theResetMethod, theUpdateStateFlag, TrajectoryStateUpdator::update(), and updator().

56  {
57 
58  if ( theResetMethod == "discrete" ) getRescalingFactor(staMuon);
59 
60  TrajectoryStateOnSurface staState = outerTkState(staMuon);
61 
62  if ( !staState.isValid() ) {
63  LogTrace(theCategory) << "Error: initial state from L2 muon is invalid.";
64  return;
65  }
66 
67  LogTrace(theCategory) << "begin of trackerSeed:\n staState pos: "<<staState.globalPosition()
68  << " mom: "<<staState.globalMomentum()
69  <<"pos eta: "<<staState.globalPosition().eta()
70  <<"mom eta: "<<staState.globalMomentum().eta();
71 
72  std::vector<const DetLayer*> nls = theNavigation->compatibleLayers(*(staState.freeState()), oppositeToMomentum);
73 
74  LogTrace(theCategory) << " compatible layers: "<<nls.size();
75 
76  if ( nls.empty() ) return;
77 
78  int ndesLayer = 0;
79 
80  bool usePredictedState = false;
81 
82  if ( theUpdateStateFlag ) { //use updated states
83  std::vector<TrajectoryMeasurement> alltm;
84 
85  for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
86  inl != nls.end(); inl++, ndesLayer++ ) {
87  if ( (*inl == 0) ) break;
88 // if ( (inl != nls.end()-1 ) && ( (*inl)->subDetector() == GeomDetEnumerators::TEC ) && ( (*(inl+1))->subDetector() == GeomDetEnumerators::TOB ) ) continue;
89  alltm = findMeasurements_new(*inl, staState);
90  if ( (!alltm.empty()) ) {
91  LogTrace(theCategory) << "final compatible layer: "<<ndesLayer;
92  break;
93  }
94  }
95 
96  if ( alltm.empty() ) {
97  LogTrace(theCategory) << " NO Measurements Found: eta: "<<staState.globalPosition().eta() <<"pt "<<staState.globalMomentum().perp();
98  usePredictedState = true;
99  } else {
100  LogTrace(theCategory) << " Measurements for seeds: "<<alltm.size();
101  std::stable_sort(alltm.begin(),alltm.end(),increasingEstimate());
102  if ( alltm.size() > 5 ) alltm.erase(alltm.begin() + 5, alltm.end());
103 
104  int i = 0;
105  for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin();
106  itm != alltm.end(); itm++, i++) {
107  TrajectoryStateOnSurface updatedTSOS = updator()->update(itm->predictedState(), *(itm->recHit()));
108  if ( updatedTSOS.isValid() && passSelection(updatedTSOS) ) {
110  container.push_back(itm->recHit()->hit()->clone());
111  TrajectorySeed ts = createSeed(updatedTSOS, container, itm->recHit()->geographicalId());
112  result.push_back(ts);
113  }
114  }
115  LogTrace(theCategory) << "result: "<<result.size();
116  return;
117  }
118  }
119 
120  if ( !theUpdateStateFlag || usePredictedState ) { //use predicted states
121  LogTrace(theCategory) << "use predicted state: ";
122  for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
123  inl != nls.end(); inl++ ) {
124 
125  if ( !result.empty() || *inl == 0 ) {
126  break;
127  }
128  std::vector<DetLayer::DetWithState> compatDets = (*inl)->compatibleDets(staState, *propagator(), *estimator());
129  LogTrace(theCategory) << " compatDets "<<compatDets.size();
130  if ( compatDets.empty() ) continue;
131  TrajectorySeed ts = createSeed(compatDets.front().second, compatDets.front().first->geographicalId());
132  result.push_back(ts);
133 
134  }
135  LogTrace(theCategory) << "result: "<<result.size();
136  return;
137  }
138  return;
139 }
int i
Definition: DBlmapReader.cc:9
T perp() const
Definition: PV3DBase.h:72
TrajectoryStateOnSurface outerTkState(const TrackCand &) const
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const =0
GlobalPoint globalPosition() const
void push_back(D *&d)
Definition: OwnVector.h:273
void getRescalingFactor(const TrackCand &staMuon)
FreeTrajectoryState * freeState(bool withErrors=true) const
bool passSelection(const TrajectoryStateOnSurface &) const
check some quantity and beam-spot compatibility and decide to continue
tuple result
Definition: query.py:137
const TrajectoryStateUpdator * updator() const
#define LogTrace(id)
TrajectorySeed createSeed(const TrajectoryStateOnSurface &, const DetId &) const
create a hitless seed from a trajectory state
const DirectTrackerNavigation * theNavigation
T eta() const
Definition: PV3DBase.h:76
GlobalVector globalMomentum() const
std::vector< const DetLayer * > compatibleLayers(const FreeTrajectoryState &fts, PropagationDirection timeDirection) const
find compatible layers for a given trajectory state
const Chi2MeasurementEstimator * estimator() const
std::vector< TrajectoryMeasurement > findMeasurements_new(const DetLayer *, const TrajectoryStateOnSurface &) const
look for measurements on the first compatible layer (faster way)
edm::ESHandle< Propagator > propagator() const
const TrajectoryStateUpdator* TSGFromPropagation::updator ( ) const
inlineprivate

Definition at line 59 of file TSGFromPropagation.h.

References theUpdator.

Referenced by trackerSeeds().

59 {return theUpdator;}
const TrajectoryStateUpdator * theUpdator
void TSGFromPropagation::validMeasurements ( std::vector< TrajectoryMeasurement > &  tms) const
private

select valid measurements

Definition at line 290 of file TSGFromPropagation.cc.

Referenced by findMeasurements(), and findMeasurements_new().

290  {
291 
292  std::vector<TrajectoryMeasurement>::iterator tmsend = std::remove_if(tms.begin(), tms.end(), isInvalid());
293  tms.erase(tmsend, tms.end());
294  return;
295 
296 }
double TSGFromPropagation::zDis ( const TrajectoryStateOnSurface tsos) const
private

Member Data Documentation

edm::Handle<reco::BeamSpot> TSGFromPropagation::beamSpot
private

Definition at line 154 of file TSGFromPropagation.h.

Referenced by passSelection(), and setEvent().

bool TSGFromPropagation::theAdjustAtIp
private

Definition at line 148 of file TSGFromPropagation.h.

Referenced by init().

edm::InputTag TSGFromPropagation::theBeamSpotInputTag
private

Definition at line 155 of file TSGFromPropagation.h.

Referenced by init(), and setEvent().

unsigned long long TSGFromPropagation::theCacheId_MT
private

Definition at line 108 of file TSGFromPropagation.h.

Referenced by init(), and setEvent().

unsigned long long TSGFromPropagation::theCacheId_TG
private

Definition at line 109 of file TSGFromPropagation.h.

Referenced by init(), and setEvent().

std::string TSGFromPropagation::theCategory
private
edm::ParameterSet TSGFromPropagation::theConfig
private

Definition at line 152 of file TSGFromPropagation.h.

Referenced by init().

MuonErrorMatrix* TSGFromPropagation::theErrorMatrixAdjuster
private

Definition at line 146 of file TSGFromPropagation.h.

Referenced by adjust(), init(), and ~TSGFromPropagation().

const Chi2MeasurementEstimator* TSGFromPropagation::theEstimator
private

Definition at line 126 of file TSGFromPropagation.h.

Referenced by estimator(), init(), and ~TSGFromPropagation().

double TSGFromPropagation::theFixedErrorRescaling
private

Definition at line 134 of file TSGFromPropagation.h.

Referenced by adjust(), and init().

double TSGFromPropagation::theFlexErrorRescaling
private

Definition at line 132 of file TSGFromPropagation.h.

Referenced by adjust(), getRescalingFactor(), and init().

double TSGFromPropagation::theMaxChi2
private

Definition at line 130 of file TSGFromPropagation.h.

Referenced by init().

edm::ESHandle<MeasurementTracker> TSGFromPropagation::theMeasTracker
private

Definition at line 118 of file TSGFromPropagation.h.

Referenced by findMeasurements_new(), and setEvent().

std::string TSGFromPropagation::theMeasTrackerName
private

Definition at line 117 of file TSGFromPropagation.h.

Referenced by setEvent(), and TSGFromPropagation().

const DirectTrackerNavigation* TSGFromPropagation::theNavigation
private

Definition at line 120 of file TSGFromPropagation.h.

Referenced by init(), setEvent(), trackerSeeds(), and ~TSGFromPropagation().

std::string TSGFromPropagation::thePropagatorName
private

Definition at line 144 of file TSGFromPropagation.h.

Referenced by init(), and propagator().

std::string TSGFromPropagation::theResetMethod
private

Definition at line 140 of file TSGFromPropagation.h.

Referenced by adjust(), init(), and trackerSeeds().

bool TSGFromPropagation::theSelectStateFlag
private

Definition at line 142 of file TSGFromPropagation.h.

Referenced by init(), and passSelection().

const MuonServiceProxy* TSGFromPropagation::theService
private

Definition at line 122 of file TSGFromPropagation.h.

Referenced by init(), innerState(), outerTkState(), propagator(), and setEvent().

double TSGFromPropagation::theSigmaZ
private

Definition at line 150 of file TSGFromPropagation.h.

Referenced by init(), and passSelection().

const LayerMeasurements* TSGFromPropagation::theTkLayerMeasurements
private

Definition at line 113 of file TSGFromPropagation.h.

Referenced by setEvent(), tkLayerMeasurements(), and ~TSGFromPropagation().

edm::ESHandle<GeometricSearchTracker> TSGFromPropagation::theTracker
private

Definition at line 115 of file TSGFromPropagation.h.

Referenced by init(), and setEvent().

TrajectoryStateTransform* TSGFromPropagation::theTSTransformer
private

Definition at line 128 of file TSGFromPropagation.h.

bool TSGFromPropagation::theUpdateStateFlag
private

Definition at line 138 of file TSGFromPropagation.h.

Referenced by init(), setEvent(), and trackerSeeds().

const TrajectoryStateUpdator* TSGFromPropagation::theUpdator
private

Definition at line 124 of file TSGFromPropagation.h.

Referenced by init(), updator(), and ~TSGFromPropagation().

bool TSGFromPropagation::theUseVertexStateFlag
private

Definition at line 136 of file TSGFromPropagation.h.

Referenced by init(), and outerTkState().