Back to home page

Project CMSSW displayed by LXR

 
 

    


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