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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2012-2016 Eric Conte, Benjamin Fuks
// The MadAnalysis development team, email: <ma5team@iphc.cnrs.fr>
//
// This file is part of MadAnalysis 5.
// Official website: <https://launchpad.net/madanalysis5>
//
// MadAnalysis 5 is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// MadAnalysis 5 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with MadAnalysis 5. If not, see <http://www.gnu.org/licenses/>
//
////////////////////////////////////////////////////////////////////////////////
#ifndef PLOT_BASE_H
#define PLOT_BASE_H
// STL headers
#include <iostream>
#include <map>
#include <string>
#include <cmath>
// SampleAnalyzer headers
#include "SampleAnalyzer/Commons/Service/LogService.h"
namespace MA5
{
class PlotBase
{
// -------------------------------------------------------------
// data members
// -------------------------------------------------------------
protected :
/// Name of the plots
std::string name_;
/// Number of events
std::pair<MAint64,MAint64> nevents_;
/// Number of entries
std::pair<MAint64,MAint64> nentries_;
/// Sum of event-weight over events
std::pair<MAfloat64,MAfloat64> nevents_w_;
/// Flag telling whether a given histo has already been modified for an event
bool fresh_event_;
// -------------------------------------------------------------
// method members
// -------------------------------------------------------------
public :
/// Constructor without argument
PlotBase()
{
// Reseting statistical counters
nevents_ = std::make_pair(0,0);
nentries_ = std::make_pair(0,0);
nevents_w_ = std::make_pair(0,0);
fresh_event_ = true;
}
/// Constructor with argument
PlotBase(const std::string& name)
{
name_ = name;
nevents_ = std::make_pair(0,0);
nevents_w_ = std::make_pair(0,0);
nentries_ = std::make_pair(0,0);
fresh_event_ = true;
}
/// Destructor
virtual ~PlotBase()
{ }
/// Accesor for fresh_event
bool FreshEvent() { return fresh_event_;}
/// Modifier for fresh_event
void SetFreshEvent(bool tag) { fresh_event_ = tag;}
/// Write the plot in a ROOT file
virtual void Write_TextFormat(std::ostream* output) = 0;
/// Increment number of events
void IncrementNEvents(MAfloat64 weight=1.0)
{
if (weight>=0)
{
nevents_.first++;
nevents_w_.first+=weight;
}
else
{
weight = std::abs(weight);
nevents_.second++;
nevents_w_.second+=weight;
}
SetFreshEvent(false);
}
/// Return Number of events
const std::pair<MAint64,MAint64>& GetNEvents()
{ return nevents_; }
// Return the name
std::string GetName()
{ return name_; }
};
}
#endif
|