1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#ifndef DQMOFFLINE_TRIGGER_EGHLTMONELEMMGREBEE
#define DQMOFFLINE_TRIGGER_EGHLTMONELEMMGREBEE
//struct: MonElemMgrEBEE (Monitor Element Manger Barrel and Endcap)
//
//author: Sam Harper (July 2008)
//
//WARNING: interface is NOT final, please dont use this class for now without clearing it with me
// as I will change it and possibly break all your code
//
//aim: a monitor element which seperates transparently the objects into barrel and endcap
//
//implimentation: class simply has two MonElemMangers, one for endcap electrons, one for barrel electrons
// and fills them approprately. It assumes that the class passed in has a detEta function
// and uses 1.5 as the barrel,endcap descriminate
//
//
#include <cmath>
#include "DQMOffline/Trigger/interface/EgHLTMonElemManager.h"
namespace egHLT {
template <class T, typename varType>
class MonElemMgrEBEE : public MonElemManagerBase<T> {
private:
MonElemManager<T, varType> barrel_;
MonElemManager<T, varType> endcap_;
public:
MonElemMgrEBEE(DQMStore::IBooker& iBooker,
const std::string& name,
const std::string& title,
int nrBins,
float min,
float max,
varType (T::*varFunc)() const)
: barrel_(iBooker, name + "_eb", "Barrel " + title, nrBins, min, max, varFunc),
endcap_(iBooker, name + "_ee", "Endcap " + title, nrBins, min, max, varFunc) {}
~MonElemMgrEBEE() override = default;
void fill(const T& obj, float weight) override;
};
template <class T, typename varType>
void MonElemMgrEBEE<T, varType>::fill(const T& obj, float weight) {
if (std::fabs(obj.detEta()) < 1.5)
barrel_.fill(obj, weight);
else
endcap_.fill(obj, weight);
}
template <class T, typename varTypeX, typename varTypeY>
class MonElemMgr2DEBEE : public MonElemManagerBase<T> {
private:
MonElemManager2D<T, varTypeX, varTypeY> barrel_;
MonElemManager2D<T, varTypeX, varTypeY> endcap_;
public:
MonElemMgr2DEBEE(DQMStore::IBooker& iBooker,
const std::string& name,
const std::string& title,
int nrBinsX,
double xMin,
double xMax,
int nrBinsY,
double yMin,
double yMax,
varTypeX (T::*varFuncX)() const,
varTypeY (T::*varFuncY)() const)
: barrel_(
iBooker, name + "_eb", "Barrel " + title, nrBinsX, xMin, xMax, nrBinsY, yMin, yMax, varFuncX, varFuncY),
endcap_(
iBooker, name + "_ee", "Endcap " + title, nrBinsX, xMin, xMax, nrBinsY, yMin, yMax, varFuncX, varFuncY) {}
~MonElemMgr2DEBEE() = default;
void fill(const T& obj, float weight);
};
template <class T, typename varTypeX, typename varTypeY>
void MonElemMgr2DEBEE<T, varTypeX, varTypeY>::fill(const T& obj, float weight) {
if (fabs(obj.detEta()) < 1.5)
barrel_.fill(obj, weight);
else
endcap_.fill(obj, weight);
}
} // namespace egHLT
#endif
|