Go to the documentation of this file.00001 #ifndef Validation_RecoMuon_MuonTrackAnalyzer_H
00002 #define Validation_RecoMuon_MuonTrackAnalyzer_H
00003
00012
00013 #include "FWCore/Framework/interface/EDAnalyzer.h"
00014 #include "FWCore/Utilities/interface/InputTag.h"
00015
00016 #include "DQMServices/Core/interface/DQMStore.h"
00017 #include "DQMServices/Core/interface/MonitorElement.h"
00018 #include "FWCore/ServiceRegistry/interface/Service.h"
00019
00020 #include "FWCore/Framework/interface/ESHandle.h"
00021 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
00022 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
00023
00024 namespace edm {class ParameterSet; class Event; class EventSetup;}
00025 namespace reco {class TransientTrack;}
00026
00027 class TFile;
00028 class TH1F;
00029 class TH2F;
00030 class HTrackVariables;
00031 class HTrack;
00032
00033 class TrajectoryStateOnSurface;
00034 class FreeTrajectoryState;
00035 class MuonServiceProxy;
00036 class MuonPatternRecoDumper;
00037 class TrajectorySeed;
00038 class MuonUpdatorAtVertex;
00039
00040 class MuonTrackAnalyzer: public edm::EDAnalyzer {
00041
00042 public:
00043 enum EtaRange{all,barrel,endcap};
00044
00045 public:
00047 MuonTrackAnalyzer(const edm::ParameterSet& pset);
00048
00050 virtual ~MuonTrackAnalyzer();
00051
00052
00053
00054 void analyze(const edm::Event & event, const edm::EventSetup& eventSetup);
00055 void tracksAnalysis(const edm::Event & event, const edm::EventSetup& eventSetup,
00056 edm::Handle<edm::SimTrackContainer> simTracks);
00057 void seedsAnalysis(const edm::Event & event, const edm::EventSetup& eventSetup,
00058 edm::Handle<edm::SimTrackContainer> simTracks);
00059
00060
00061 virtual void beginJob() ;
00062 virtual void endJob() ;
00063 protected:
00064
00065 private:
00066 bool isInTheAcceptance(double eta);
00067 bool checkMuonSimHitPresence(const edm::Event & event,
00068 edm::Handle<edm::SimTrackContainer> simTracks);
00069
00070 std::pair<SimTrack,double> getSimTrack(TrajectoryStateOnSurface &tsos,
00071 edm::Handle<edm::SimTrackContainer> simTracks);
00072
00073 void fillPlots(const edm::Event &event, edm::Handle<edm::SimTrackContainer> &simTracks);
00074 void fillPlots(reco::TransientTrack &track, SimTrack &simTrack);
00075 void fillPlots(TrajectoryStateOnSurface &recoTSOS,SimTrack &simState,
00076 HTrack*, MuonPatternRecoDumper&);
00077 void fillPlots(FreeTrajectoryState &recoFTS,SimTrack &simTrack,
00078 HTrack *histo, MuonPatternRecoDumper &debug);
00079
00080
00081 TrajectoryStateOnSurface getSeedTSOS(const TrajectorySeed& seed);
00082
00083 DQMStore* dbe_;
00084 std::string dirName_;
00085
00086 std::string out;
00087
00088
00089 EtaRange theEtaRange;
00090
00091 edm::InputTag theTracksLabel;
00092 edm::InputTag theSeedsLabel;
00093 edm::InputTag theCSCSimHitLabel;
00094 edm::InputTag theDTSimHitLabel;
00095 edm::InputTag theRPCSimHitLabel;
00096
00097 bool doTracksAnalysis;
00098 bool doSeedsAnalysis;
00099 std::string theSeedPropagatorName;
00100
00101 MuonServiceProxy *theService;
00102 MuonUpdatorAtVertex *theUpdator;
00103
00104
00105 MonitorElement *hChi2;
00106 MonitorElement *hChi2Norm;
00107 MonitorElement *hHitsPerTrack;
00108 MonitorElement *hDof;
00109 MonitorElement *hChi2Prob;
00110
00111 MonitorElement *hNumberOfTracks;
00112 MonitorElement *hNumberOfTracksVsEta;
00113 MonitorElement *hChargeVsEta;
00114 MonitorElement *hChargeVsPt;
00115 MonitorElement *hPtRecVsPtGen;
00116
00117 MonitorElement *hChi2VsEta;
00118 MonitorElement *hChi2NormVsEta;
00119 MonitorElement *hHitsPerTrackVsEta;
00120 MonitorElement *hDofVsEta;
00121 MonitorElement *hChi2ProbVsEta;
00122 MonitorElement *hDeltaPtVsEta;
00123 MonitorElement *hDeltaPt_In_Out_VsEta;
00124
00125 HTrackVariables *hSimTracks;
00126
00127 HTrack *hRecoSeedInner;
00128 HTrack *hRecoSeedPCA;
00129 HTrack *hRecoTracksPCA;
00130 HTrack *hRecoTracksInner;
00131 HTrack *hRecoTracksOuter;
00132
00133
00134 int numberOfSimTracks;
00135 int numberOfRecTracks;
00136 };
00137 #endif
00138
00139