1 |
// Dear emacs, this is -*- c++ -*-
|
2 |
|
3 |
#include "include/EventCalc.h"
|
4 |
|
5 |
#include <iostream>
|
6 |
|
7 |
EventCalc* EventCalc::m_instance = NULL;
|
8 |
|
9 |
EventCalc* EventCalc::Instance()
|
10 |
{
|
11 |
// Get a pointer to the object handler.
|
12 |
// This is the only way to access this class,
|
13 |
// since it's a singleton. This method is accessible
|
14 |
// from everywhere.
|
15 |
|
16 |
if (m_instance == NULL){
|
17 |
m_instance = new EventCalc();
|
18 |
}
|
19 |
return m_instance;
|
20 |
}
|
21 |
|
22 |
EventCalc::EventCalc() : m_logger( "EventCalc" )
|
23 |
{
|
24 |
// constructor: initialise all variables
|
25 |
m_logger << DEBUG << "Constructor called." << SLogger::endmsg;
|
26 |
m_bcc = NULL;
|
27 |
m_lumi = NULL;
|
28 |
}
|
29 |
|
30 |
EventCalc::~EventCalc()
|
31 |
{
|
32 |
// default destructor
|
33 |
}
|
34 |
|
35 |
void EventCalc::Reset()
|
36 |
{
|
37 |
// reset: set all booleans to false
|
38 |
// this has to be done at the beginning of each event
|
39 |
// after a call to reset all quantities will be re-calculated
|
40 |
// when they are accessed
|
41 |
|
42 |
// (re-)set the pointers using the ObjectHandler
|
43 |
ObjectHandler* objs = ObjectHandler::Instance();
|
44 |
m_bcc = objs->GetBaseCycleContainer();
|
45 |
m_lumi = objs->GetLumiHandler();
|
46 |
|
47 |
// reset booleans
|
48 |
b_HT = false;
|
49 |
b_HTlep = false;
|
50 |
|
51 |
}
|
52 |
|
53 |
BaseCycleContainer* EventCalc::GetBaseCycleContainer()
|
54 |
{
|
55 |
// return the pointer to the container with all objects
|
56 |
if (!m_bcc){
|
57 |
m_logger << WARNING << "Pointer to BaseCycleContainer is NULL." << SLogger::endmsg;
|
58 |
}
|
59 |
return m_bcc;
|
60 |
}
|
61 |
|
62 |
LuminosityHandler* EventCalc::GetLumiHandler()
|
63 |
{
|
64 |
// return the pointer to the container with all objects
|
65 |
if (!m_lumi){
|
66 |
m_logger << WARNING << "Pointer to LumiHandler is NULL." << SLogger::endmsg;
|
67 |
}
|
68 |
return m_lumi;
|
69 |
}
|
70 |
|
71 |
double EventCalc::GetHT()
|
72 |
{
|
73 |
// calculate HT, which is defined as the scalar sum of all
|
74 |
// jets, leptons and missing transverse momentum in the event
|
75 |
if (!b_HT){
|
76 |
|
77 |
b_HT = true;
|
78 |
m_HT = 0;
|
79 |
|
80 |
// add lepton pt and MET
|
81 |
m_HT += GetHTlep();
|
82 |
|
83 |
// sum over pt of all jets
|
84 |
if(m_bcc->jets){
|
85 |
for(unsigned int i=0; i<m_bcc->jets->size(); ++i){
|
86 |
m_HT += m_bcc->jets->at(i).pt();
|
87 |
}
|
88 |
}
|
89 |
|
90 |
}
|
91 |
return m_HT;
|
92 |
}
|
93 |
|
94 |
double EventCalc::GetHTlep()
|
95 |
{
|
96 |
// calculate HT_lep, which is defined as the scalar sum of all
|
97 |
// leptons and missing transverse momentum in the event
|
98 |
if (!b_HTlep){
|
99 |
|
100 |
b_HTlep = true;
|
101 |
m_HTlep=0;
|
102 |
|
103 |
// sum over pt of all electrons
|
104 |
if(m_bcc->electrons){
|
105 |
for(unsigned int i=0; i<m_bcc->electrons->size(); ++i){
|
106 |
m_HTlep += m_bcc->electrons->at(i).pt();
|
107 |
}
|
108 |
}
|
109 |
|
110 |
// sum over pt of all muons
|
111 |
if(m_bcc->muons){
|
112 |
for(unsigned int i=0; i<m_bcc->muons->size(); ++i){
|
113 |
m_HTlep += m_bcc->muons->at(i).pt();
|
114 |
}
|
115 |
}
|
116 |
|
117 |
// sum over pt of all taus
|
118 |
if(m_bcc->taus){
|
119 |
for(unsigned int i=0; i<m_bcc->taus->size(); ++i){
|
120 |
m_HTlep += m_bcc->taus->at(i).pt();
|
121 |
}
|
122 |
}
|
123 |
|
124 |
// add MET
|
125 |
if(m_bcc->met) m_HTlep += m_bcc->met->pt();
|
126 |
|
127 |
}
|
128 |
return m_HTlep;
|
129 |
}
|
130 |
|
131 |
void EventCalc::PrintEventContent(){
|
132 |
|
133 |
m_logger << INFO << "----------------- event content -----------------" << SLogger::endmsg;
|
134 |
m_logger << INFO << "run: " << m_bcc->run << " lumi block:" << m_bcc->luminosityBlock << " event: " << m_bcc->event << SLogger::endmsg;
|
135 |
m_logger << INFO << "MET = " << m_bcc->met->pt() << " METphi = " << m_bcc->met->phi() << " HTlep = " << GetHTlep() << SLogger::endmsg;
|
136 |
if(m_bcc->electrons){m_logger << INFO << "Electrons:" << SLogger::endmsg;
|
137 |
for(unsigned int i=0; i<m_bcc->electrons->size(); ++i){
|
138 |
m_logger << INFO << " " << i+1 << " pt = " << m_bcc->electrons->at(i).pt() <<" eta = " << m_bcc->electrons->at(i).eta() << SLogger::endmsg;
|
139 |
}
|
140 |
}
|
141 |
if(m_bcc->muons){m_logger << INFO << "Muons:" << SLogger::endmsg;
|
142 |
for(unsigned int i=0; i<m_bcc->muons->size(); ++i){
|
143 |
m_logger << INFO << " " << i+1 << " pt = " << m_bcc->muons->at(i).pt() <<" eta = " << m_bcc->muons->at(i).eta() << SLogger::endmsg;
|
144 |
}
|
145 |
}
|
146 |
if(m_bcc->taus){m_logger << INFO << "Taus:" << SLogger::endmsg;
|
147 |
for(unsigned int i=0; i<m_bcc->taus->size(); ++i){
|
148 |
m_logger << INFO << " " << i+1 << " pt = " << m_bcc->taus->at(i).pt() <<" eta = " << m_bcc->taus->at(i).eta() << SLogger::endmsg;
|
149 |
}
|
150 |
}
|
151 |
if(m_bcc->jets){m_logger << INFO << "Jets:" << SLogger::endmsg;
|
152 |
for(unsigned int i=0; i<m_bcc->jets->size(); ++i){
|
153 |
m_logger << INFO << " " << i+1 << " pt = " << m_bcc->jets->at(i).pt() <<" eta = " << m_bcc->jets->at(i).eta() << SLogger::endmsg;
|
154 |
}
|
155 |
}
|
156 |
if(m_bcc->topjets){m_logger << INFO << "TopJets:" << SLogger::endmsg;
|
157 |
for(unsigned int i=0; i<m_bcc->topjets->size(); ++i){
|
158 |
m_logger << INFO << " " << i+1 << " pt = " << m_bcc->topjets->at(i).pt() <<" eta = " << m_bcc->topjets->at(i).eta() << SLogger::endmsg;
|
159 |
}
|
160 |
}
|
161 |
if(m_bcc->photons){m_logger << INFO << "Photons:" << SLogger::endmsg;
|
162 |
for(unsigned int i=0; i<m_bcc->photons->size(); ++i){
|
163 |
m_logger << INFO << " " << i+1 << " pt = " << m_bcc->photons->at(i).pt() <<" eta = " << m_bcc->photons->at(i).eta() << SLogger::endmsg;
|
164 |
}
|
165 |
}
|
166 |
}
|