39 theCategory =
"TSGForRoadSearch|TrackerSeedGenerator";
46 if (!errorMatrixPset.
empty()){
76 std::vector<TrajectorySeed> &
result){
104 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.";
120 if (!
IPfts(muon, cIPFTS))
return;
138 if( fabs(z) < ptidc.front()->surface().position().z() ) {
139 inLayer = blc.front();
140 }
else if ( fabs(z) < ptecc.front()->surface().position().z() ) {
141 inLayer = ( z < 0 ) ? ntidc.front() : ptidc.front() ;
143 inLayer = ( z < 0 ) ? ntecc.front() : ptecc.front() ;
147 std::vector< DetLayer::DetWithState > compatible;
148 compatible.reserve(10);
152 while (compatible.size()==0) {
162 inLayer = ( z < 0 ) ? ntidc.front() : ptidc.front() ;
165 inLayer = ( z < 0 ) ? ntecc.front() : ptecc.front() ;
195 if (!
IPfts(muon, cIPFTS))
return;
204 if ( !outer.isValid() ) {
LogDebug(
theCategory) <<
"outer state is not valid. no seed.";
return;}
209 double z = outer.globalPosition().z();
214 LogDebug(
theCategory)<<
"starting looking for a compatible layer from: "<<outer<<
"\nz: "<<z<<
"TEC1 z: "<<ptecc.front()->surface().position().z();
216 unsigned int layerShift=0;
218 if (fabs(z) < ptecc.front()->surface().position().z() ){
219 inLayer = *(blc.rbegin()+layerShift);
222 unsigned int tecIt=1;
223 for (; tecIt!=ptecc.size();tecIt++){
225 <<
"z: "<<ptecc[tecIt]->surface().position().z();
226 if (fabs(z) < ptecc[tecIt]->surface().
position().
z())
227 {inLayer = ( z < 0 ) ? ntecc[tecIt-1] : ptecc[tecIt-1] ;
232 if (!inLayer) {inLayer = ( z < 0 ) ? ntecc.back() : ptecc.back();
238 std::vector< DetLayer::DetWithState > compatible;
239 compatible.reserve(10);
243 while (compatible.size()==0) {
251 if (layerShift>=blc.size()){
252 LogDebug(
theCategory) <<
"all barrel layers are exhausted to find starting state. no seed,";
254 inLayer = *(blc.rbegin()+layerShift);
258 LogDebug(
theCategory) <<
"failed to get a compatible module on a TEC layer, using the last TOB layer.";
259 inLayer = *(blc.rbegin()+layerShift);
264 inLayer = ( z < 0 ) ? ntecc[layerShift] : ptecc[layerShift] ;
286 if (!
IPfts(muon, cIPFTS))
return;
290 if (blc.empty()){
edm::LogError(
theCategory)<<
"want to start from pixel layer, but no barrel exists. trying without pixel.";
309 if ((ppxlc.empty() || npxlc.empty()) && (ptidc.empty() || ptecc.empty()) )
315 std::vector<ForwardDetLayer*>::const_iterator layerIt ;
320 if (fz < fabs(((z>0)?ppxlc:npxlc).
front()->surface().
position().
z())){
321 inLayer = blc.front();}
322 else if (fz < fabs(((z>0)?ppxlc:npxlc).
back()->surface().
position().
z())){
323 layerIt = ((z>0)?ppxlc:npxlc).begin();
325 else if (fz < fabs(((z>0)?ptidc:ntidc).
front()->surface().
position().
z())){
326 layerIt = ((z>0)?ppxlc:npxlc).end()-1;
328 else if (fz < fabs(((z>0)?ptecc:ntecc).
front()->surface().
position().
z())){
329 layerIt = ((z>0)?ptidc:ntidc).begin();
331 else if (fz < fabs(((z>0)?ptecc:ntecc).
back()->surface().
position().
z())){
332 layerIt = ((z>0)?ptecc:ntecc).begin();
340 std::vector< DetLayer::DetWithState > compatible;
341 compatible.reserve(10);
345 if (compatible.size()==0){
346 std::vector<ForwardDetLayer*>::const_iterator pxlEnd = (z>0)? ppxlc.end() : npxlc.end();
347 std::vector<ForwardDetLayer*>::const_iterator tidEnd = (z>0)? ptidc.end() : ntidc.end();
348 std::vector<ForwardDetLayer*>::const_iterator tecEnd = (z>0)? ptecc.end() : ntecc.end();
349 std::vector<ForwardDetLayer*>::const_iterator pxlBegin = (z>0)? ppxlc.begin() : npxlc.begin();
350 std::vector<ForwardDetLayer*>::const_iterator tidBegin = (z>0)? ptidc.begin() : ntidc.begin();
351 std::vector<ForwardDetLayer*>::const_iterator tecBegin = (z>0)? ptecc.begin() : ntecc.begin();
354 if (!dynamic_cast<const ForwardDetLayer*>(inLayer)) layerIt =pxlBegin--;
356 while (compatible.size()==0) {
357 switch ( (*layerIt)->subDetector() ) {
362 if (layerIt==pxlEnd) layerIt=tidBegin;
369 if (layerIt==tidEnd) layerIt = tecBegin;
375 if (layerIt==tecEnd){
400 if (compatible.empty()){
408 for (std::vector<DetLayer::DetWithState >::iterator DWSit = compatible.begin(); DWSit!=compatible.end();++DWSit){
410 const GeomDet * gd = DWSit->first;
416 for (std::vector<TrajectoryMeasurement>::iterator Mit = tmp.begin(); Mit!=tmp.end();++Mit){
424 rhContainer.
push_back( (*trit).get()->clone() ); }}
426 if ( hit->isValid()) {
435 rhContainer.
clear();}
436 rhContainer.
push_back(hit->hit()->clone());
462 LogDebug(
theCategory)<<
"state used to build a bare trajectory seed: \n"<<compatible.front().second
463 <<
"on detector: "<<compatible.front().first->geographicalId().rawId();
470 rhContainer.
push_back( (*trit).get()->clone() ); }}
T getParameter(std::string const &) const
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
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
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const =0
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::ESHandle< MagneticField > magneticField() const
get the magnetic field
static int position[TOTALCHAMBERS][3]
bool theAdjustAtIp
adjust the state at IP or where it is defined for the seed
std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &, const Propagator &, const MeasurementEstimator &est) const
uint32_t rawId() const
get the raw id
bool notAtIPtsos(TrajectoryStateOnSurface &state)
make the adjustement away from PCA state if requested
Chi2MeasurementEstimator * theChi2Estimator
void setEvent(const edm::Event &event)
set the event: update the MeasurementTracker
DetId geographicalId() const
The label of this GeomDet.
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
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()
std::string thePropagatorName
TSGForRoadSearch(const edm::ParameterSet &pset)
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
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.