00001 #ifndef RecoMuon_TrackingTools_MuonTimingExtractor_H
00002 #define RecoMuon_TrackingTools_MuonTimingExtractor_H
00003
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <memory>
00018
00019
00020 #include "FWCore/Framework/interface/Frameworkfwd.h"
00021 #include "FWCore/Framework/interface/EDProducer.h"
00022
00023 #include "FWCore/Framework/interface/Event.h"
00024 #include "FWCore/Framework/interface/MakerMacros.h"
00025
00026 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00027
00028 #include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h"
00029
00030 #include "DataFormats/Common/interface/Ref.h"
00031
00032 #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
00033 #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
00034
00035 #include "DataFormats/MuonReco/interface/Muon.h"
00036 #include "DataFormats/MuonReco/interface/MuonFwd.h"
00037 #include "RecoMuon/TrackingTools/interface/MuonSegmentMatcher.h"
00038
00039 #include "DataFormats/TrackReco/interface/Track.h"
00040 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00041 #include "DataFormats/TrackReco/interface/TrackExtra.h"
00042 #include "DataFormats/TrackReco/interface/TrackExtraFwd.h"
00043
00044 #include <vector>
00045
00046 namespace edm {
00047 class ParameterSet;
00048 class EventSetup;
00049 class InputTag;
00050 }
00051
00052 class MuonServiceProxy;
00053
00054 using namespace std;
00055
00056 class MuonTimingExtractor {
00057
00058 public:
00059
00061 MuonTimingExtractor(const edm::ParameterSet&);
00062
00064 ~MuonTimingExtractor();
00065
00066 class TimeMeasurement
00067 {
00068 public:
00069 bool isLeft;
00070 bool isPhi;
00071 float posInLayer;
00072 float distIP;
00073 float timeCorr;
00074 int station;
00075 DetId driftCell;
00076 };
00077
00078 reco::MuonTime fillTiming(edm::Event&, const edm::EventSetup&, reco::TrackRef muonTrack);
00079
00080 private:
00081 double fitT0(double &a, double &b, vector<double> xl, vector<double> yl, vector<double> xr, vector<double> yr );
00082 void rawFit(double &a, double &da, double &b, double &db, const vector<double> hitsx, const vector<double> hitsy);
00083
00084 edm::InputTag DTSegmentTags_;
00085 unsigned int theHitsMin;
00086 double thePruneCut;
00087 bool useSegmentT0;
00088 bool debug;
00089
00090 MuonServiceProxy* theService;
00091
00092 MuonSegmentMatcher *theMatcher;
00093 };
00094
00095 #endif