Go to the documentation of this file.00001 #ifndef RecoMuon_TrackingTools_MuonErrorMatrixAdjuster_H
00002 #define RecoMuon_TrackingTools_MuonErrorMatrixAdjuster_H
00003
00020 #include <memory>
00021 #include "FWCore/Framework/interface/Frameworkfwd.h"
00022 #include "FWCore/Framework/interface/EDProducer.h"
00023
00024 #include "FWCore/Framework/interface/Event.h"
00025 #include <FWCore/Framework/interface/EventSetup.h>
00026
00027 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00028
00029 #include <DataFormats/TrackReco/interface/Track.h>
00030 #include <DataFormats/TrackReco/interface/TrackExtra.h>
00031 #include <DataFormats/TrackingRecHit/interface/TrackingRecHit.h>
00032
00033 #include "FWCore/Utilities/interface/InputTag.h"
00034
00035 class FreeTrajectoryState;
00036 class MuonErroMatrix;
00037 class MagneticField;
00038 class MuonErrorMatrix;
00039 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00040
00041 #include <FWCore/Framework/interface/ESHandle.h>
00042
00043
00044
00045
00046
00047 class MuonErrorMatrixAdjuster : public edm::EDProducer {
00048 public:
00050 explicit MuonErrorMatrixAdjuster(const edm::ParameterSet&);
00052 ~MuonErrorMatrixAdjuster();
00053
00054 private:
00056 virtual void beginJob() ;
00057 virtual void produce(edm::Event&, const edm::EventSetup&);
00058 virtual void endJob() ;
00059
00061 reco::TrackBase::CovarianceMatrix fix_cov_matrix(const reco::TrackBase::CovarianceMatrix& error_matrix, const GlobalVector& momentum);
00063 void multiply(reco::TrackBase::CovarianceMatrix & revised_matrix, const reco::TrackBase::CovarianceMatrix & scale_matrix);
00065 bool divide(reco::TrackBase::CovarianceMatrix & num_matrix, const reco::TrackBase::CovarianceMatrix & denom_matrix);
00066
00068 reco::Track makeTrack(const reco::Track & recotrack_orig,
00069 const FreeTrajectoryState & PCAstate);
00070
00072 bool selectTrack(const reco::Track & recotrack_orig);
00073
00075 reco::TrackExtra * makeTrackExtra(const reco::Track & recotrack_orig,
00076 reco::Track & recotrack,
00077 reco::TrackExtraCollection& TEcol);
00078
00080 bool attachRecHits(const reco::Track & recotrack_orig,
00081 reco::Track & recotrack,
00082 reco::TrackExtra & trackextra,
00083 TrackingRecHitCollection& RHcol);
00084
00085
00087 std::string theCategory;
00088
00090 edm::InputTag theTrackLabel;
00091
00093 std::string theInstanceName;
00094
00096 bool theRescale;
00097
00099 edm::ParameterSet theMatrixProvider_pset;
00100 MuonErrorMatrix * theMatrixProvider;
00101
00102
00104 edm::ESHandle<MagneticField> theField;
00105
00107 edm::RefProd<reco::TrackExtraCollection> theRefprodTE;
00108 edm::Ref<reco::TrackExtraCollection>::key_type theTEi;
00109
00111 edm::RefProd<TrackingRecHitCollection> theRefprodRH;
00112 edm::Ref<TrackingRecHitCollection>::key_type theRHi;
00113
00114 };
00115
00116 #endif