Go to the documentation of this file.00001 #ifndef RecoMuon_MuonSeedBuilder_H
00002 #define RecoMuon_MuonSeedBuilder_H
00003
00015 #include <FWCore/ParameterSet/interface/ParameterSet.h>
00016 #include <RecoMuon/MeasurementDet/interface/MuonDetLayerMeasurements.h>
00017 #include <DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h>
00018
00019
00020 #include <RecoMuon/TrackingTools/interface/MuonServiceProxy.h>
00021
00022 #include<vector>
00023
00024 class DetLayer;
00025 class MuonDetLayerGeometry;
00026 class MagneticField;
00027 class MuonSeedCreator;
00028 class MuonSeedCleaner;
00029
00030 typedef std::vector<TrajectorySeed> SeedContainer;
00031
00032 class MuonSeedBuilder
00033 {
00034
00035 public:
00036
00037 typedef MuonTransientTrackingRecHit::MuonRecHitContainer SegmentContainer;
00038 typedef std::deque<bool> BoolContainer;
00039
00041 explicit MuonSeedBuilder(const edm::ParameterSet&);
00042
00044 ~MuonSeedBuilder();
00045
00046
00047
00049 void setGeometry( const MuonDetLayerGeometry* lgeom ) {muonLayers = lgeom;}
00050
00052 void setBField( const MagneticField* theField ) {BField = theField;}
00053
00055 int build( edm::Event& event, const edm::EventSetup& eventSetup, TrajectorySeedCollection& seeds );
00056
00057 std::vector<int> badSeedLayer;
00058
00059
00060 private:
00061
00063 bool foundMatchingSegment( int type, SegmentContainer& protoTrack, SegmentContainer& segments,
00064 BoolContainer& usedSeg, float& eta_temp, float& phi_temp, int& lastLayer, bool& showeringBefore );
00065
00067 std::vector<TrajectorySeed> seedCleaner(const edm::EventSetup& eventSetup, std::vector<TrajectorySeed>& seeds );
00068
00070 double etaError(const GlobalPoint gp, double rErr);
00071
00073 bool IdentifyShowering( SegmentContainer& segs, BoolContainer& usedSeg, float& eta_last, float& phi_last, int layer, int& NShoweringSegments );
00074
00075
00077
00079
00080
00082
00083
00084
00086
00088
00090
00091
00093
00094
00095
00096
00097
00099
00101
00102
00103
00104 bool debug;
00105
00106
00107 bool enableDTMeasurement;
00108
00109
00110 bool enableCSCMeasurement;
00111
00112
00113 int minCSCHitsPerSegment;
00114
00115
00116 int minDTHitsPerSegment;
00117
00118
00119 float maxDeltaEtaCSC;
00120 float maxDeltaPhiCSC;
00121 float maxDeltaEtaOverlap;
00122 float maxDeltaPhiOverlap;
00123 float maxDeltaEtaDT;
00124 float maxDeltaPhiDT;
00125
00126
00127 int NShowerSeg;
00128 SegmentContainer ShoweringSegments;
00129 std::vector<int> ShoweringLayers;
00131 edm::InputTag theDTSegmentLabel;
00132
00134 edm::InputTag theCSCSegmentLabel;
00135
00137 MuonSeedCreator* muonSeedCreate_;
00138 MuonSeedCleaner* muonSeedClean_;
00139
00140
00141 const MuonDetLayerGeometry* muonLayers;
00142
00143
00144 const MagneticField* BField;
00145
00146
00147 MuonServiceProxy* theService;
00148
00149
00150
00151 float maxEtaResolutionDT;
00152 float maxEtaResolutionCSC;
00153 float maxPhiResolutionDT;
00154 float maxPhiResolutionCSC;
00155 float theMinMomentum;
00156
00157 };
00158 #endif
00159