CMS 3D CMS Logo

FlavouredJetPlots.h

Go to the documentation of this file.
00001 #ifndef HLTriggerOffline_BJet_FlavouredJetPlots_h
00002 #define HLTriggerOffline_BJet_FlavouredJetPlots_h
00003 
00004 // STL
00005 #include <vector>
00006 #include <string>
00007 
00008 // ROOT
00009 #include <TDirectory.h>
00010 
00011 // CMSSW
00012 #include "DataFormats/JetReco/interface/Jet.h"
00013 #include "DataFormats/JetReco/interface/JetTracksAssociation.h"
00014 #include "DataFormats/TrackReco/interface/Track.h"
00015 #include "HLTriggerOffline/BJet/interface/JetPlots.h"
00016 
00017 typedef unsigned int            flavour_t;
00018 typedef std::vector<flavour_t>  flavours_t;
00019 struct FlavouredJetPlots {
00020 
00021   std::vector<flavours_t>   m_flavours;
00022   std::vector<std::string>  m_labels;
00023   std::vector<JetPlots>     m_plots;
00024   
00025   void init(
00026       const std::string & name, 
00027       const std::string & title, 
00028       const std::vector<flavours_t> & flavours, 
00029       const std::vector<std::string> & labels,
00030       unsigned int energyBins, 
00031       double minEnergy, 
00032       double maxEnergy, 
00033       unsigned int geometryBins, 
00034       double maxEta, 
00035       bool hasTracks = false
00036   ) {
00037     m_flavours = flavours;
00038     m_labels = labels; m_labels.push_back("other");
00039     m_plots.resize( m_flavours.size() + 1);
00040     for (unsigned int i = 0; i <= m_flavours.size(); ++i)
00041       m_plots[i].init(name + "_" + m_labels[i], title + " (" + m_labels[i] + ")", energyBins, minEnergy, maxEnergy, geometryBins, maxEta, hasTracks);
00042   }
00043 
00044   void fill(const reco::Jet & jet, flavour_t flavour) {
00045     bool match = false;
00046     for (unsigned int i = 0; i < m_flavours.size(); ++i) {
00047       if (std::find(m_flavours[i].begin(), m_flavours[i].end(), flavour) != m_flavours[i].end()) {
00048         m_plots[i].fill(jet);
00049         match = true;
00050       }
00051     }
00052     if (not match)
00053       m_plots[m_flavours.size()].fill(jet);
00054   }
00055   
00056   void fill(const reco::Jet & jet, const reco::TrackRefVector & tracks, flavour_t flavour) {
00057     bool match = false;
00058     for (unsigned int i = 0; i < m_flavours.size(); ++i) {
00059       if (std::find(m_flavours[i].begin(), m_flavours[i].end(), flavour) != m_flavours[i].end()) {
00060         m_plots[i].fill(jet, tracks);
00061         match = true;
00062       }
00063     }
00064     if (not match)
00065       m_plots[m_flavours.size()].fill(jet);
00066   }
00067   
00068   void save(TDirectory & file) {
00069     for (unsigned int i = 0; i <= m_flavours.size(); ++i)
00070       m_plots[i].save(file);
00071   }
00072 
00073   FlavouredJetPlots efficiency(const FlavouredJetPlots & denominator) {
00074     FlavouredJetPlots efficiency;
00075     efficiency.m_flavours = m_flavours;
00076     efficiency.m_labels = m_labels;
00077     efficiency.m_plots.resize(m_flavours.size() + 1);
00078     for (unsigned int i = 0; i <= m_flavours.size(); ++i)
00079       efficiency.m_plots[i] = m_plots[i].efficiency( denominator.m_plots[i] );
00080     return efficiency;
00081   }
00082 };
00083 
00084 #endif // HLTriggerOffline_BJet_FlavouredJetPlots_h

Generated on Tue Jun 9 17:38:00 2009 for CMSSW by  doxygen 1.5.4