46 LogTrace(metname) <<
"constructor called" << endl;
58 string seedPosition = par.
getParameter<
string>(
"SeedPosition");
64 <<
"Wrong seed position chosen in StandAloneMuonFilter::StandAloneMuonFilter ParameterSet"
66 <<
"Possible choices are:"
68 <<
"SeedPosition = in or SeedPosition = out";
112 LogTrace(
"Muon|RecoMuon|StandAloneMuonTrajectoryBuilder")
113 <<
"StandAloneMuonTrajectoryBuilder destructor called" << endl;
126 ~Resetter() {
if(mf) mf->reset();}
132 Resetter fwReset(
filter());
151 vector<Trajectory> seedTrajectories;
155 if(!seedTrajectories.empty()) {
157 lastTSOS = lastTM.updatedState();
158 lastDetId = lastTM.recHit()->geographicalId();
167 LogTrace(metname) <<
"Trajectory State on Surface before the extrapolation"<<endl;
171 LogTrace(metname) <<
"The RecSegment relies on: "<<endl;
179 filter()->
refit(inputFromSeed.second,inputFromSeed.first,trajectoryFW);
182 if( trajectoryFW.
empty() ) {
183 LogTrace(metname) <<
"Forward trajectory EMPTY! No trajectory will be loaded!" << endl;
184 return trajectoryContainer;
191 LogTrace(metname) <<
"StandAloneMuonTrajectoryBuilder filter output " << endl;
216 if(
filter()->goodState() ) {
219 else if(
filter()->isCompatibilitySatisfied() ) {
220 int foundValidRh = trajectoryFW.
foundHits();
221 LogTrace(metname) <<
"Compatibility satisfied after Forward filter, but too few valid RecHits ("
222 << foundValidRh <<
")." << endl
223 <<
"A trajectory with only invalid RecHits will be loaded!" << endl;
225 trajectoryContainer.push_back(
new Trajectory(trajectoryFW));
226 return trajectoryContainer;
230 trajectoryContainer.push_back(
new Trajectory(defaultTraj));
231 return trajectoryContainer;
234 LogTrace(metname) <<
"Compatibility NOT satisfied after Forward filter! No trajectory will be loaded!" << endl;
239 return trajectoryContainer;
243 LogTrace(metname) <<
"Number of DT/CSC/RPC/GEM chamber used (fw): "
252 LogTrace(metname) <<
"Only forward refit requested. No backward refit will be performed!"<<endl;
257 pair<bool,Trajectory> refitResult =
refitter()->
refit(trajectoryFW);
258 if(refitResult.first) {
259 trajectoryContainer.push_back(
new Trajectory(refitResult.second));
260 LogTrace(metname) <<
"StandAloneMuonTrajectoryBuilder refit output " << endl ;
261 LogTrace(metname) << debug.
dumpTSOS(refitResult.second.lastMeasurement().updatedState());
264 trajectoryContainer.push_back(
new Trajectory(trajectoryFW));
267 trajectoryContainer.push_back(
new Trajectory(trajectoryFW));
269 LogTrace(metname) <<
"Trajectory saved" << endl;
270 return trajectoryContainer;
280 seedForBW = seedVoid;
299 LogWarning(metname) <<
"Wrong seed type for the backward filter!";
302 Trajectory trajectoryBW(seedForBW,bwDirection);
310 LogTrace(metname) <<
"StandAloneMuonTrajectoryBuilder BW filter output " << endl ;
314 <<
"Number of RecHits: " << trajectoryBW.
foundHits() <<
"\n"
315 <<
"Number of DT/CSC/RPC/GEM chamber used (bw): "
372 else if(
bwfilter()->isCompatibilitySatisfied() ) {
373 LogTrace(metname) <<
"Compatibility satisfied after Backward filter, but too few valid RecHits ("
374 << trajectoryBW.
foundHits() <<
")." << endl
375 <<
"The (good) result of FW filter will be loaded!" << endl;
376 trajectoryContainer.push_back(
new Trajectory(trajectoryFW));
377 return trajectoryContainer;
380 LogTrace(metname) <<
"Compatibility NOT satisfied after Backward filter!" << endl
381 <<
"The Forward trajectory will be invalidated and then loaded!" << endl;
384 trajectoryContainer.push_back(
new Trajectory(defaultTraj));
385 return trajectoryContainer;
390 pair<bool,Trajectory> refitResult =
refitter()->
refit(trajectoryBW);
391 if(refitResult.first) {
392 trajectoryContainer.push_back(
new Trajectory(refitResult.second));
393 LogTrace(metname) <<
"StandAloneMuonTrajectoryBuilder Refit output " << endl;
394 LogTrace(metname) << debug.
dumpTSOS(refitResult.second.lastMeasurement().updatedState());
397 trajectoryContainer.push_back(
new Trajectory(trajectoryBW));
400 trajectoryContainer.push_back(
new Trajectory(trajectoryBW));
402 LogTrace(metname) <<
"Trajectory saved" << endl;
404 return trajectoryContainer;
414 DetId seedDetId(aDetId);
421 LogTrace(metname)<<
"Seed's id: "<< endl ;
425 const DetLayer *initialLayer =
theService->detLayerGeometry()->idToLayer( seedDetId );
427 LogTrace(metname)<<
"Seed's detLayer: "<< endl ;
430 LogTrace(metname)<<
"TrajectoryStateOnSurface before propagation:" << endl;
437 vector<const DetLayer*> detLayers;
440 detLayers =
theService->muonNavigationSchool()->compatibleLayers(*initialLayer, *initialState.
freeState(),detLayerOrder);
446 edm::LogError(metname) <<
"No Properly Navigation Selected!!"<<endl;
449 LogTrace(metname) <<
"There are "<< detLayers.size() <<
" compatible layers"<<endl;
453 if(detLayers.size()){
455 LogTrace(metname) <<
"Compatible layers:"<<endl;
456 for( vector<const DetLayer*>::const_iterator layer = detLayers.begin();
457 layer != detLayers.end(); layer++){
458 LogTrace(metname) << debug.
dumpMuonId((*layer)->basicComponents().front()->geographicalId());
462 const DetLayer* finalLayer = detLayers.back();
465 else LogTrace(metname) <<
"Most external one:"<<endl;
476 LogTrace(metname) <<
"Trajectory State on Surface after the extrapolation"<<endl;
481 LogTrace(metname)<<
"Extrapolation failed. Keep the original seed state" <<endl;
484 LogTrace(metname)<<
"No compatible layers. Keep the original seed state" <<endl;
bool empty() const
True if trajectory has no measurements.
T getParameter(std::string const &) const
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
ConstRecHitPointer const & recHit() const
SeedTransformer * theSeedTransformer
void createDefaultTrajectory(const Trajectory &, Trajectory &)
std::string dumpLayer(const DetLayer *layer) const
recoMuon::SeedPosition theSeedPosition
StandAloneMuonTrajectoryBuilder(const edm::ParameterSet &, const MuonServiceProxy *, edm::ConsumesCollector &iC)
Constructor with Parameter set and MuonServiceProxy.
const std::string metname
StandAloneMuonFilter * theFilter
int getRPCChamberUsed() const
MuonCandidate::TrajectoryContainer TrajectoryContainer
std::string theBWSeedType
int getRPCCompatibleChambers() const
TrajectoryStateOnSurface lastUpdatedTSOS() const
the Trajectory state on the last surface of the fitting
void refit(const TrajectoryStateOnSurface &initialState, const DetLayer *, Trajectory &trajectory)
Perform the inner-outward fitting.
int getDTChamberUsed() const
std::vector< const DetLayer * > compatibleLayers(const FreeTrajectoryState &fts, PropagationDirection timeDirection) const
std::string dumpMuonId(const DetId &id) const
std::string dumpTSOS(const TrajectoryStateOnSurface &tsos) const
int getCSCCompatibleChambers() const
int getDTCompatibleChambers() const
virtual void setEvent(const edm::Event &event)
Pass the Event to the algo at each event.
StandAloneMuonFilter * theBWFilter
TrajectoryMeasurement const & lastMeasurement() const
FreeTrajectoryState const * freeState(bool withErrors=true) const
void addParameter(std::string const &name, T const &value)
StandAloneMuonFilter * bwfilter() const
actual filter
unsigned int detId() const
RefitResult refit(const Trajectory &)
virtual void setEvent(const edm::Event &event)
Pass the Event to the algo at each event.
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
GlobalVector momentum() const
std::string theNavigationType
std::pair< const DetLayer *, TrajectoryStateOnSurface > DetLayerWithState
PTrajectoryStateOnDet const & startingState() const
int getGEMChamberUsed() const
int getGEMCompatibleChambers() const
int getCSCChamberUsed() const
StandAloneMuonFilter * filter() const
pre-filter
TrajectoryContainer trajectories(const TrajectorySeed &)
return a container of the reconstructed trajectories compatible with a given seed ...
const MuonServiceProxy * theService
int getTotalCompatibleChambers() const
std::string theSeedPropagatorName
Propagator for the seed extrapolation.
virtual ~StandAloneMuonTrajectoryBuilder()
Destructor.
StandAloneMuonRefitter * theRefitter
StandAloneMuonRefitter * refitter() const
refitter of the hits container
TrajectoryStateOnSurface lastCompatibleTSOS() const
the Trajectory state on the last compatible surface
DetLayerWithState propagateTheSeedTSOS(TrajectoryStateOnSurface &aTSOS, DetId &aDetId)