46 theOverlappingChambersFlag(
true)
49 string fitDirectionName = par.
getParameter<
string>(
"FitDirection");
55 <<
"Wrong fit direction chosen in StandAloneMuonFilter::StandAloneMuonFilter ParameterSet" 57 <<
"Possible choices are:" 59 <<
"FitDirection = insideOut or FitDirection = outsideIn";
90 bool enableDTMeasurement = par.
getParameter<
bool>(
"EnableDTMeasurement");
91 bool enableCSCMeasurement = par.
getParameter<
bool>(
"EnableCSCMeasurement");
92 bool enableRPCMeasurement = par.
getParameter<
bool>(
"EnableRPCMeasurement");
93 bool enableGEMMeasurement = par.
getParameter<
bool>(
"EnableGEMMeasurement");
94 bool enableME0Measurement = par.
getParameter<
bool>(
"EnableME0Measurement");
103 enableCSCMeasurement,
104 enableRPCMeasurement,
105 enableGEMMeasurement,
106 enableME0Measurement);
108 theRPCLoneliness = (!(enableDTMeasurement && enableCSCMeasurement)) ? enableRPCMeasurement :
false;
113 LogTrace(
"Muon|RecoMuon|StandAloneMuonFilter")
114 <<
"StandAloneMuonFilter destructor called"<<endl;
158 LogError(
"Muon|RecoMuon|StandAloneMuonFilter")
159 <<
"Unrecognized module type in incrementChamberCounters";
174 LogError(
"Muon|RecoMuon|StandAloneMuonFilter")
175 <<
"Unrecognized module type in incrementCompatibleChamberCounters";
184 vector<const DetLayer*> detLayers;
188 detLayers =
theService->muonNavigationSchool()->compatibleLayers(*initialLayer,fts,propDir);
191 detLayers.insert(detLayers.begin(),initialLayer);
198 edm::LogError(
"Muon|RecoMuon|StandAloneMuonFilter") <<
"No Properly Navigation Selected!!"<<endl;
214 LogTrace(metname) <<
"Starting the refit"<<endl;
223 LogTrace(metname)<<
"compatible layers found: "<<detLayers.size()<<endl;
225 vector<const DetLayer*>::const_iterator layer;
228 for ( layer = detLayers.begin(); layer!= detLayers.end(); ++layer ) {
252 if( bestMeasurements.empty() && lastdEta > 0.1) {
253 LogTrace(metname) <<
"No measurement and big eta variation wrt seed" << endl
254 <<
"trying with lastButOneUpdatedTSOS";
261 if( bestMeasurements.empty() && lastdEta > 0.1) {
262 LogTrace(metname) <<
"No measurement and big eta variation wrt seed" << endl
263 <<
"tryng with seed TSOS";
270 if(!bestMeasurements.empty()) {
273 for(std::vector<TrajectoryMeasurement>::const_iterator tmItr = bestMeasurements.begin();
274 tmItr != bestMeasurements.end(); ++tmItr){
275 added |=
update(*layer, &(*tmItr), trajectory);
287 LogTrace(metname)<<
"No best measurement found"<<endl;
297 std::vector<TrajectoryMeasurement>
303 std::vector<TrajectoryMeasurement>
result;
304 std::vector<TrajectoryMeasurement> measurements;
308 std::vector<TrajectoryMeasurementGroup> measurementGroups =
312 LogTrace(metname) <<
"Reversing the order of groupedMeasurements as the direction of the fit is outside-in";
313 reverse(measurementGroups.begin(),measurementGroups.end());
319 for(std::vector<TrajectoryMeasurementGroup>::const_iterator tmGroupItr = measurementGroups.begin();
320 tmGroupItr != measurementGroups.end(); ++tmGroupItr){
322 measurements = tmGroupItr->measurements();
323 LogTrace(metname) <<
"Number of Trajectory Measurement: " << measurements.size();
328 if(bestMeasurement) result.push_back(*bestMeasurement);
333 LogTrace(metname) <<
"Number of Trajectory Measurement: " << measurements.size();
337 if(bestMeasurement) result.push_back(*bestMeasurement);
352 LogTrace(metname)<<
"best measurement found" <<
"\n" 353 <<
"updating the trajectory..."<<endl;
357 LogTrace(metname)<<
"trajectory updated: "<<result.first<<endl;
365 if(result.second.isValid())
375 defTraj.
reserve(oldMeas.size());
377 for (Trajectory::DataContainer::const_iterator itm = oldMeas.begin(); itm != oldMeas.end(); itm++) {
378 if( !(*itm).recHit()->isValid() )
379 defTraj.
push( *itm, (*itm).estimate() );
382 invRhPtr->invalidateHit();
383 TrajectoryMeasurement invRhMeas( (*itm).forwardPredictedState(), (*itm).updatedState(), invRhPtr, (*itm).estimate(), (*itm).layer() );
T getParameter(std::string const &) const
MeasurementEstimator * estimator() const
access at the estimator
NavigationDirection fitDirection() const
Return the fit direction.
double theMaxChi2
The max allowed chi2 to accept a rechit in the fit.
MuonTrajectoryUpdator * theMuonUpdator
the muon updator (it doesn't inhert from an updator, but it has one!)
void createDefaultTrajectory(const Trajectory &, Trajectory &)
std::string dumpLayer(const DetLayer *layer) const
const std::string metname
void incrementCompatibleChamberCounters(const DetLayer *layer)
void makeFirstTime()
reset the theFirstTSOSFlag
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
GlobalPoint globalPosition() const
int cscCompatibleChambers
TrajectoryStateOnSurface theLastCompatibleTSOS
the trajectory state on the last compatible surface
void reserve(unsigned int n)
bool theRPCLoneliness
True if there are only the RPC measurements.
int totalCompatibleChambers
void refit(const TrajectoryStateOnSurface &initialState, const DetLayer *, Trajectory &trajectory)
Perform the inner-outward fitting.
std::vector< TrajectoryMeasurementGroup > groupedMeasurements(const DetLayer *layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, const edm::Event &iEvent)
std::string thePropagatorName
the propagator name
std::vector< const DetLayer * > compatibleLayers(const FreeTrajectoryState &fts, PropagationDirection timeDirection) const
DataContainer const & measurements() const
std::string dumpTSOS(const TrajectoryStateOnSurface &tsos) const
MuonDetLayerMeasurements * theMeasurementExtractor
The Measurement extractor.
std::vector< TrajectoryMeasurement > DataContainer
std::shared_ptr< MuonTransientTrackingRecHit > MuonRecHitPointer
void incrementChamberCounters(const DetLayer *layer)
Increment the DT,CSC,RPC counters.
FreeTrajectoryState const * freeTrajectoryState(bool withErrors=true) const
int gemCompatibleChambers
virtual void setEvent(const edm::Event &event)
Pass the Event to the algo at each event.
MeasurementContainer measurements(const DetLayer *layer, const GeomDet *det, const TrajectoryStateOnSurface &stateOnDet, const MeasurementEstimator &est, const edm::Event &iEvent)
GlobalVector momentum() const
const Propagator * propagator() const
access at the propagator
StandAloneMuonFilter(const edm::ParameterSet &par, const MuonServiceProxy *service, edm::ConsumesCollector &iC)
Constructor.
bool theOverlappingChambersFlag
PropagationDirection propagationDirection() const
Return the propagation direction.
MuonTrajectoryUpdator * updator() const
access at the muon updator
int me0CompatibleChambers
bool update(const DetLayer *layer, const TrajectoryMeasurement *meas, Trajectory &trajectory)
std::vector< const DetLayer * > theDetLayers
the det layer used in the reconstruction
NavigationDirection theFitDirection
the propagation direction
std::vector< const DetLayer * > compatibleLayers(const DetLayer *initialLayer, const FreeTrajectoryState &fts, PropagationDirection propDir)
Set the rigth Navigation.
MeasurementEstimator * theEstimator
The Estimator.
TrajectoryStateOnSurface theLastButOneUpdatedTSOS
the trajectory state on the last but one available surface
void setEvent(const edm::Event &)
set event
int rpcCompatibleChambers
TrajectoryStateOnSurface theLastUpdatedTSOS
the trajectory state on the last available surface
TrajectoryMeasurement * findBestMeasurement(std::vector< TrajectoryMeasurement > &measC, const Propagator *propagator)
return the Tm with the best chi2: no cut applied.
MuonBestMeasurementFinder * bestMeasurementFinder() const
Access to the best measurement finder.
virtual ~StandAloneMuonFilter()
Destructor.
virtual std::pair< bool, TrajectoryStateOnSurface > update(const TrajectoryMeasurement *measurement, Trajectory &trajectory, const Propagator *propagator)
update the Trajectory with the TrajectoryMeasurement
std::string theNavigationType
std::vector< TrajectoryMeasurement > findBestMeasurements(const DetLayer *layer, const TrajectoryStateOnSurface &tsos)
static MuonRecHitPointer specificBuild(const GeomDet *geom, const TrackingRecHit *rh)
void push(const TrajectoryMeasurement &tm)
MuonBestMeasurementFinder * theBestMeasurementFinder
The best measurement finder: search for the best measurement among the TMs available.
const MuonServiceProxy * theService