45 LogTrace(metname) <<
"constructor called" << endl;
57 string seedPosition = par.
getParameter<
string>(
"SeedPosition");
63 <<
"Wrong seed position chosen in StandAloneMuonFilter::StandAloneMuonFilter ParameterSet"
65 <<
"Possible choices are:"
67 <<
"SeedPosition = in or SeedPosition = out";
111 LogTrace(
"Muon|RecoMuon|StandAloneMuonTrajectoryBuilder")
112 <<
"StandAloneMuonTrajectoryBuilder destructor called" << endl;
125 ~Resetter() {
if(mf) mf->reset();}
131 Resetter fwReset(
filter());
150 vector<Trajectory> seedTrajectories;
154 if(!seedTrajectories.empty()) {
156 lastTSOS = lastTM.updatedState();
157 lastDetId = lastTM.recHit()->geographicalId();
166 LogTrace(metname) <<
"Trajectory State on Surface before the extrapolation"<<endl;
170 LogTrace(metname) <<
"The RecSegment relies on: "<<endl;
178 filter()->
refit(inputFromSeed.second,inputFromSeed.first,trajectoryFW);
181 if( trajectoryFW.
empty() ) {
182 LogTrace(metname) <<
"Forward trajectory EMPTY! No trajectory will be loaded!" << endl;
183 return trajectoryContainer;
190 LogTrace(metname) <<
"StandAloneMuonTrajectoryBuilder filter output " << endl;
215 if(
filter()->goodState() ) {
218 else if(
filter()->isCompatibilitySatisfied() ) {
219 int foundValidRh = trajectoryFW.
foundHits();
220 LogTrace(metname) <<
"Compatibility satisfied after Forward filter, but too few valid RecHits ("
221 << foundValidRh <<
")." << endl
222 <<
"A trajectory with only invalid RecHits will be loaded!" << endl;
224 trajectoryContainer.push_back(
new Trajectory(trajectoryFW));
225 return trajectoryContainer;
229 trajectoryContainer.push_back(
new Trajectory(defaultTraj));
230 return trajectoryContainer;
233 LogTrace(metname) <<
"Compatibility NOT satisfied after Forward filter! No trajectory will be loaded!" << endl;
237 return trajectoryContainer;
241 LogTrace(metname) <<
"Number of DT/CSC/RPC chamber used (fw): "
249 LogTrace(metname) <<
"Only forward refit requested. No backward refit will be performed!"<<endl;
254 pair<bool,Trajectory> refitResult =
refitter()->
refit(trajectoryFW);
255 if(refitResult.first) {
256 trajectoryContainer.push_back(
new Trajectory(refitResult.second));
257 LogTrace(metname) <<
"StandAloneMuonTrajectoryBuilder refit output " << endl ;
258 LogTrace(metname) << debug.
dumpTSOS(refitResult.second.lastMeasurement().updatedState());
261 trajectoryContainer.push_back(
new Trajectory(trajectoryFW));
264 trajectoryContainer.push_back(
new Trajectory(trajectoryFW));
266 LogTrace(metname) <<
"Trajectory saved" << endl;
267 return trajectoryContainer;
277 seedForBW = seedVoid;
296 LogWarning(metname) <<
"Wrong seed type for the backward filter!";
299 Trajectory trajectoryBW(seedForBW,bwDirection);
307 LogTrace(metname) <<
"StandAloneMuonTrajectoryBuilder BW filter output " << endl ;
311 <<
"Number of RecHits: " << trajectoryBW.
foundHits() <<
"\n"
312 <<
"Number of DT/CSC/RPC chamber used (bw): "
368 else if(
bwfilter()->isCompatibilitySatisfied() ) {
369 LogTrace(metname) <<
"Compatibility satisfied after Backward filter, but too few valid RecHits ("
370 << trajectoryBW.
foundHits() <<
")." << endl
371 <<
"The (good) result of FW filter will be loaded!" << endl;
372 trajectoryContainer.push_back(
new Trajectory(trajectoryFW));
373 return trajectoryContainer;
376 LogTrace(metname) <<
"Compatibility NOT satisfied after Backward filter!" << endl
377 <<
"The Forward trajectory will be invalidated and then loaded!" << endl;
380 trajectoryContainer.push_back(
new Trajectory(defaultTraj));
381 return trajectoryContainer;
386 pair<bool,Trajectory> refitResult =
refitter()->
refit(trajectoryBW);
387 if(refitResult.first) {
388 trajectoryContainer.push_back(
new Trajectory(refitResult.second));
389 LogTrace(metname) <<
"StandAloneMuonTrajectoryBuilder Refit output " << endl;
390 LogTrace(metname) << debug.
dumpTSOS(refitResult.second.lastMeasurement().updatedState());
393 trajectoryContainer.push_back(
new Trajectory(trajectoryBW));
396 trajectoryContainer.push_back(
new Trajectory(trajectoryBW));
398 LogTrace(metname) <<
"Trajectory saved" << endl;
400 return trajectoryContainer;
410 DetId seedDetId(aDetId);
417 LogTrace(metname)<<
"Seed's id: "<< endl ;
421 const DetLayer *initialLayer =
theService->detLayerGeometry()->idToLayer( seedDetId );
423 LogTrace(metname)<<
"Seed's detLayer: "<< endl ;
426 LogTrace(metname)<<
"TrajectoryStateOnSurface before propagation:" << endl;
433 vector<const DetLayer*> detLayers;
442 edm::LogError(metname) <<
"No Properly Navigation Selected!!"<<endl;
445 LogTrace(metname) <<
"There are "<< detLayers.size() <<
" compatible layers"<<endl;
449 if(detLayers.size()){
451 LogTrace(metname) <<
"Compatible layers:"<<endl;
452 for( vector<const DetLayer*>::const_iterator layer = detLayers.begin();
453 layer != detLayers.end(); layer++){
454 LogTrace(metname) << debug.
dumpMuonId((*layer)->basicComponents().front()->geographicalId());
458 const DetLayer* finalLayer = detLayers.back();
461 else LogTrace(metname) <<
"Most external one:"<<endl;
472 LogTrace(metname) <<
"Trajectory State on Surface after the extrapolation"<<endl;
477 LogTrace(metname)<<
"Extrapolation failed. Keep the original seed state" <<endl;
480 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.
std::vector< const DetLayer * > compatibleLayers(Args &&...args) const
Returns all layers compatible.
ConstRecHitPointer const & recHit() const
SeedTransformer * theSeedTransformer
void createDefaultTrajectory(const Trajectory &, Trajectory &)
std::string dumpLayer(const DetLayer *layer) const
recoMuon::SeedPosition theSeedPosition
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
FreeTrajectoryState * freeState(bool withErrors=true) 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
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 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.
StandAloneMuonTrajectoryBuilder(const edm::ParameterSet &, const MuonServiceProxy *)
Constructor with Parameter set and MuonServiceProxy.
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)