CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackIPHistograms.h
Go to the documentation of this file.
1 #ifndef DQMOffline_RecoB_TrackIPHistograms_h
2 #define DQMOffline_RecoB_TrackIPHistograms_h
3 
4 #include <string>
5 
8 
9 template<class T>
11 {
12  public:
13 
14  TrackIPHistograms(const std::string& baseNameTitle_ , const std::string& baseNameDescription_,
15  const int& nBins_, const double& lowerBound_, const double& upperBound_,
16  const bool& statistics, const bool& plotLog_, const bool& plotNormalized_,
17  const std::string& plotFirst_, const bool& update, const std::string& folder, const bool& mc, const bool& quality);
18 
19  virtual ~TrackIPHistograms(){};
20 
21  void fill(const int& flavour, const reco::TrackBase::TrackQuality& quality, const T& variable, const bool& hasTrack) const;
22 
23  void fill(const int& flavour, const reco::TrackBase::TrackQuality& quality, const T* variable, const bool& hasTrack) const;
24 
25  void settitle(const char* title);
26 
27  protected:
28 
29  void fillVariable ( const reco::TrackBase::TrackQuality& qual, const T & var, const bool& hasTrack) const;
30 
31  bool quality_;
32 
37 
38  private:
40 };
41 
42 template <class T>
43 TrackIPHistograms<T>::TrackIPHistograms (const std::string& baseNameTitle_, const std::string& baseNameDescription_,
44  const int& nBins_, const double& lowerBound_, const double& upperBound_,
45  const bool& statistics_, const bool& plotLog_, const bool& plotNormalized_,
46  const std::string& plotFirst_, const bool& update, const std::string& folder, const bool& mc, const bool& quality) :
47  FlavourHistograms<T>(baseNameTitle_, baseNameDescription_, nBins_, lowerBound_, upperBound_, statistics_, plotLog_, plotNormalized_,
48  plotFirst_, update, folder, mc), quality_(quality)
49 {
50  if(quality_) {
51  if(!update) {
52  HistoProviderDQM prov("Btag",folder);
53  theQual_undefined = prov.book1D( baseNameTitle_ + "QualUnDef" , baseNameDescription_ + " Undefined Quality", nBins_, lowerBound_, upperBound_);
54  theQual_loose = prov.book1D( baseNameTitle_ + "QualLoose" , baseNameDescription_ + " Loose Quality", nBins_, lowerBound_, upperBound_);
55  theQual_tight = prov.book1D( baseNameTitle_ + "QualTight" , baseNameDescription_ + " Tight Quality", nBins_, lowerBound_, upperBound_);
56  theQual_highpur = prov.book1D( baseNameTitle_ + "QualHighPur" , baseNameDescription_ + " High Purity Quality", nBins_, lowerBound_, upperBound_);
57 
58  if( statistics_ ) {
59  theQual_undefined->getTH1F()->Sumw2();
60  theQual_loose->getTH1F()->Sumw2();
61  theQual_tight->getTH1F()->Sumw2();
62  theQual_highpur->getTH1F()->Sumw2();
63  }
64  } else {
65  HistoProviderDQM prov("Btag",folder);
66  theQual_undefined = prov.access(baseNameTitle_ + "QualUnDef");
67  theQual_loose = prov.access(baseNameTitle_ + "QualLoose");
68  theQual_tight = prov.access(baseNameTitle_ + "QualTight");
69  theQual_highpur = prov.access(baseNameTitle_ + "QualHighPur");
70  }
71  }
72 }
73 
74 template <class T>
75 void TrackIPHistograms<T>::fill(const int& flavour, const reco::TrackBase::TrackQuality& quality, const T& variable, const bool& hasTrack) const
76 {
77  FlavourHistograms<T>::fill(flavour, variable);
78  if(quality_)
79  fillVariable(quality, variable, hasTrack);
80 }
81 
82 template <class T>
83 void TrackIPHistograms<T>::fill(const int& flavour, const reco::TrackBase::TrackQuality& quality, const T* variable, const bool& hasTrack) const
84 {
85  const int* theArrayDimension = FlavourHistograms<T>::arrayDimension();
86  const int& theMaxDimension = FlavourHistograms<T>::maxDimension();
87  const int& theIndexToPlot = FlavourHistograms<T>::indexToPlot();
88 
89  FlavourHistograms<T>::fill(flavour, variable);
90  if( theArrayDimension == 0 && quality_) {
91  fillVariable( quality, *variable);
92  } else {
93  int iMax = (*theArrayDimension > theMaxDimension) ? theMaxDimension : *theArrayDimension ;
94  for(int i = 0; i != iMax; ++i) {
95  if( quality_ && (( theIndexToPlot < 0) || ( i == theIndexToPlot)) ) {
96  fillVariable ( flavour , *(variable + i), hasTrack);
97  }
98  }
99 
100  if(theIndexToPlot >= iMax && quality_) {
101  const T& theZero = static_cast<T> (0.0);
102  fillVariable ( quality, theZero, hasTrack);
103  }
104  }
105 }
106 
107 template <class T>
109 {
111  theQual_undefined->setAxisTitle(title);
112  theQual_loose->setAxisTitle(title);
113  theQual_tight->setAxisTitle(title);
114  theQual_highpur->setAxisTitle(title);
115 }
116 
117 template<class T>
118 void TrackIPHistograms<T>::fillVariable( const reco::TrackBase::TrackQuality& qual, const T& var, const bool& hasTrack) const
119 {
120  if(!hasTrack || !quality_) return;
121 
122  switch(qual) {
124  theQual_loose->Fill(var);
125  break;
127  theQual_tight->Fill(var);
128  break;
130  theQual_highpur->Fill(var);
131  break;
132  default:
133  theQual_undefined->Fill(var);
134  break;
135  }
136 }
137 
138 #endif
int i
Definition: DBlmapReader.cc:9
MonitorElement * theQual_tight
TrackQuality
track quality
Definition: TrackBase.h:95
int maxDimension() const
void fill(const int &flavour, const T &variable) const
virtual MonitorElement * book1D(const std::string &name, const std::string &title, const int &nchX, const double &lowX, const double &highX)
void fill(const int &flavour, const reco::TrackBase::TrackQuality &quality, const T &variable, const bool &hasTrack) const
MonitorElement * theQual_loose
void settitle(const char *title)
int * arrayDimension() const
MonitorElement * theQual_highpur
TH1F * getTH1F(void) const
MonitorElement * theQual_undefined
int indexToPlot() const
virtual ~TrackIPHistograms()
#define update(a, b)
virtual MonitorElement * access(const std::string &name)
void settitle(const char *title)
bool statistics() const
long double T
int flavour(const Candidate &part)
Definition: pdgIdUtils.h:31
void fillVariable(const reco::TrackBase::TrackQuality &qual, const T &var, const bool &hasTrack) const