~ma5/madanalysis5/madanalysis-development

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