#include <FastTSGFromPropagation.h>
Emulate TSGFromPropagation in RecoMuon
Tracker Seed Generator by propagating and updating a standAlone muon to the first 2 (or 1) rechits it meets in tracker system
Emulate TSGFromPropagation in RecoMuon
Definition at line 42 of file FastTSGFromPropagation.h.
FastTSGFromPropagation::FastTSGFromPropagation | ( | const edm::ParameterSet & | pset | ) |
constructor
Definition at line 47 of file FastTSGFromPropagation.cc.
References theCategory.
:theTkLayerMeasurements (0), theTracker(0), theNavigation(0), theService(0), theEstimator(0), theTSTransformer(0), theSigmaZ(0), theConfig (iConfig) { theCategory = "FastSimulation|Muons||FastTSGFromPropagation"; }
FastTSGFromPropagation::FastTSGFromPropagation | ( | const edm::ParameterSet & | par, |
const MuonServiceProxy * | service | ||
) |
Definition at line 53 of file FastTSGFromPropagation.cc.
References theCategory.
: theTkLayerMeasurements (0), theTracker(0), theNavigation(0), theService(service),theUpdator(0), theEstimator(0), theTSTransformer(0), theSigmaZ(0), theConfig (iConfig) { theCategory = "FastSimulation|Muons|FastTSGFromPropagation"; }
FastTSGFromPropagation::~FastTSGFromPropagation | ( | ) | [virtual] |
destructor
Definition at line 58 of file FastTSGFromPropagation.cc.
References LogTrace, theCategory, theErrorMatrixAdjuster, theEstimator, theNavigation, theTkLayerMeasurements, theTSTransformer, and theUpdator.
{ LogTrace(theCategory) << " FastTSGFromPropagation dtor called "; if ( theNavigation ) delete theNavigation; if ( theUpdator ) delete theUpdator; if ( theEstimator ) delete theEstimator; if ( theTkLayerMeasurements ) delete theTkLayerMeasurements; if ( theTSTransformer ) delete theTSTransformer; if ( theErrorMatrixAdjuster ) delete theErrorMatrixAdjuster; }
void FastTSGFromPropagation::adjust | ( | FreeTrajectoryState & | state | ) | const [private] |
adjust the error matrix of the FTS
Definition at line 525 of file FastTSGFromPropagation.cc.
References FreeTrajectoryState::curvilinearError(), MuonErrorMatrix::get(), FreeTrajectoryState::momentum(), MuonErrorMatrix::multiply(), FreeTrajectoryState::parameters(), FreeTrajectoryState::rescaleError(), theErrorMatrixAdjuster, theFixedErrorRescaling, theFlexErrorRescaling, and theResetMethod.
Referenced by innerState(), and outerTkState().
{ //rescale the error if ( theResetMethod == "discreate" ) { state.rescaleError(theFlexErrorRescaling); return; } //rescale the error if ( theResetMethod == "fixed" || !theErrorMatrixAdjuster) { state.rescaleError(theFixedErrorRescaling); return; } CurvilinearTrajectoryError oMat = state.curvilinearError(); CurvilinearTrajectoryError sfMat = theErrorMatrixAdjuster->get(state.momentum());//FIXME with position MuonErrorMatrix::multiply(oMat, sfMat); state = FreeTrajectoryState(state.parameters(), oMat); }
void FastTSGFromPropagation::adjust | ( | TrajectoryStateOnSurface & | state | ) | const [private] |
adjust the error matrix of the TSOS
Definition at line 547 of file FastTSGFromPropagation.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().
{ //rescale the error if ( theResetMethod == "discreate" ) { state.rescaleError(theFlexErrorRescaling); return; } if ( theResetMethod == "fixed" || !theErrorMatrixAdjuster) { state.rescaleError(theFixedErrorRescaling); return; } CurvilinearTrajectoryError oMat = state.curvilinearError(); CurvilinearTrajectoryError sfMat = theErrorMatrixAdjuster->get(state.globalMomentum());//FIXME with position MuonErrorMatrix::multiply(oMat, sfMat); state = TrajectoryStateOnSurface(state.globalParameters(), oMat, state.surface(), state.surfaceSide(), state.weight()); }
TrajectorySeed FastTSGFromPropagation::createSeed | ( | const TrajectoryStateOnSurface & | tsos, |
const DetId & | id | ||
) | const [private] |
create a hitless seed from a trajectory state
Definition at line 438 of file FastTSGFromPropagation.cc.
Referenced by trackerSeeds().
{ edm::OwnVector<TrackingRecHit> container; return createSeed(tsos, container, id); }
TrajectorySeed FastTSGFromPropagation::createSeed | ( | const TrajectoryStateOnSurface & | tsos, |
const edm::OwnVector< TrackingRecHit > & | container, | ||
const DetId & | id | ||
) | const [private] |
create a seed from a trajectory state
Definition at line 445 of file FastTSGFromPropagation.cc.
References oppositeToMomentum, TrajectoryStateTransform::persistentState(), and theTSTransformer.
{ PTrajectoryStateOnDet* seedTSOS = theTSTransformer->persistentState(tsos,id.rawId()); return TrajectorySeed(*seedTSOS,container,oppositeToMomentum); }
double FastTSGFromPropagation::dxyDis | ( | const TrajectoryStateOnSurface & | tsos | ) | const [private] |
Definition at line 508 of file FastTSGFromPropagation.cc.
References TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().
{ return fabs(( - tsos.globalPosition().x() * tsos.globalMomentum().y() + tsos.globalPosition().y() * tsos.globalMomentum().x() )/tsos.globalMomentum().perp()); }
const Chi2MeasurementEstimator* FastTSGFromPropagation::estimator | ( | void | ) | const [inline, private] |
Definition at line 76 of file FastTSGFromPropagation.h.
References theEstimator.
Referenced by findMeasurements(), findMeasurements_new(), and trackerSeeds().
{ return theEstimator; }
std::vector< TrajectoryMeasurement > FastTSGFromPropagation::findMeasurements | ( | const DetLayer * | nl, |
const TrajectoryStateOnSurface & | staState | ||
) | const [private] |
look for measurements on the first compatible layer
Definition at line 486 of file FastTSGFromPropagation.cc.
References estimator(), LayerMeasurements::measurements(), propagator(), query::result, tkLayerMeasurements(), and validMeasurements().
{ std::vector<TrajectoryMeasurement> result = tkLayerMeasurements()->measurements((*nl), staState, *propagator(), *estimator()); validMeasurements(result); return result; }
std::vector< TrajectoryMeasurement > FastTSGFromPropagation::findMeasurements_new | ( | const DetLayer * | nl, |
const TrajectoryStateOnSurface & | staState | ||
) | const [private] |
look for measurements on the first compatible layer (faster way)
Definition at line 461 of file FastTSGFromPropagation.cc.
References GeometricSearchDet::compatibleDets(), estimator(), propagator(), query::result, and theMeasTracker.
Referenced by trackerSeeds().
{ std::vector<TrajectoryMeasurement> result; std::vector<DetLayer::DetWithState> compatDets = nl->compatibleDets(staState, *propagator(), *estimator()); if ( compatDets.empty() ) return result; for (std::vector<DetLayer::DetWithState>::const_iterator idws = compatDets.begin(); idws != compatDets.end(); ++idws) { if ( idws->second.isValid() && (idws->first) ) { std::vector<TrajectoryMeasurement> tmptm = theMeasTracker->idToDet(idws->first->geographicalId())->fastMeasurements(idws->second, idws->second, *propagator(), *estimator()); //validMeasurements(tmptm); // if ( tmptm.size() > 2 ) { // std::stable_sort(tmptm.begin(),tmptm.end(),increasingEstimate()); // result.insert(result.end(),tmptm.begin(), tmptm.begin()+2); // } else { result.insert(result.end(),tmptm.begin(), tmptm.end()); // } } } return result; }
void FastTSGFromPropagation::getRescalingFactor | ( | const TrackCand & | staMuon | ) | [private] |
Definition at line 516 of file FastTSGFromPropagation.cc.
References theFlexErrorRescaling.
Referenced by trackerSeeds().
{ float pt = (staMuon.second)->pt(); if ( pt < 13.0 ) theFlexErrorRescaling = 3; else if ( pt < 30.0 ) theFlexErrorRescaling = 5; else theFlexErrorRescaling = 10; return; }
void FastTSGFromPropagation::init | ( | const MuonServiceProxy * | service | ) | [virtual] |
initialize
Reimplemented from TrackerSeedGenerator.
Definition at line 291 of file FastTSGFromPropagation.cc.
References Chi2MeasurementEstimatorESProducer_cfi::Chi2MeasurementEstimator, geometry, MuonErrorMatrix::get(), edm::ParameterSet::getParameter(), theAdjustAtIp, theCacheId_MT, theCacheId_TG, theConfig, theErrorMatrixAdjuster, theEstimator, theFixedErrorRescaling, theFlexErrorRescaling, theGeometry, theHitProducer, theMaxChi2, theNavigation, thePropagatorName, theResetMethod, theSelectStateFlag, theService, theSigmaZ, theSimTrackCollectionLabel, theTracker, theTSTransformer, theTTRHBuilder, theUpdateStateFlag, theUpdator, and theUseVertexStateFlag.
{ theMaxChi2 = theConfig.getParameter<double>("MaxChi2"); theFixedErrorRescaling = theConfig.getParameter<double>("ErrorRescaling"); theFlexErrorRescaling = 1.0; theResetMethod = theConfig.getParameter<std::string>("ResetMethod"); if (theResetMethod != "discrete" && theResetMethod != "fixed" && theResetMethod != "matrix" ) { edm::LogError("FastTSGFromPropagation") <<"Wrong error rescaling method: "<<theResetMethod <<"\n" <<"Possible choices are: discrete, fixed, matrix.\n" <<"Use discrete method" <<std::endl; theResetMethod = "discrete"; } theEstimator = new Chi2MeasurementEstimator(theMaxChi2); theCacheId_MT = 0; theCacheId_TG = 0; thePropagatorName = theConfig.getParameter<std::string>("Propagator"); theService = service; theUseVertexStateFlag = theConfig.getParameter<bool>("UseVertexState"); theUpdateStateFlag = theConfig.getParameter<bool>("UpdateState"); theSelectStateFlag = theConfig.getParameter<bool>("SelectState"); theSimTrackCollectionLabel = theConfig.getParameter<edm::InputTag>("SimTrackCollectionLabel"); theHitProducer = theConfig.getParameter<edm::InputTag>("HitProducer"); theUpdator = new KFUpdator(); theTSTransformer = new TrajectoryStateTransform(); theSigmaZ = theConfig.getParameter<double>("SigmaZ"); edm::ParameterSet errorMatrixPset = theConfig.getParameter<edm::ParameterSet>("errorMatrixPset"); if ( theResetMethod == "matrix" && !errorMatrixPset.empty()){ theAdjustAtIp = errorMatrixPset.getParameter<bool>("atIP"); theErrorMatrixAdjuster = new MuonErrorMatrix(errorMatrixPset); } else { theAdjustAtIp =false; theErrorMatrixAdjuster=0; } theService->eventSetup().get<TrackerRecoGeometryRecord>().get(theTracker); theNavigation = new DirectTrackerNavigation(theTracker); edm::ESHandle<TrackerGeometry> geometry; theService->eventSetup().get<TrackerDigiGeometryRecord>().get(geometry); theGeometry = &(*geometry); theService->eventSetup().get<TransientRecHitRecord>().get("WithTrackAngle", theTTRHBuilder); }
TrajectoryStateOnSurface FastTSGFromPropagation::innerState | ( | const TrackCand & | staMuon | ) | const [private] |
Definition at line 398 of file FastTSGFromPropagation.cc.
References adjust(), alongMomentum, TrajectoryStateTransform::innerStateOnSurface(), oppositeToMomentum, theService, and theTSTransformer.
Referenced by outerTkState().
{ TrajectoryStateOnSurface innerTS; if ( staMuon.first && staMuon.first->isValid() ) { if (staMuon.first->direction() == alongMomentum) { innerTS = staMuon.first->firstMeasurement().updatedState(); } else if (staMuon.first->direction() == oppositeToMomentum) { innerTS = staMuon.first->lastMeasurement().updatedState(); } } else { innerTS = theTSTransformer->innerStateOnSurface(*(staMuon.second),*theService->trackingGeometry(), &*theService->magneticField()); } //rescale the error adjust(innerTS); return innerTS; // return theTSTransformer->innerStateOnSurface(*(staMuon.second),*theService->trackingGeometry(), &*theService->magneticField()); }
TrajectoryStateOnSurface FastTSGFromPropagation::outerTkState | ( | const TrackCand & | staMuon | ) | const [private] |
Definition at line 420 of file FastTSGFromPropagation.cc.
References adjust(), TrajectoryStateTransform::initialFreeState(), innerState(), propagator(), query::result, theService, theTSTransformer, and theUseVertexStateFlag.
Referenced by trackerSeeds().
{ TrajectoryStateOnSurface result; if ( theUseVertexStateFlag && staMuon.second->pt() > 1.0 ) { FreeTrajectoryState iniState = theTSTransformer->initialFreeState(*(staMuon.second), &*theService->magneticField()); //rescale the error at IP adjust(iniState); StateOnTrackerBound fromInside(&*(theService->propagator("PropagatorWithMaterial"))); result = fromInside(iniState); } else { StateOnTrackerBound fromOutside(&*propagator()); result = fromOutside(innerState(staMuon)); } return result; }
bool FastTSGFromPropagation::passSelection | ( | const TrajectoryStateOnSurface & | tsos | ) | const [private] |
check some quantity and beam-spot compatibility and decide to continue
Definition at line 493 of file FastTSGFromPropagation.cc.
References edm::HandleBase::isValid(), theBeamSpot, theSelectStateFlag, theSigmaZ, and zDis().
Referenced by trackerSeeds().
{ if ( !theSelectStateFlag ) return true; else { if ( theBeamSpot.isValid() ) { return ( ( fabs(zDis(tsos) - theBeamSpot->z0() ) < theSigmaZ) ); } else { return ( ( fabs(zDis(tsos)) < theSigmaZ) ); // double theDxyCut = 100; // return ( (zDis(tsos) < theSigmaZ) && (dxyDis(tsos) < theDxyCut) ); } } }
edm::ESHandle<Propagator> FastTSGFromPropagation::propagator | ( | void | ) | const [inline, private] |
Definition at line 78 of file FastTSGFromPropagation.h.
References MuonServiceProxy::propagator(), thePropagatorName, and theService.
Referenced by findMeasurements(), findMeasurements_new(), outerTkState(), and trackerSeeds().
{return theService->propagator(thePropagatorName); }
void FastTSGFromPropagation::setEvent | ( | const edm::Event & | iEvent | ) | [virtual] |
set an event
Reimplemented from TrackerSeedGenerator.
Definition at line 354 of file FastTSGFromPropagation.cc.
References edm::Event::getByLabel(), edm::Event::getByType(), LogTrace, theBeamSpot, theCacheId_MT, theCacheId_TG, theCategory, theGSRecHits, theHitProducer, theMeasTracker, theNavigation, theService, theSimTrackCollectionLabel, theSimTracks, theTkLayerMeasurements, theTracker, and theUpdateStateFlag.
{ bool measTrackerChanged = false; iEvent.getByType(theBeamSpot); // retrieve the MC truth (SimTracks) iEvent.getByLabel(theSimTrackCollectionLabel, theSimTracks); iEvent.getByLabel(theHitProducer, theGSRecHits); unsigned long long newCacheId_MT = theService->eventSetup().get<CkfComponentsRecord>().cacheIdentifier(); if ( theUpdateStateFlag && newCacheId_MT != theCacheId_MT ) { LogTrace(theCategory) << "Measurment Tracker Geometry changed!"; theCacheId_MT = newCacheId_MT; theService->eventSetup().get<CkfComponentsRecord>().get(theMeasTracker); measTrackerChanged = true; } //if ( theUpdateStateFlag ) theMeasTracker->update(iEvent); if ( measTrackerChanged && (&*theMeasTracker) ) { if ( theTkLayerMeasurements ) delete theTkLayerMeasurements; theTkLayerMeasurements = new LayerMeasurements(&*theMeasTracker); } bool trackerGeomChanged = false; unsigned long long newCacheId_TG = theService->eventSetup().get<TrackerRecoGeometryRecord>().cacheIdentifier(); if ( newCacheId_TG != theCacheId_TG ) { LogTrace(theCategory) << "Tracker Reco Geometry changed!"; theCacheId_TG = newCacheId_TG; theService->eventSetup().get<TrackerRecoGeometryRecord>().get(theTracker); trackerGeomChanged = true; } if ( trackerGeomChanged && (&*theTracker) ) { if ( theNavigation ) delete theNavigation; theNavigation = new DirectTrackerNavigation(theTracker); } }
void FastTSGFromPropagation::stateOnDet | ( | const TrajectoryStateOnSurface & | ts, |
unsigned int | detid, | ||
PTrajectoryStateOnDet & | pts | ||
) | const [private] |
A mere copy (without memory leak) of an existing tracking method.
should check if corresponds to m
Definition at line 571 of file FastTSGFromPropagation.cc.
References cond::rpcobgas::detid, i, j, gen::k, TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localParameters(), m, LocalTrajectoryError::matrix(), and TrajectoryStateOnSurface::surfaceSide().
{ const AlgebraicSymMatrix55& m = ts.localError().matrix(); int dim = 5; float localErrors[15]; int k = 0; for (int i=0; i<dim; ++i) { for (int j=0; j<=i; ++j) { localErrors[k++] = m(i,j); } } int surfaceSide = static_cast<int>(ts.surfaceSide()); pts = PTrajectoryStateOnDet( ts.localParameters(), localErrors, detid, surfaceSide); }
const LayerMeasurements* FastTSGFromPropagation::tkLayerMeasurements | ( | ) | const [inline, private] |
Definition at line 72 of file FastTSGFromPropagation.h.
References theTkLayerMeasurements.
Referenced by findMeasurements().
{ return theTkLayerMeasurements; }
void FastTSGFromPropagation::trackerSeeds | ( | const TrackCand & | staMuon, |
const TrackingRegion & | region, | ||
std::vector< TrajectorySeed > & | result | ||
) | [virtual] |
generate seed(s) for a track
Reimplemented from TrackerSeedGenerator.
Definition at line 71 of file FastTSGFromPropagation.cc.
References PV3DBase< T, PVType, FrameType >::basicVector(), CoreSimTrack::charge(), DeDxDiscriminatorTools::charge(), RecHit2DLocalPos::clone(), DirectTrackerNavigation::compatibleLayers(), createSeed(), PTrajectoryStateOnDet::detId(), estimator(), PV3DBase< T, PVType, FrameType >::eta(), findMeasurements_new(), TrajectoryStateOnSurface::freeState(), g, TrackingRecHit::geographicalId(), getRescalingFactor(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), TrackerRecHit::hit(), TrackerGeometry::idToDet(), TrajectoryStateOnSurface::isValid(), LogTrace, oppositeToMomentum, outerTkState(), passSelection(), PV3DBase< T, PVType, FrameType >::perp(), position, propagator(), edm::OwnVector< T, P >::push_back(), DetId::rawId(), GeomDet::surface(), theCategory, theGeometry, theGSRecHits, theNavigation, theResetMethod, theService, theTTRHBuilder, theUpdateStateFlag, SimTrack::trackerSurfaceMomentum(), SimTrack::trackerSurfacePosition(), TrajectoryStateTransform::transientState(), TrajectoryStateUpdator::update(), updator(), and PV3DBase< T, PVType, FrameType >::y().
{ if ( theResetMethod == "discrete" ) getRescalingFactor(staMuon); TrajectoryStateOnSurface staState = outerTkState(staMuon); if ( !staState.isValid() ) { LogTrace(theCategory) << "Error: initial state from L2 muon is invalid."; return; } LogTrace(theCategory) << "begin of trackerSeed:\n staState pos: "<<staState.globalPosition() << " mom: "<<staState.globalMomentum() <<"pos eta: "<<staState.globalPosition().eta() <<"mom eta: "<<staState.globalMomentum().eta(); std::vector<const DetLayer*> nls = theNavigation->compatibleLayers(*(staState.freeState()), oppositeToMomentum); LogTrace(theCategory) << " compatible layers: "<<nls.size(); if ( nls.empty() ) return; int ndesLayer = 0; bool usePredictedState = false; if ( theUpdateStateFlag ) { //use updated states std::vector<TrajectoryMeasurement> alltm; for (std::vector<const DetLayer*>::const_iterator inl = nls.begin(); inl != nls.end(); inl++, ndesLayer++ ) { if ( (*inl == 0) ) break; // if ( (inl != nls.end()-1 ) && ( (*inl)->subDetector() == GeomDetEnumerators::TEC ) && ( (*(inl+1))->subDetector() == GeomDetEnumerators::TOB ) ) continue; alltm = findMeasurements_new(*inl, staState); if ( (!alltm.empty()) ) { LogTrace(theCategory) << "final compatible layer: "<<ndesLayer; break; } } if ( alltm.empty() ) { LogTrace(theCategory) << " NO Measurements Found: eta: "<<staState.globalPosition().eta() <<"pt "<<staState.globalMomentum().perp(); usePredictedState = true; } else { LogTrace(theCategory) << " Measurements for seeds: "<<alltm.size(); std::stable_sort(alltm.begin(),alltm.end(),increasingEstimate()); if ( alltm.size() > 5 ) alltm.erase(alltm.begin() + 5, alltm.end()); const edm::SimTrackContainer* simTracks = &(*theSimTracks); const std::vector<unsigned> theSimTrackIds = theGSRecHits->ids(); TrackerRecHit theSeedHits; std::vector<TrackerRecHit> outerHits; //std::vector<TrajectorySeed> tmpTS; bool isMatch = false; for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) { const TrajectoryStateOnSurface seedState = itm->predictedState(); double preY = seedState.globalPosition().y(); // Check SimTrack TrackingRecHit* aTrackingRecHit; FreeTrajectoryState simtrack_trackerstate; for( unsigned tkId=0; tkId != theSimTrackIds.size(); ++tkId ) { const SimTrack & simtrack = (*simTracks)[theSimTrackIds[tkId]]; SiTrackerGSMatchedRecHit2DCollection::range theRecHitRange = theGSRecHits->get(theSimTrackIds[tkId]); SiTrackerGSMatchedRecHit2DCollection::const_iterator theRecHitRangeIteratorBegin = theRecHitRange.first; SiTrackerGSMatchedRecHit2DCollection::const_iterator theRecHitRangeIteratorEnd = theRecHitRange.second; SiTrackerGSMatchedRecHit2DCollection::const_iterator iterRecHit; GlobalPoint position(simtrack.trackerSurfacePosition().x(), simtrack.trackerSurfacePosition().y(), simtrack.trackerSurfacePosition().z()); GlobalVector momentum(simtrack.trackerSurfaceMomentum().x(), simtrack.trackerSurfaceMomentum().y(), simtrack.trackerSurfaceMomentum().z()); int charge = (int)simtrack.charge(); GlobalTrajectoryParameters glb_parameters(position, momentum, charge, &*theService->magneticField().product()); simtrack_trackerstate = FreeTrajectoryState(glb_parameters); unsigned int outerId = 0; for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) { theSeedHits = TrackerRecHit(&(*iterRecHit), theGeometry); unsigned int id = theSeedHits.hit()->geographicalId().rawId(); if( preY < 0 ) { if( id > outerId ) outerId = id; } else { if( id > outerId ) outerId = id; } } for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) { theSeedHits = TrackerRecHit(&(*iterRecHit), theGeometry); if( itm->recHit()->hit()->geographicalId().rawId() == theSeedHits.hit()->geographicalId().rawId() ) { aTrackingRecHit = theSeedHits.hit()->clone(); TransientTrackingRecHit::ConstRecHitPointer recHit = theTTRHBuilder->build(aTrackingRecHit); if( !recHit ) continue; TrajectoryStateOnSurface updatedTSOS = updator()->update(seedState, *(recHit)); if( updatedTSOS.isValid() && passSelection(updatedTSOS) ) { edm::OwnVector<TrackingRecHit> container; container.push_back(recHit->hit()->clone()); TrajectorySeed ts = createSeed(updatedTSOS, container, recHit->geographicalId()); // check direction const BasicTrajectorySeed* aSeed = &ts; PTrajectoryStateOnDet PTSOD = aSeed->startingState(); TrajectoryStateTransform tsTransform; const GeomDet *g = theGeometry->idToDet(PTSOD.detId()); TrajectoryStateOnSurface tsos = tsTransform.transientState(PTSOD, &(g->surface()), &*theService->magneticField().product()); if( tsos.globalMomentum().basicVector()*seedState.globalMomentum().basicVector() < 0. ) continue; result.push_back(ts); isMatch = true; } } } } } if( !isMatch ) { // if there is no hits w.r.t. TM, find outermost hit for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) { const TrajectoryStateOnSurface seedState = itm->predictedState(); double preY = seedState.globalPosition().y(); // Check SimTrack TrackingRecHit* aTrackingRecHit; FreeTrajectoryState simtrack_trackerstate; for( unsigned tkId=0; tkId != theSimTrackIds.size(); ++tkId ) { const SimTrack & simtrack = (*simTracks)[theSimTrackIds[tkId]]; SiTrackerGSMatchedRecHit2DCollection::range theRecHitRange = theGSRecHits->get(theSimTrackIds[tkId]); SiTrackerGSMatchedRecHit2DCollection::const_iterator theRecHitRangeIteratorBegin = theRecHitRange.first; SiTrackerGSMatchedRecHit2DCollection::const_iterator theRecHitRangeIteratorEnd = theRecHitRange.second; SiTrackerGSMatchedRecHit2DCollection::const_iterator iterRecHit; GlobalPoint position(simtrack.trackerSurfacePosition().x(), simtrack.trackerSurfacePosition().y(), simtrack.trackerSurfacePosition().z()); GlobalVector momentum(simtrack.trackerSurfaceMomentum().x(), simtrack.trackerSurfaceMomentum().y(), simtrack.trackerSurfaceMomentum().z()); int charge = (int)simtrack.charge(); GlobalTrajectoryParameters glb_parameters(position, momentum, charge, &*theService->magneticField().product()); simtrack_trackerstate = FreeTrajectoryState(glb_parameters); unsigned int outerId = 0; for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) { theSeedHits = TrackerRecHit(&(*iterRecHit), theGeometry); unsigned int id = theSeedHits.hit()->geographicalId().rawId(); if( preY < 0 ) { if( id > outerId ) outerId = id; } else { if( id > outerId ) outerId = id; } } for( iterRecHit = theRecHitRangeIteratorBegin; iterRecHit != theRecHitRangeIteratorEnd; ++iterRecHit) { theSeedHits = TrackerRecHit(&(*iterRecHit), theGeometry); if( outerId == theSeedHits.hit()->geographicalId().rawId() ) { aTrackingRecHit = theSeedHits.hit()->clone(); TransientTrackingRecHit::ConstRecHitPointer recHit = theTTRHBuilder->build(aTrackingRecHit); if( !recHit ) continue; TrajectoryStateOnSurface updatedTSOS = updator()->update(seedState, *(recHit)); if( updatedTSOS.isValid() && passSelection(updatedTSOS) ) { edm::OwnVector<TrackingRecHit> container; container.push_back(recHit->hit()->clone()); TrajectorySeed ts = createSeed(updatedTSOS, container, recHit->geographicalId()); // check direction const BasicTrajectorySeed* aSeed = &ts; PTrajectoryStateOnDet PTSOD = aSeed->startingState(); TrajectoryStateTransform tsTransform; const GeomDet *g = theGeometry->idToDet(PTSOD.detId()); TrajectoryStateOnSurface tsos = tsTransform.transientState(PTSOD, &(g->surface()), &*theService->magneticField().product()); if( tsos.globalMomentum().basicVector()*seedState.globalMomentum().basicVector() < 0. ) continue; result.push_back(ts); } } } } } } /* for( unsigned ir = 0; ir < tmpTS.size(); ir++ ) { const BasicTrajectorySeed* aSeed = &((tmpTS)[ir]); PTrajectoryStateOnDet PTSOD = aSeed->startingState(); TrajectoryStateTransform tsTransform; DetId seedDetId(PTSOD.detId()); const GeomDet * g = theGeometry->idToDet(seedDetId); TrajectoryStateOnSurface tsos = tsTransform.transientState(PTSOD, &(g->surface()), &*theService->magneticField().product()); cout << "tsos3 = " << tsos.globalMomentum() << endl; if( _index == ir ) { cout << "tsos4 = " << tsos.globalMomentum() << endl; result.push_back(tmpTS[ir]); } } */ LogTrace(theCategory) << "result: "<<result.size(); return; } } if ( !theUpdateStateFlag || usePredictedState ) { //use predicted states LogTrace(theCategory) << "use predicted state: "; for (std::vector<const DetLayer*>::const_iterator inl = nls.begin(); inl != nls.end(); inl++ ) { if ( !result.empty() || *inl == 0 ) { break; } std::vector<DetLayer::DetWithState> compatDets = (*inl)->compatibleDets(staState, *propagator(), *estimator()); LogTrace(theCategory) << " compatDets "<<compatDets.size(); if ( compatDets.empty() ) continue; TrajectorySeed ts = createSeed(compatDets.front().second, compatDets.front().first->geographicalId()); result.push_back(ts); } LogTrace(theCategory) << "result: "<<result.size(); return; } return; }
const TrajectoryStateUpdator* FastTSGFromPropagation::updator | ( | ) | const [inline, private] |
Definition at line 74 of file FastTSGFromPropagation.h.
References theUpdator.
Referenced by trackerSeeds().
{return theUpdator;}
void FastTSGFromPropagation::validMeasurements | ( | std::vector< TrajectoryMeasurement > & | tms | ) | const [private] |
select valid measurements
Definition at line 453 of file FastTSGFromPropagation.cc.
Referenced by findMeasurements().
{
std::vector<TrajectoryMeasurement>::iterator tmsend = std::remove_if(tms.begin(), tms.end(), isInvalid());
tms.erase(tmsend, tms.end());
return;
}
double FastTSGFromPropagation::zDis | ( | const TrajectoryStateOnSurface & | tsos | ) | const [private] |
Definition at line 512 of file FastTSGFromPropagation.cc.
References TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), PV3DBase< T, PVType, FrameType >::perp(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by passSelection().
{ return tsos.globalPosition().z() - tsos.globalPosition().perp() * tsos.globalMomentum().z()/tsos.globalMomentum().perp(); }
bool FastTSGFromPropagation::theAdjustAtIp [private] |
Definition at line 166 of file FastTSGFromPropagation.h.
Referenced by init().
Definition at line 172 of file FastTSGFromPropagation.h.
Referenced by passSelection(), and setEvent().
unsigned long long FastTSGFromPropagation::theCacheId_MT [private] |
Definition at line 123 of file FastTSGFromPropagation.h.
Referenced by init(), and setEvent().
unsigned long long FastTSGFromPropagation::theCacheId_TG [private] |
Definition at line 124 of file FastTSGFromPropagation.h.
Referenced by init(), and setEvent().
std::string FastTSGFromPropagation::theCategory [private] |
Definition at line 126 of file FastTSGFromPropagation.h.
Referenced by FastTSGFromPropagation(), setEvent(), trackerSeeds(), and ~FastTSGFromPropagation().
Definition at line 170 of file FastTSGFromPropagation.h.
Referenced by init().
Definition at line 164 of file FastTSGFromPropagation.h.
Referenced by adjust(), init(), and ~FastTSGFromPropagation().
const Chi2MeasurementEstimator* FastTSGFromPropagation::theEstimator [private] |
Definition at line 141 of file FastTSGFromPropagation.h.
Referenced by estimator(), init(), and ~FastTSGFromPropagation().
double FastTSGFromPropagation::theFixedErrorRescaling [private] |
Definition at line 149 of file FastTSGFromPropagation.h.
double FastTSGFromPropagation::theFlexErrorRescaling [private] |
Definition at line 147 of file FastTSGFromPropagation.h.
Referenced by adjust(), getRescalingFactor(), and init().
const TrackerGeometry* FastTSGFromPropagation::theGeometry [private] |
Definition at line 135 of file FastTSGFromPropagation.h.
Referenced by init(), and trackerSeeds().
Definition at line 174 of file FastTSGFromPropagation.h.
Referenced by setEvent(), and trackerSeeds().
Definition at line 156 of file FastTSGFromPropagation.h.
Referenced by init(), and setEvent().
double FastTSGFromPropagation::theMaxChi2 [private] |
Definition at line 145 of file FastTSGFromPropagation.h.
Referenced by init().
Definition at line 132 of file FastTSGFromPropagation.h.
Referenced by findMeasurements_new(), and setEvent().
const DirectTrackerNavigation* FastTSGFromPropagation::theNavigation [private] |
Definition at line 134 of file FastTSGFromPropagation.h.
Referenced by init(), setEvent(), trackerSeeds(), and ~FastTSGFromPropagation().
std::string FastTSGFromPropagation::thePropagatorName [private] |
Definition at line 162 of file FastTSGFromPropagation.h.
Referenced by init(), and propagator().
std::string FastTSGFromPropagation::theResetMethod [private] |
Definition at line 158 of file FastTSGFromPropagation.h.
Referenced by adjust(), init(), and trackerSeeds().
bool FastTSGFromPropagation::theSelectStateFlag [private] |
Definition at line 160 of file FastTSGFromPropagation.h.
Referenced by init(), and passSelection().
const MuonServiceProxy* FastTSGFromPropagation::theService [private] |
Definition at line 137 of file FastTSGFromPropagation.h.
Referenced by init(), innerState(), outerTkState(), propagator(), setEvent(), and trackerSeeds().
double FastTSGFromPropagation::theSigmaZ [private] |
Definition at line 168 of file FastTSGFromPropagation.h.
Referenced by init(), and passSelection().
Definition at line 155 of file FastTSGFromPropagation.h.
Referenced by init(), and setEvent().
Definition at line 173 of file FastTSGFromPropagation.h.
Referenced by setEvent().
const LayerMeasurements* FastTSGFromPropagation::theTkLayerMeasurements [private] |
Definition at line 128 of file FastTSGFromPropagation.h.
Referenced by setEvent(), tkLayerMeasurements(), and ~FastTSGFromPropagation().
Definition at line 130 of file FastTSGFromPropagation.h.
Referenced by init(), and setEvent().
Definition at line 143 of file FastTSGFromPropagation.h.
Referenced by createSeed(), init(), innerState(), outerTkState(), and ~FastTSGFromPropagation().
Definition at line 175 of file FastTSGFromPropagation.h.
Referenced by init(), and trackerSeeds().
bool FastTSGFromPropagation::theUpdateStateFlag [private] |
Definition at line 153 of file FastTSGFromPropagation.h.
Referenced by init(), setEvent(), and trackerSeeds().
const TrajectoryStateUpdator* FastTSGFromPropagation::theUpdator [private] |
Definition at line 139 of file FastTSGFromPropagation.h.
Referenced by init(), updator(), and ~FastTSGFromPropagation().
bool FastTSGFromPropagation::theUseVertexStateFlag [private] |
Definition at line 151 of file FastTSGFromPropagation.h.
Referenced by init(), and outerTkState().