38 theCategory =
"TSGForRoadSearch|TrackerSeedGenerator";
45 if (!errorMatrixPset.
empty()){
102 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.";
118 if (!
IPfts(muon, cIPFTS))
return;
136 if( fabs(z) < ptidc.front()->surface().position().z() ) {
137 inLayer = blc.front();
138 }
else if ( fabs(z) < ptecc.front()->surface().position().z() ) {
139 inLayer = ( z < 0 ) ? ntidc.front() : ptidc.front() ;
141 inLayer = ( z < 0 ) ? ntecc.front() : ptecc.front() ;
145 std::vector< DetLayer::DetWithState > compatible;
146 compatible.reserve(10);
150 while (compatible.size()==0) {
160 inLayer = ( z < 0 ) ? ntidc.front() : ptidc.front() ;
163 inLayer = ( z < 0 ) ? ntecc.front() : ptecc.front() ;
193 if (!
IPfts(muon, cIPFTS))
return;
202 if ( !outer.isValid() ) {
LogDebug(
theCategory) <<
"outer state is not valid. no seed.";
return;}
207 double z = outer.globalPosition().z();
212 LogDebug(
theCategory)<<
"starting looking for a compatible layer from: "<<outer<<
"\nz: "<<z<<
"TEC1 z: "<<ptecc.front()->surface().position().z();
214 unsigned int layerShift=0;
216 if (fabs(z) < ptecc.front()->surface().position().z() ){
217 inLayer = *(blc.rbegin()+layerShift);
220 unsigned int tecIt=1;
221 for (; tecIt!=ptecc.size();tecIt++){
223 <<
"z: "<<ptecc[tecIt]->surface().position().z();
224 if (fabs(z) < ptecc[tecIt]->surface().
position().
z())
225 {inLayer = ( z < 0 ) ? ntecc[tecIt-1] : ptecc[tecIt-1] ;
230 if (!inLayer) {inLayer = ( z < 0 ) ? ntecc.back() : ptecc.back();
236 std::vector< DetLayer::DetWithState > compatible;
237 compatible.reserve(10);
241 while (compatible.size()==0) {
249 if (layerShift>=blc.size()){
250 LogDebug(
theCategory) <<
"all barrel layers are exhausted to find starting state. no seed,";
252 inLayer = *(blc.rbegin()+layerShift);
256 LogDebug(
theCategory) <<
"failed to get a compatible module on a TEC layer, using the last TOB layer.";
257 inLayer = *(blc.rbegin()+layerShift);
262 inLayer = ( z < 0 ) ? ntecc[layerShift] : ptecc[layerShift] ;
284 if (!
IPfts(muon, cIPFTS))
return;
288 if (blc.empty()){
edm::LogError(
theCategory)<<
"want to start from pixel layer, but no barrel exists. trying without pixel.";
307 if ((ppxlc.empty() || npxlc.empty()) && (ptidc.empty() || ptecc.empty()) )
313 std::vector<ForwardDetLayer*>::const_iterator layerIt ;
318 if (fz < fabs(((z>0)?ppxlc:npxlc).
front()->surface().
position().
z())){
319 inLayer = blc.front();}
320 else if (fz < fabs(((z>0)?ppxlc:npxlc).
back()->surface().
position().
z())){
321 layerIt = ((z>0)?ppxlc:npxlc).begin();
323 else if (fz < fabs(((z>0)?ptidc:ntidc).
front()->surface().
position().
z())){
324 layerIt = ((z>0)?ppxlc:npxlc).end()-1;
326 else if (fz < fabs(((z>0)?ptecc:ntecc).
front()->surface().
position().
z())){
327 layerIt = ((z>0)?ptidc:ntidc).begin();
329 else if (fz < fabs(((z>0)?ptecc:ntecc).
back()->surface().
position().
z())){
330 layerIt = ((z>0)?ptecc:ntecc).begin();
338 std::vector< DetLayer::DetWithState > compatible;
339 compatible.reserve(10);
343 if (compatible.size()==0){
344 std::vector<ForwardDetLayer*>::const_iterator pxlEnd = (z>0)? ppxlc.end() : npxlc.end();
345 std::vector<ForwardDetLayer*>::const_iterator tidEnd = (z>0)? ptidc.end() : ntidc.end();
346 std::vector<ForwardDetLayer*>::const_iterator tecEnd = (z>0)? ptecc.end() : ntecc.end();
347 std::vector<ForwardDetLayer*>::const_iterator pxlBegin = (z>0)? ppxlc.begin() : npxlc.begin();
348 std::vector<ForwardDetLayer*>::const_iterator tidBegin = (z>0)? ptidc.begin() : ntidc.begin();
349 std::vector<ForwardDetLayer*>::const_iterator tecBegin = (z>0)? ptecc.begin() : ntecc.begin();
352 if (!dynamic_cast<const ForwardDetLayer*>(inLayer)) layerIt =pxlBegin--;
354 while (compatible.size()==0) {
355 switch ( (*layerIt)->subDetector() ) {
360 if (layerIt==pxlEnd) layerIt=tidBegin;
367 if (layerIt==tidEnd) layerIt = tecBegin;
373 if (layerIt==tecEnd){
398 if (compatible.empty()){
406 for (std::vector<DetLayer::DetWithState >::iterator DWSit = compatible.begin(); DWSit!=compatible.end();++DWSit){
408 const GeomDet * gd = DWSit->first;
414 for (std::vector<TrajectoryMeasurement>::iterator Mit = tmp.begin(); Mit!=tmp.end();++Mit){
422 rhContainer.
push_back( (*trit).get()->clone() ); }}
424 if ( hit->isValid()) {
433 rhContainer.
clear();}
434 rhContainer.
push_back(hit->hit()->clone());
460 LogDebug(
theCategory)<<
"state used to build a bare trajectory seed: \n"<<compatible.front().second
461 <<
"on detector: "<<compatible.front().first->geographicalId().rawId();
468 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
uint32_t rawId() const
get the raw id
bool notAtIPtsos(TrajectoryStateOnSurface &state)
make the adjustement away from PCA state if requested
Chi2MeasurementEstimator * theChi2Estimator
virtual std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &startingState, const Propagator &, const MeasurementEstimator &) const =0
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 trackerSeeds(const TrackCand &, const TrackingRegion &, BTSeedCollection &)
generated seed(s) for a track. the tracking region is not used.
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
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.