39 theCategory =
"TSGForRoadSearch|TrackerSeedGenerator";
46 if (!errorMatrixPset.
empty()){
86 std::vector<TrajectorySeed> &
result){
114 if (fts.position().mag()==0 && fts.momentum().mag()==0){
edm::LogError(
theCategory)<<
"initial state of muon is (0,0,0)(0,0,0). no seed.";
130 if (!
IPfts(muon, cIPFTS))
return;
148 if( fabs(z) < ptidc.front()->surface().position().z() ) {
149 inLayer = blc.front();
150 }
else if ( fabs(z) < ptecc.front()->surface().position().z() ) {
151 inLayer = ( z < 0 ) ? ntidc.front() : ptidc.front() ;
153 inLayer = ( z < 0 ) ? ntecc.front() : ptecc.front() ;
157 std::vector< DetLayer::DetWithState > compatible;
158 compatible.reserve(10);
162 while (compatible.empty()) {
172 inLayer = ( z < 0 ) ? ntidc.front() : ptidc.front() ;
175 inLayer = ( z < 0 ) ? ntecc.front() : ptecc.front() ;
205 if (!
IPfts(muon, cIPFTS))
return;
214 if ( !outer.isValid() ) {
LogDebug(
theCategory) <<
"outer state is not valid. no seed.";
return;}
219 double z = outer.globalPosition().z();
224 LogDebug(
theCategory)<<
"starting looking for a compatible layer from: "<<outer<<
"\nz: "<<z<<
"TEC1 z: "<<ptecc.front()->surface().position().z();
226 unsigned int layerShift=0;
228 if (fabs(z) < ptecc.front()->surface().position().z() ){
229 inLayer = *(blc.rbegin()+layerShift);
232 unsigned int tecIt=1;
233 for (; tecIt!=ptecc.size();tecIt++){
235 <<
"z: "<<ptecc[tecIt]->surface().position().z();
236 if (fabs(z) < ptecc[tecIt]->surface().
position().
z())
237 {inLayer = ( z < 0 ) ? ntecc[tecIt-1] : ptecc[tecIt-1] ;
242 if (!inLayer) {inLayer = ( z < 0 ) ? ntecc.back() : ptecc.back();
248 std::vector< DetLayer::DetWithState > compatible;
249 compatible.reserve(10);
253 while (compatible.empty()) {
261 if (layerShift>=blc.size()){
262 LogDebug(
theCategory) <<
"all barrel layers are exhausted to find starting state. no seed,";
264 inLayer = *(blc.rbegin()+layerShift);
268 LogDebug(
theCategory) <<
"failed to get a compatible module on a TEC layer, using the last TOB layer.";
269 inLayer = *(blc.rbegin()+layerShift);
274 inLayer = ( z < 0 ) ? ntecc[layerShift] : ptecc[layerShift] ;
296 if (!
IPfts(muon, cIPFTS))
return;
300 if (blc.empty()){
edm::LogError(
theCategory)<<
"want to start from pixel layer, but no barrel exists. trying without pixel.";
319 if ((ppxlc.empty() || npxlc.empty()) && (ptidc.empty() || ptecc.empty()) )
325 std::vector<const ForwardDetLayer*>::const_iterator layerIt ;
330 if (fz < fabs(((z>0)?ppxlc:npxlc).front()->surface().
position().
z())){
331 inLayer = blc.front();}
332 else if (fz < fabs(((z>0)?ppxlc:npxlc).back()->surface().
position().
z())){
333 layerIt = ((z>0)?ppxlc:npxlc).begin();
335 else if (fz < fabs(((z>0)?ptidc:ntidc).front()->surface().
position().
z())){
336 layerIt = ((z>0)?ppxlc:npxlc).end()-1;
338 else if (fz < fabs(((z>0)?ptecc:ntecc).front()->surface().
position().
z())){
339 layerIt = ((z>0)?ptidc:ntidc).begin();
341 else if (fz < fabs(((z>0)?ptecc:ntecc).back()->surface().
position().
z())){
342 layerIt = ((z>0)?ptecc:ntecc).begin();
350 std::vector< DetLayer::DetWithState > compatible;
351 compatible.reserve(10);
355 if (compatible.empty()){
356 std::vector<const ForwardDetLayer*>::const_iterator pxlEnd = (z>0)? ppxlc.end() : npxlc.end();
357 std::vector<const ForwardDetLayer*>::const_iterator tidEnd = (z>0)? ptidc.end() : ntidc.end();
358 std::vector<const ForwardDetLayer*>::const_iterator tecEnd = (z>0)? ptecc.end() : ntecc.end();
359 std::vector<const ForwardDetLayer*>::const_iterator pxlBegin = (z>0)? ppxlc.begin() : npxlc.begin();
360 std::vector<const ForwardDetLayer*>::const_iterator tidBegin = (z>0)? ptidc.begin() : ntidc.begin();
361 std::vector<const ForwardDetLayer*>::const_iterator tecBegin = (z>0)? ptecc.begin() : ntecc.begin();
364 if (!dynamic_cast<const ForwardDetLayer*>(inLayer)) layerIt =pxlBegin--;
366 while (compatible.empty()) {
372 if (layerIt==pxlEnd) layerIt=tidBegin;
379 if (layerIt==tidEnd) layerIt = tecBegin;
385 if (layerIt==tecEnd){
410 if (compatible.empty()){
418 for (std::vector<DetLayer::DetWithState >::iterator DWSit = compatible.begin(); DWSit!=compatible.end();++DWSit){
420 const GeomDet * gd = DWSit->first;
426 for (std::vector<TrajectoryMeasurement>::iterator Mit = tmp.begin(); Mit!=tmp.end();++Mit){
434 rhContainer.
push_back( (*trit)->clone() ); }}
436 if ( hit->isValid()) {
445 rhContainer.
clear();}
446 rhContainer.
push_back(hit->hit()->clone());
472 LogDebug(
theCategory)<<
"state used to build a bare trajectory seed: \n"<<compatible.front().second
473 <<
"on detector: "<<compatible.front().first->geographicalId().rawId();
480 rhContainer.
push_back( (*trit)->clone() ); }}
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
MeasurementDetWithData idToDet(const DetId &id) const
Previous MeasurementDetSystem interface.
edm::InputTag theMeasurementTrackerEventTag
void adjust(FreeTrajectoryState &state)
adjust the error matrix on the state
const edm::EventSetup & eventSetup() const
get the whole EventSetup
edm::ESHandle< GeometricSearchTracker > theGeometricSearchTracker
std::pair< const Trajectory *, reco::TrackRef > TrackCand
std::vector< ForwardDetLayer const * > const & posPixelForwardLayers() const
size_t recHitsSize() const
Get number of RecHits. (Warning, this includes invalid hits, which are not physical hits)...
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
bool IPfts(const reco::Track &, FreeTrajectoryState &)
get the FTS for a Track: adjusting the error matrix if requested
edm::ESHandle< MeasurementTracker > theMeasurementTracker
GlobalPoint globalPosition() const
void makeSeeds_2(const reco::Track &, std::vector< TrajectorySeed > &)
not implemented
void trackerSeeds(const TrackCand &, const TrackingRegion &, const TrackerTopology *, BTSeedCollection &) override
generated seed(s) for a track. the tracking region is not used.
std::vector< BarrelDetLayer const * > const & tobLayers() const
edm::EDGetTokenT< MeasurementTrackerEvent > theMeasurementTrackerEventToken
edm::ESHandle< MagneticField > magneticField() const
get the magnetic field
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const =0
bool theAdjustAtIp
adjust the state at IP or where it is defined for the seed
std::vector< ForwardDetLayer const * > const & negPixelForwardLayers() const
uint32_t rawId() const
get the raw id
void init(const MuonServiceProxy *service) override
initialize the service
std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &tsos2, const Propagator &prop, const MeasurementEstimator &est) const
bool notAtIPtsos(TrajectoryStateOnSurface &state)
make the adjustement away from PCA state if requested
Chi2MeasurementEstimator * theChi2Estimator
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
DetId geographicalId() const
The label of this GeomDet.
TSGForRoadSearch(const edm::ParameterSet &pset, edm::ConsumesCollector &IC)
void setEvent(const edm::Event &event) override
set the event: update the MeasurementTracker
SubDetector subDetGeom[21]
std::vector< BarrelDetLayer const * > const & pixelBarrelLayers() const
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
void makeSeeds_1(const reco::Track &, std::vector< TrajectorySeed > &)
not implemented
const MuonServiceProxy * theProxyService
const MeasurementTrackerEvent * theMeasurementTrackerEvent
void makeSeeds_3(const reco::Track &, std::vector< TrajectorySeed > &)
outside-in: outermost Strip layer
void makeSeeds_0(const reco::Track &, std::vector< TrajectorySeed > &)
oseed from inside-out: innermost Strip layer
MuonErrorMatrix * theErrorMatrixAdjuster
void pushTrajectorySeed(const reco::Track &muon, std::vector< DetLayer::DetWithState > &compatible, PropagationDirection direction, std::vector< TrajectorySeed > &result) const
add the seed(s) to the collection of seeds
std::vector< BarrelDetLayer const * > const & tibLayers() const
std::vector< ForwardDetLayer const * > const & posTecLayers() const
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
std::string thePropagatorCompatibleName
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
std::vector< ForwardDetLayer const * > const & negTidLayers() const
std::vector< std::vector< double > > tmp
void makeSeeds_4(const reco::Track &, std::vector< TrajectorySeed > &)
inside-out: innermost Pixel/Strip layer
std::vector< ForwardDetLayer const * > const & posTidLayers() const
char data[epos_bytes_allocation]
static int position[264][3]
std::string thePropagatorName
~TSGForRoadSearch() override
std::vector< ForwardDetLayer const * > const & negTecLayers() const
const PositionType & position() const
TrajectoryStateUpdator * theUpdator
T const * product() const
virtual void compatibleDetsV(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetWithState > &result) const
edm::ESHandle< Propagator > propagator(std::string propagatorName) const
get the propagator
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.