CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/DQMOffline/JetMET/interface/JPTJetAnalyzer.h

Go to the documentation of this file.
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 // forward declare classes which do not need to be defined for interface
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   // Helper classes
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     /*    MonitorElement* nHitsHisto;
00089           MonitorElement* nLayersHisto;  */
00090     MonitorElement* ptVsEtaHisto;
00091     /*    MonitorElement* dzHisto;
00092     MonitorElement* dxyHisto;  */ 
00093     MonitorElement* trackDirectionJetDRHisto;
00094     MonitorElement* trackImpactPointJetDRHisto;
00095     TrackHistograms();
00096     TrackHistograms(MonitorElement* theNTracksHisto, MonitorElement* thePtHisto, MonitorElement* thePhiHisto, MonitorElement* theEtaHisto, 
00097                     /* MonitorElement* theNHitsHisto, MonitorElement* theNLayersHisto, */ 
00098 MonitorElement* thePtVsEtaHisto, 
00099                     /* MonitorElement* dzHisto, MonitorElement* dxyHisto,  */
00100 MonitorElement* theTrackDirectionJetDRHisto, MonitorElement* theTrackImpactPointJetDRHisto);
00101   };
00102   
00103   // Private methods
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   // J.Piedra, 2012/09/24
00133   //  void fillSiStripHitSoNForSingleHit(const SiStripRecHit2D& hit);
00134 
00136   static double findPtFractionInCone(const reco::TrackRefVector& inConeTracks, const reco::TrackRefVector& outOfConeTracks);
00137   
00139   static const char* messageLoggerCatregory;
00140   
00141   // Config
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   // Histograms
00168   MonitorElement *JetE_, *JetEt_, *JetP_,  *JetPt_;
00169   /*  MonitorElement *JetMass_   */
00170   MonitorElement *JetPt1_, *JetPt2_, *JetPt3_;
00171   MonitorElement *JetPx_, *JetPy_, *JetPz_;
00172   MonitorElement *JetEta_, *JetPhi_, *JetDeltaEta_, *JetDeltaPhi_, *JetPhiVsEta_;
00173   /*  MonitorElement *JetN90Hits_ 
00174       MonitorElement *JetfHPD_, *JetResEMF_, *JetfRBX_; 
00175   MonitorElement *TrackSiStripHitStoNHisto_;  */
00176   MonitorElement *InCaloTrackDirectionJetDRHisto_, *OutCaloTrackDirectionJetDRHisto_;
00177   MonitorElement *InVertexTrackImpactPointJetDRHisto_, *OutVertexTrackImpactPointJetDRHisto_;
00178   MonitorElement *NTracksPerJetHisto_, *NTracksPerJetVsJetEtHisto_, *NTracksPerJetVsJetEtaHisto_;
00179   /*  MonitorElement *PtFractionInConeHisto_, *PtFractionInConeVsJetRawEtHisto_, *PtFractionInConeVsJetEtaHisto_;
00180   MonitorElement *CorrFactorHisto_, *CorrFactorVsJetEtHisto_, *CorrFactorVsJetEtaHisto_;
00181   MonitorElement *ZSPCorrFactorHisto_, *ZSPCorrFactorVsJetEtHisto_, *ZSPCorrFactorVsJetEtaHisto_;
00182   MonitorElement *JPTCorrFactorHisto_, *JPTCorrFactorVsJetEtHisto_, *JPTCorrFactorVsJetEtaHisto_;  */ 
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