File indexing completed on 2025-01-09 23:33:54
0001 #ifndef RecoMuon_MuonSeedCleaner_H
0002 #define RecoMuon_MuonSeedCleaner_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "FWCore/Framework/interface/FrameworkfwdMostUsed.h"
0013 #include <FWCore/ParameterSet/interface/ParameterSet.h>
0014 #include <RecoMuon/MeasurementDet/interface/MuonDetLayerMeasurements.h>
0015 #include <DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h>
0016
0017
0018 #include <RecoMuon/TrackingTools/interface/MuonServiceProxy.h>
0019
0020 #include <vector>
0021
0022 class DetLayer;
0023 class MuonDetLayerGeometry;
0024 class MagneticField;
0025
0026 typedef std::vector<TrajectorySeed> SeedContainer;
0027
0028 class MuonSeedCleaner {
0029 public:
0030 typedef MuonTransientTrackingRecHit::MuonRecHitContainer SegmentContainer;
0031 typedef std::deque<bool> BoolContainer;
0032
0033
0034 explicit MuonSeedCleaner(const edm::ParameterSet&, edm::ConsumesCollector&&);
0035
0036
0037 ~MuonSeedCleaner();
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 std::vector<TrajectorySeed> seedCleaner(const edm::EventSetup& eventSetup, std::vector<TrajectorySeed>& seeds);
0049
0050 int NRecHitsFromSegment(const TrackingRecHit& rhit);
0051 int NRecHitsFromSegment(MuonTransientTrackingRecHit* rhit);
0052
0053
0054 std::vector<int> badSeedLayer;
0055
0056 private:
0057
0058 std::vector<SeedContainer> GroupSeeds(std::vector<TrajectorySeed>& seeds);
0059
0060
0061 TrajectorySeed Chi2LengthSelection(std::vector<TrajectorySeed>& seeds);
0062
0063 TrajectorySeed LeanHighMomentum(std::vector<TrajectorySeed>& seeds);
0064
0065 TrajectorySeed BiggerCone(std::vector<TrajectorySeed>& seeds);
0066
0067 TrajectorySeed MoreRecHits(std::vector<TrajectorySeed>& seeds);
0068
0069
0070 bool MomentumFilter(std::vector<TrajectorySeed>& seeds);
0071
0072 SeedContainer SeedCandidates(std::vector<TrajectorySeed>& seeds, bool good);
0073
0074 unsigned int OverlapSegments(const TrajectorySeed& seed1, const TrajectorySeed& seed2);
0075
0076
0077 double NChi2OfSegment(const TrackingRecHit& rhit);
0078
0079 double SeedChi2(const TrajectorySeed& seed);
0080 int SeedLength(const TrajectorySeed& seed);
0081
0082
0083 GlobalPoint SeedPosition(const TrajectorySeed& seed);
0084
0085 GlobalVector SeedMomentum(const TrajectorySeed& seed);
0086
0087
0088
0089
0090 SeedContainer LengthFilter(std::vector<TrajectorySeed>& seeds);
0091
0092
0093 bool debug;
0094
0095
0096 SegmentContainer ShoweringSegments;
0097 std::vector<int> ShoweringLayers;
0098
0099
0100 MuonServiceProxy* theService;
0101
0102
0103
0104 };
0105 #endif