00001 #ifndef JPTJetAnalyzer_H
00002 #define JPTJetAnalyzer_H
00003
00013 #include "FWCore/Framework/interface/Frameworkfwd.h"
00014 #include "DQMOffline/JetMET/interface/JetAnalyzerBase.h"
00015 #include "FWCore/Utilities/interface/InputTag.h"
00016 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00017 #include "DQMServices/Core/interface/MonitorElement.h"
00018 #include "DataFormats/JetReco/interface/JPTJet.h"
00019 #include "DataFormats/JetReco/interface/JPTJetCollection.h"
00020 #include <memory>
00021
00022
00023 #include "GlobalVariables.h"
00024
00025
00026
00027 class DQMStore;
00028 namespace reco {
00029 namespace helper {
00030 class JetIDHelper;
00031 }
00032 }
00033 namespace jptJetAnalysis {
00034 class TrackPropagatorToCalo;
00035 class StripSignalOverNoiseCalculator;
00036 }
00037 namespace jpt {
00038 class MatchedTracks;
00039 }
00040 class JetPlusTrackCorrector;
00041 class JetCorrector;
00042 class TrackingRecHit;
00043 class SiStripRecHit2D;
00044
00045
00047 class JPTJetAnalyzer : public JetAnalyzerBase {
00048 public:
00050 JPTJetAnalyzer(const edm::ParameterSet& config);
00051
00053 virtual ~JPTJetAnalyzer();
00054
00056 void beginJob(DQMStore * dbe);
00057
00059 void analyze(const edm::Event& event, const edm::EventSetup& eventSetup, const reco::JPTJet& jptJet, double& pt1, double& pt2, double& pt3, const int numPV);
00060 void analyze(const edm::Event& event, const edm::EventSetup& eventSetup, const reco::JPTJetCollection& jptJets, const int numPV);
00061
00063 virtual void endJob();
00064
00065 private:
00066
00067
00069 struct HistogramConfig {
00070 bool enabled;
00071 unsigned int nBins;
00072 double min;
00073 double max;
00074 unsigned int nBinsY;
00075 double minY;
00076 double maxY;
00077 HistogramConfig();
00078 HistogramConfig(const unsigned int theNBins, const double theMin, const double theMax);
00079 HistogramConfig(const unsigned int theNBinsX, const double theMinX, const double theMaxX,
00080 const unsigned int theNBinsY, const double theMinY, const double theMaxY);
00081 };
00083 struct TrackHistograms {
00084 MonitorElement* nTracksHisto;
00085 MonitorElement* ptHisto;
00086 MonitorElement* phiHisto;
00087 MonitorElement* etaHisto;
00088
00089
00090 MonitorElement* ptVsEtaHisto;
00091
00092
00093 MonitorElement* trackDirectionJetDRHisto;
00094 MonitorElement* trackImpactPointJetDRHisto;
00095 TrackHistograms();
00096 TrackHistograms(MonitorElement* theNTracksHisto, MonitorElement* thePtHisto, MonitorElement* thePhiHisto, MonitorElement* theEtaHisto,
00097
00098 MonitorElement* thePtVsEtaHisto,
00099
00100 MonitorElement* theTrackDirectionJetDRHisto, MonitorElement* theTrackImpactPointJetDRHisto);
00101 };
00102
00103
00105 void getConfigForHistogram(const std::string& configName, const edm::ParameterSet& psetContainingConfigPSet, std::ostringstream* pDebugStream = NULL);
00107 void getConfigForTrackHistograms(const std::string& tag, const edm::ParameterSet& psetContainingConfigPSet,std::ostringstream* pDebugStream = NULL);
00109 MonitorElement* bookHistogram(const std::string& name, const std::string& title, const std::string& xAxisTitle, DQMStore* dqm);
00110 MonitorElement* book2DHistogram(const std::string& name, const std::string& title, const std::string& xAxisTitle, const std::string& yAxisTitle, DQMStore* dqm);
00111 MonitorElement* bookProfile(const std::string& name, const std::string& title, const std::string& xAxisTitle, const std::string& yAxisTitle, DQMStore* dqm);
00113 void bookHistograms(DQMStore* dqm);
00115 void bookTrackHistograms(TrackHistograms* histos, const std::string& tag, const std::string& titleTag,
00116 MonitorElement* trackDirectionJetDRHisto, MonitorElement* trackImpactPointJetDRHisto, DQMStore* dqm);
00118 void fillHistogram(MonitorElement* histogram, const double value);
00119 void fillHistogram(MonitorElement* histogram, const double valueX, const double valueY);
00121 void fillTrackHistograms(TrackHistograms& allTracksHistos, TrackHistograms& inCaloInVertexHistos,
00122 TrackHistograms& inCaloOutVertexHistos, TrackHistograms& outCaloInVertexHistos,
00123 const reco::TrackRefVector& inVertexInCalo,
00124 const reco::TrackRefVector& outVertexInCalo,
00125 const reco::TrackRefVector& inVertexOutCalo,
00126 const reco::Jet& rawJet);
00127 void fillTrackHistograms(TrackHistograms& histos, const reco::TrackRefVector& tracks, const reco::Jet& rawJet);
00129 void fillSiStripSoNForTracks(const reco::TrackRefVector& tracks);
00130 void fillSiStripHitSoN(const TrackingRecHit& hit);
00131
00132
00133
00134
00136 static double findPtFractionInCone(const reco::TrackRefVector& inConeTracks, const reco::TrackRefVector& outOfConeTracks);
00137
00139 static const char* messageLoggerCatregory;
00140
00141
00143 const std::string histogramPath_;
00145 const bool verbose_;
00147 std::map<std::string,HistogramConfig> histogramConfig_;
00148
00150 const bool writeDQMStore_;
00152 std::string dqmStoreFileName_;
00153
00155 const int n90HitsMin_;
00156 const double fHPDMax_;
00157 const double resEMFMin_;
00158 const double correctedPtMin_;
00159
00161 std::auto_ptr<jptJetAnalysis::TrackPropagatorToCalo> trackPropagator_;
00163 std::auto_ptr<jptJetAnalysis::StripSignalOverNoiseCalculator> sOverNCalculator_;
00165 std::auto_ptr<reco::helper::JetIDHelper> jetID_;
00166
00167
00168 MonitorElement *JetE_, *JetEt_, *JetP_, *JetPt_;
00169
00170 MonitorElement *JetPt1_, *JetPt2_, *JetPt3_;
00171 MonitorElement *JetPx_, *JetPy_, *JetPz_;
00172 MonitorElement *JetEta_, *JetPhi_, *JetDeltaEta_, *JetDeltaPhi_, *JetPhiVsEta_;
00173
00174
00175
00176 MonitorElement *InCaloTrackDirectionJetDRHisto_, *OutCaloTrackDirectionJetDRHisto_;
00177 MonitorElement *InVertexTrackImpactPointJetDRHisto_, *OutVertexTrackImpactPointJetDRHisto_;
00178 MonitorElement *NTracksPerJetHisto_, *NTracksPerJetVsJetEtHisto_, *NTracksPerJetVsJetEtaHisto_;
00179
00180
00181
00182
00183 TrackHistograms allPionHistograms_, inCaloInVertexPionHistograms_, inCaloOutVertexPionHistograms_, outCaloInVertexPionHistograms_;
00184 TrackHistograms allMuonHistograms_, inCaloInVertexMuonHistograms_, inCaloOutVertexMuonHistograms_, outCaloInVertexMuonHistograms_;
00185 TrackHistograms allElectronHistograms_, inCaloInVertexElectronHistograms_, inCaloOutVertexElectronHistograms_, outCaloInVertexElectronHistograms_;
00186
00187
00189 DQMStore* dqm_;
00190 };
00191
00192 inline void JPTJetAnalyzer::fillHistogram(MonitorElement* histogram, const double value)
00193 {
00194 if (histogram) histogram->Fill(value);
00195 }
00196
00197 inline void JPTJetAnalyzer::fillHistogram(MonitorElement* histogram, const double valueX, const double valueY)
00198 {
00199 if (histogram) histogram->Fill(valueX,valueY);
00200 }
00201
00202 #endif