HepMC3 event record library
examples
ConvertExample
src
AnalysisExample.cc
1
// -*- C++ -*-
2
//
3
// This file is part of HepMC
4
// Copyright (C) 2014-2023 The HepMC collaboration (see AUTHORS for details)
5
//
6
#include "
AnalysisExample.h
"
7
#include <limits>
8
namespace
HepMC3
9
{
10
HEPMC3_DECLARE_WRITER_FILE(AnalysisExample)
11
HEPMC3_DECLARE_WRITER_STREAM(AnalysisExample)
12
13
AnalysisExample
::
AnalysisExample
(const std::
string
&filename,std::shared_ptr<
GenRunInfo
>
/*run*/
): m_file(filename),
14
m_stream(&m_file)
15
{
16
if
( !m_file.is_open() ) {
17
HEPMC3_ERROR(
"AnalysisExample: could not open output file: "
<<filename )
18
}
19
m_sum_of_weights=0;
20
m_sum_of_weights2=0;
21
m_bins[
"rapidity"
]=std::vector<double> {-std::numeric_limits<double>::infinity(), -5.0,-4.5,-4.0,-3.5,-3.0,-2.5,-2.0,-1.5,-1.0,-0.5,0.0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,std::numeric_limits<double>::infinity()};
22
m_vals[
"rapidity"
]=std::vector<double>(m_bins.at(
"rapidity"
).size()-1,0.0);
23
m_errs[
"rapidity"
]=std::vector<double>(m_bins.at(
"rapidity"
).size()-1,0.0);
24
}
25
26
AnalysisExample::AnalysisExample
(std::ostream &stream, std::shared_ptr<GenRunInfo>
/*run*/
)
27
: m_stream(&stream)
28
{
29
m_sum_of_weights
=0;
30
m_sum_of_weights2
=0;
31
m_bins
[
"rapidity"
]=std::vector<double> {-std::numeric_limits<double>::infinity(), -5.0,-4.5,-4.0,-3.5,-3.0,-2.5,-2.0,-1.5,-1.0,-0.5,0.0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,std::numeric_limits<double>::infinity()};
32
m_vals
[
"rapidity"
]=std::vector<double>(
m_bins
.at(
"rapidity"
).size()-1,0.0);
33
m_errs
[
"rapidity"
]=std::vector<double>(
m_bins
.at(
"rapidity"
).size()-1,0.0);
34
35
}
36
37
void
AnalysisExample::write_event
(
const
GenEvent
&evt)
38
{
39
double
w=evt.
weight
();
40
m_sum_of_weights
+=w;
41
m_sum_of_weights2
+=w*w;
42
for
(
auto
p: evt.
particles
() )
43
{
44
if
(p->status()!=1)
continue
;
45
double
eta=p->momentum().eta();
46
int
bin=std::distance(
m_bins
[
"rapidity"
].begin(), lower_bound(
m_bins
[
"rapidity"
].begin(),
m_bins
[
"rapidity"
].end(),eta))-1;
47
if
(bin<0) bin=0;
48
m_vals
[
"rapidity"
][bin]+=w;
49
m_errs
[
"rapidity"
][bin]+=w*w;
50
}
51
}
52
53
void
AnalysisExample::close
() {
54
if
(!
m_stream
)
return
;
55
auto
* ofs =
dynamic_cast<
std::ofstream*
>
(
m_stream
);
56
for
(
size_t
i=1; i<
m_vals
[
"rapidity"
].size()-1; i++)
57
{
58
double
val=
m_vals
[
"rapidity"
][i]/
m_sum_of_weights
/(
m_bins
[
"rapidity"
][i+1]-
m_bins
[
"rapidity"
][i]);
59
double
err=sqrt(
m_errs
[
"rapidity"
][i])/
m_sum_of_weights
/(
m_bins
[
"rapidity"
][i+1]-
m_bins
[
"rapidity"
][i]);
60
(*ofs)<< std::fixed << std::setprecision( 6 )<<
m_bins
[
"rapidity"
][i]<<
" "
<<
m_bins
[
"rapidity"
][i+1]<<
" "
<<val<<
" "
<<err<<std::endl;
61
}
62
if
(ofs && !ofs->is_open())
return
;
63
if
(ofs) ofs->close();
64
65
}
66
67
}
// namespace HepMC3
AnalysisExample.h
Definition of class AnalysisExample.
HepMC3::AnalysisExample
Example analysis. Produces a rapidity distribution of final state particles.
Definition
AnalysisExample.h:26
HepMC3::AnalysisExample::m_sum_of_weights2
double m_sum_of_weights2
Sum of event weights**2.
Definition
AnalysisExample.h:47
HepMC3::AnalysisExample::AnalysisExample
AnalysisExample(const std::string &filename, std::shared_ptr< GenRunInfo > run)
Constructor.
Definition
AnalysisExample.cc:13
HepMC3::AnalysisExample::close
void close() override
Close file stream.
Definition
AnalysisExample.cc:53
HepMC3::AnalysisExample::m_errs
std::map< std::string, std::vector< double > > m_errs
Uncertainties.
Definition
AnalysisExample.h:50
HepMC3::AnalysisExample::m_vals
std::map< std::string, std::vector< double > > m_vals
Values.
Definition
AnalysisExample.h:49
HepMC3::AnalysisExample::m_bins
std::map< std::string, std::vector< double > > m_bins
Binings.
Definition
AnalysisExample.h:48
HepMC3::AnalysisExample::write_event
void write_event(const GenEvent &evt) override
Write event to file.
Definition
AnalysisExample.cc:37
HepMC3::AnalysisExample::m_stream
std::ostream * m_stream
Output stream.
Definition
AnalysisExample.h:53
HepMC3::AnalysisExample::m_sum_of_weights
double m_sum_of_weights
Sum of event weights.
Definition
AnalysisExample.h:46
HepMC3::GenEvent
Stores event-related information.
Definition
GenEvent.h:41
HepMC3::GenEvent::weight
double weight(const unsigned long &index=0) const
Definition
GenEvent.h:103
HepMC3::GenEvent::particles
const std::vector< ConstGenParticlePtr > & particles() const
Get list of particles (const)
Definition
GenEvent.cc:39
HepMC3::GenRunInfo
Stores run-related information.
Definition
GenRunInfo.h:33
HepMC3
HepMC3 main namespace.
Definition
AnalysisExample.h:24
Generated on Thu Sep 12 2024 18:03:34 for HepMC3 event record library by
1.12.0