File indexing completed on 2024-04-06 12:31:40
0001 #ifndef LooperTrajectoryFilter_H
0002 #define LooperTrajectoryFilter_H
0003
0004 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0005 #include "TrackingTools/TrajectoryFiltering/interface/TrajectoryFilter.h"
0006
0007 class LooperTrajectoryFilter final : public TrajectoryFilter {
0008 public:
0009 explicit LooperTrajectoryFilter(int minNumberOfHitsForLoopers = 13,
0010 int minNumberOfHitsPerLoop = 4,
0011 int extraNumberOfHitsBeforeTheFirstLoop = 4)
0012 : theMinNumberOfHitsForLoopers(minNumberOfHitsForLoopers),
0013 theMinNumberOfHitsPerLoop(minNumberOfHitsPerLoop),
0014 theExtraNumberOfHitsBeforeTheFirstLoop(extraNumberOfHitsBeforeTheFirstLoop) {}
0015
0016 explicit LooperTrajectoryFilter(const edm::ParameterSet& pset, edm::ConsumesCollector& iC) {
0017 theMinNumberOfHitsForLoopers = pset.getParameter<int>("minNumberOfHitsForLoopers");
0018 theMinNumberOfHitsPerLoop = pset.getParameter<int>("minNumberOfHitsPerLoop");
0019 theExtraNumberOfHitsBeforeTheFirstLoop = pset.getParameter<int>("extraNumberOfHitsBeforeTheFirstLoop");
0020 }
0021
0022 static void fillPSetDescription(edm::ParameterSetDescription& iDesc) {
0023 iDesc.add<int>("minNumberOfHitsForLoopers", 13);
0024 iDesc.add<int>("minNumberOfHitsPerLoop", 4);
0025 iDesc.add<int>("extraNumberOfHitsBeforeTheFirstLoop", 4);
0026 }
0027
0028 bool qualityFilter(const Trajectory& traj) const override { return QF<Trajectory>(traj); }
0029 bool qualityFilter(const TempTrajectory& traj) const override { return QF<TempTrajectory>(traj); }
0030
0031 bool toBeContinued(TempTrajectory& traj) const override { return TBC<TempTrajectory>(traj); }
0032 bool toBeContinued(Trajectory& traj) const override { return TBC<Trajectory>(traj); }
0033
0034 std::string name() const override { return "LooperTrajectoryFilter"; }
0035
0036 protected:
0037 template <class T>
0038 bool QF(const T& traj) const {
0039 if (traj.isLooper() && (traj.foundHits() < theMinNumberOfHitsForLoopers))
0040 return false;
0041 else
0042 return true;
0043 }
0044
0045 template <class T>
0046 bool TBC(T& traj) const {
0047 bool ret =
0048 !(traj.isLooper() &&
0049 ((traj.nLoops() * theMinNumberOfHitsPerLoop + theExtraNumberOfHitsBeforeTheFirstLoop) > traj.foundHits()));
0050 if (!ret)
0051 traj.setStopReason(StopReason::LOOPER);
0052 return ret;
0053 }
0054
0055 int theMinNumberOfHitsForLoopers;
0056 int theMinNumberOfHitsPerLoop;
0057 int theExtraNumberOfHitsBeforeTheFirstLoop;
0058 };
0059
0060 #endif