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 class DQMStore;
00023 namespace reco {
00024 namespace helper {
00025 class JetIDHelper;
00026 }
00027 }
00028 namespace jptJetAnalysis {
00029 class TrackPropagatorToCalo;
00030 class StripSignalOverNoiseCalculator;
00031 }
00032 namespace jpt {
00033 class MatchedTracks;
00034 }
00035 class JetPlusTrackCorrector;
00036 class JetCorrector;
00037 class TrackingRecHit;
00038 class SiStripRecHit2D;
00039
00040
00042 class JPTJetAnalyzer : public JetAnalyzerBase {
00043 public:
00045 JPTJetAnalyzer(const edm::ParameterSet& config);
00046
00048 virtual ~JPTJetAnalyzer();
00049
00051 void beginJob(DQMStore * dbe);
00052
00054 void analyze(const edm::Event& event, const edm::EventSetup& eventSetup, const reco::JPTJet& jptJet, double& pt1, double& pt2, double& pt3);
00055 void analyze(const edm::Event& event, const edm::EventSetup& eventSetup, const reco::JPTJetCollection& jptJets);
00056
00058 virtual void endJob();
00059
00060 private:
00061
00062
00064 struct HistogramConfig {
00065 bool enabled;
00066 unsigned int nBins;
00067 double min;
00068 double max;
00069 unsigned int nBinsY;
00070 double minY;
00071 double maxY;
00072 HistogramConfig();
00073 HistogramConfig(const unsigned int theNBins, const double theMin, const double theMax);
00074 HistogramConfig(const unsigned int theNBinsX, const double theMinX, const double theMaxX,
00075 const unsigned int theNBinsY, const double theMinY, const double theMaxY);
00076 };
00078 struct TrackHistograms {
00079 MonitorElement* nTracksHisto;
00080 MonitorElement* ptHisto;
00081 MonitorElement* phiHisto;
00082 MonitorElement* etaHisto;
00083 MonitorElement* nHitsHisto;
00084 MonitorElement* nLayersHisto;
00085 MonitorElement* ptVsEtaHisto;
00086 MonitorElement* dzHisto;
00087 MonitorElement* dxyHisto;
00088 MonitorElement* trackDirectionJetDRHisto;
00089 MonitorElement* trackImpactPointJetDRHisto;
00090 TrackHistograms();
00091 TrackHistograms(MonitorElement* theNTracksHisto, MonitorElement* thePtHisto, MonitorElement* thePhiHisto, MonitorElement* theEtaHisto,
00092 MonitorElement* theNHitsHisto, MonitorElement* theNLayersHisto, MonitorElement* thePtVsEtaHisto,
00093 MonitorElement* dzHisto, MonitorElement* dxyHisto,
00094 MonitorElement* theTrackDirectionJetDRHisto, MonitorElement* theTrackImpactPointJetDRHisto);
00095 };
00096
00097
00099 void getConfigForHistogram(const std::string& configName, const edm::ParameterSet& psetContainingConfigPSet, std::ostringstream* pDebugStream = NULL);
00101 void getConfigForTrackHistograms(const std::string& tag, const edm::ParameterSet& psetContainingConfigPSet,std::ostringstream* pDebugStream = NULL);
00103 MonitorElement* bookHistogram(const std::string& name, const std::string& title, const std::string& xAxisTitle, DQMStore* dqm);
00104 MonitorElement* book2DHistogram(const std::string& name, const std::string& title, const std::string& xAxisTitle, const std::string& yAxisTitle, DQMStore* dqm);
00105 MonitorElement* bookProfile(const std::string& name, const std::string& title, const std::string& xAxisTitle, const std::string& yAxisTitle, DQMStore* dqm);
00107 void bookHistograms(DQMStore* dqm);
00109 void bookTrackHistograms(TrackHistograms* histos, const std::string& tag, const std::string& titleTag,
00110 MonitorElement* trackDirectionJetDRHisto, MonitorElement* trackImpactPointJetDRHisto, DQMStore* dqm);
00112 void fillHistogram(MonitorElement* histogram, const double value);
00113 void fillHistogram(MonitorElement* histogram, const double valueX, const double valueY);
00115 void fillTrackHistograms(TrackHistograms& allTracksHistos, TrackHistograms& inCaloInVertexHistos,
00116 TrackHistograms& inCaloOutVertexHistos, TrackHistograms& outCaloInVertexHistos,
00117 const reco::TrackRefVector& inVertexInCalo,
00118 const reco::TrackRefVector& outVertexInCalo,
00119 const reco::TrackRefVector& inVertexOutCalo,
00120 const reco::Jet& rawJet);
00121 void fillTrackHistograms(TrackHistograms& histos, const reco::TrackRefVector& tracks, const reco::Jet& rawJet);
00123 void fillSiStripSoNForTracks(const reco::TrackRefVector& tracks);
00124 void fillSiStripHitSoN(const TrackingRecHit& hit);
00125 void fillSiStripHitSoNForSingleHit(const SiStripRecHit2D& hit);
00127 static double findPtFractionInCone(const reco::TrackRefVector& inConeTracks, const reco::TrackRefVector& outOfConeTracks);
00128
00130 static const char* messageLoggerCatregory;
00131
00132
00134 const std::string histogramPath_;
00136 const bool verbose_;
00138 std::map<std::string,HistogramConfig> histogramConfig_;
00139
00141 const bool writeDQMStore_;
00143 std::string dqmStoreFileName_;
00144
00146 const int n90HitsMin_;
00147 const double fHPDMax_;
00148 const double resEMFMin_;
00149 const double correctedPtMin_;
00150
00152 std::auto_ptr<jptJetAnalysis::TrackPropagatorToCalo> trackPropagator_;
00154 std::auto_ptr<jptJetAnalysis::StripSignalOverNoiseCalculator> sOverNCalculator_;
00156 std::auto_ptr<reco::helper::JetIDHelper> jetID_;
00157
00158
00159 MonitorElement *JetE_, *JetEt_, *JetP_, *JetMass_, *JetPt_;
00160 MonitorElement *JetPt1_, *JetPt2_, *JetPt3_;
00161 MonitorElement *JetPx_, *JetPy_, *JetPz_;
00162 MonitorElement *JetEta_, *JetPhi_, *JetDeltaEta_, *JetDeltaPhi_, *JetPhiVsEta_;
00163 MonitorElement *JetN90Hits_, *JetfHPD_, *JetResEMF_, *JetfRBX_;
00164 MonitorElement *TrackSiStripHitStoNHisto_;
00165 MonitorElement *InCaloTrackDirectionJetDRHisto_, *OutCaloTrackDirectionJetDRHisto_;
00166 MonitorElement *InVertexTrackImpactPointJetDRHisto_, *OutVertexTrackImpactPointJetDRHisto_;
00167 MonitorElement *NTracksPerJetHisto_, *NTracksPerJetVsJetEtHisto_, *NTracksPerJetVsJetEtaHisto_;
00168 MonitorElement *PtFractionInConeHisto_, *PtFractionInConeVsJetRawEtHisto_, *PtFractionInConeVsJetEtaHisto_;
00169 MonitorElement *CorrFactorHisto_, *CorrFactorVsJetEtHisto_, *CorrFactorVsJetEtaHisto_;
00170 MonitorElement *ZSPCorrFactorHisto_, *ZSPCorrFactorVsJetEtHisto_, *ZSPCorrFactorVsJetEtaHisto_;
00171 MonitorElement *JPTCorrFactorHisto_, *JPTCorrFactorVsJetEtHisto_, *JPTCorrFactorVsJetEtaHisto_;
00172 TrackHistograms allPionHistograms_, inCaloInVertexPionHistograms_, inCaloOutVertexPionHistograms_, outCaloInVertexPionHistograms_;
00173 TrackHistograms allMuonHistograms_, inCaloInVertexMuonHistograms_, inCaloOutVertexMuonHistograms_, outCaloInVertexMuonHistograms_;
00174 TrackHistograms allElectronHistograms_, inCaloInVertexElectronHistograms_, inCaloOutVertexElectronHistograms_, outCaloInVertexElectronHistograms_;
00175
00177 DQMStore* dqm_;
00178 };
00179
00180 inline void JPTJetAnalyzer::fillHistogram(MonitorElement* histogram, const double value)
00181 {
00182 if (histogram) histogram->Fill(value);
00183 }
00184
00185 inline void JPTJetAnalyzer::fillHistogram(MonitorElement* histogram, const double valueX, const double valueY)
00186 {
00187 if (histogram) histogram->Fill(valueX,valueY);
00188 }
00189
00190 #endif