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.size()==0) {
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.size()==0) {
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.size()==0){
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.size()==0) {
367 switch ( (*layerIt)->subDetector() ) {
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.
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
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
size_t recHitsSize() const
Get number of RecHits. (Warning, this includes invalid hits, which are not physical hits)...
bool IPfts(const reco::Track &, FreeTrajectoryState &)
get the FTS for a Track: adjusting the error matrix if requested
edm::ESHandle< MeasurementTracker > theMeasurementTracker
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
GlobalPoint globalPosition() const
void makeSeeds_2(const reco::Track &, std::vector< TrajectorySeed > &)
not implemented
edm::EDGetTokenT< MeasurementTrackerEvent > theMeasurementTrackerEventToken
edm::ESHandle< MagneticField > magneticField() const
get the magnetic field
bool theAdjustAtIp
adjust the state at IP or where it is defined for the seed
uint32_t rawId() const
get the raw id
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const =0
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
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
Chi2MeasurementEstimator * theChi2Estimator
void setEvent(const edm::Event &event)
set the event: update the MeasurementTracker
DetId geographicalId() const
The label of this GeomDet.
TSGForRoadSearch(const edm::ParameterSet &pset, edm::ConsumesCollector &IC)
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
void makeSeeds_1(const reco::Track &, std::vector< TrajectorySeed > &)
not implemented
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
tuple Chi2MeasurementEstimator
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
void trackerSeeds(const TrackCand &, const TrackingRegion &, const TrackerTopology *, BTSeedCollection &)
generated seed(s) for a track. the tracking region is not used.
T const * product() const
void init(const MuonServiceProxy *service)
initialize the service
std::string thePropagatorCompatibleName
std::vector< std::vector< double > > tmp
void makeSeeds_4(const reco::Track &, std::vector< TrajectorySeed > &)
inside-out: innermost Pixel/Strip layer
virtual ~TSGForRoadSearch()
char data[epos_bytes_allocation]
static int position[264][3]
std::string thePropagatorName
const PositionType & position() const
TrajectoryStateUpdator * theUpdator
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
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.