File indexing completed on 2024-04-06 12:31:40
0001 #ifndef LostHitsFractionTrajectoryFilter_H
0002 #define LostHitsFractionTrajectoryFilter_H
0003
0004 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0005 #include "TrackingTools/TrajectoryFiltering/interface/TrajectoryFilter.h"
0006
0007 class LostHitsFractionTrajectoryFilter final : public TrajectoryFilter {
0008 public:
0009 explicit LostHitsFractionTrajectoryFilter(float maxLostHitsFraction = 999., float constantValue = 1)
0010 : theMaxLostHitsFraction(maxLostHitsFraction), theConstantValue(constantValue) {}
0011
0012 explicit LostHitsFractionTrajectoryFilter(const edm::ParameterSet& pset, edm::ConsumesCollector& iC) {
0013 theMaxLostHitsFraction = pset.getParameter<double>("maxLostHitsFraction");
0014 theConstantValue = pset.getParameter<double>("constantValueForLostHitsFractionFilter");
0015 }
0016
0017 static void fillPSetDescription(edm::ParameterSetDescription& iDesc) {
0018 iDesc.add<double>("maxLostHitsFraction", .1);
0019 iDesc.add<double>("constantValueForLostHitsFractionFilter", 2.);
0020 }
0021
0022 bool qualityFilter(const Trajectory& traj) const override { return TrajectoryFilter::qualityFilterIfNotContributing; }
0023 bool qualityFilter(const TempTrajectory& traj) const override {
0024 return TrajectoryFilter::qualityFilterIfNotContributing;
0025 }
0026
0027 bool toBeContinued(TempTrajectory& traj) const override { return TBC<TempTrajectory>(traj); }
0028 bool toBeContinued(Trajectory& traj) const override { return TBC<Trajectory>(traj); }
0029
0030 std::string name() const override { return "LostHitsFractionTrajectoryFilter"; }
0031
0032 inline edm::ParameterSetDescription getFilledConfigurationDescription() {
0033 edm::ParameterSetDescription desc;
0034 desc.add<double>("maxLostHitsFraction", 999.);
0035 desc.add<double>("constantValueForLostHitsFractionFilter", 1.);
0036 return desc;
0037 }
0038
0039 protected:
0040 template <class T>
0041 bool TBC(T& traj) const {
0042 bool ret = traj.lostHits() <= theConstantValue + theMaxLostHitsFraction * traj.foundHits();
0043 if (!ret)
0044 traj.setStopReason(StopReason::LOST_HIT_FRACTION);
0045 return ret;
0046 }
0047
0048 float theMaxLostHitsFraction;
0049 float theConstantValue;
0050 };
0051
0052 #endif