Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:27:07

0001 #ifndef RecoMuon_MuonSeedCleaner_H
0002 #define RecoMuon_MuonSeedCleaner_H
0003 
0004 /** \class MuonSeedCleaner
0005  *
0006  * Algorith to clean duplicate seeds and select a right one 
0007  *
0008  * author: Shih-Chuan Kao - UCR
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 //muon service
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   /// Constructor
0034   explicit MuonSeedCleaner(const edm::ParameterSet&, edm::ConsumesCollector&&);
0035 
0036   /// Destructor
0037   ~MuonSeedCleaner();
0038 
0039   // Operations
0040 
0041   /// Cache pointer to geometry
0042   //void setGeometry( const MuonDetLayerGeometry* lgeom ) {muonLayers = lgeom;}
0043 
0044   /// Cache pointer to Magnetic field
0045   //void setBField( const MagneticField* theField ) {BField = theField;}
0046 
0047   /// cleaning the seeds
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   //int NRecHitsFromSegment( const MuonTransientTrackingRecHit& rhit );
0053 
0054   std::vector<int> badSeedLayer;
0055 
0056 private:
0057   /// group the seeds
0058   std::vector<SeedContainer> GroupSeeds(std::vector<TrajectorySeed>& seeds);
0059 
0060   /// select seed by balance length and chi2
0061   TrajectorySeed Chi2LengthSelection(std::vector<TrajectorySeed>& seeds);
0062   /// select the highest momentum pt seed
0063   TrajectorySeed LeanHighMomentum(std::vector<TrajectorySeed>& seeds);
0064   /// select the seed with bigger projection cone to next layer
0065   TrajectorySeed BiggerCone(std::vector<TrajectorySeed>& seeds);
0066   /// select the seed with more rechits
0067   TrajectorySeed MoreRecHits(std::vector<TrajectorySeed>& seeds);
0068 
0069   /// filter out the bad pt seeds, if all are bad pt seeds then keep all
0070   bool MomentumFilter(std::vector<TrajectorySeed>& seeds);
0071   /// pick the seeds w/ 1st layer information and w/ more than 1 segments
0072   SeedContainer SeedCandidates(std::vector<TrajectorySeed>& seeds, bool good);
0073   /// check overlapping segment for seeds
0074   unsigned int OverlapSegments(const TrajectorySeed& seed1, const TrajectorySeed& seed2);
0075 
0076   /// retrieve number of rechits& normalized chi2 of associated segments of a seed
0077   double NChi2OfSegment(const TrackingRecHit& rhit);
0078 
0079   double SeedChi2(const TrajectorySeed& seed);
0080   int SeedLength(const TrajectorySeed& seed);
0081 
0082   /// retrieve seed global position
0083   GlobalPoint SeedPosition(const TrajectorySeed& seed);
0084   /// retrieve seed global momentum
0085   GlobalVector SeedMomentum(const TrajectorySeed& seed);
0086 
0087   // obsoleted functions
0088   /// pick the seed by better parameter error
0089   /// collect long seeds
0090   SeedContainer LengthFilter(std::vector<TrajectorySeed>& seeds);
0091 
0092   // This Producer private debug flag
0093   bool debug;
0094 
0095   // Number of Segments from a shower
0096   SegmentContainer ShoweringSegments;
0097   std::vector<int> ShoweringLayers;
0098 
0099   // muon service
0100   MuonServiceProxy* theService;
0101 
0102   // Minimum separation when we can distinguish between 2 muon seeds
0103   // (to suppress combinatorics)
0104 };
0105 #endif