5HEPMC3_DECLARE_WRITER_FILE(AnalysisExample)
6HEPMC3_DECLARE_WRITER_STREAM(AnalysisExample)
11 if ( !m_file.is_open() ) {
12 HEPMC3_ERROR(
"AnalysisExample: could not open output file: "<<filename )
16 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()};
17 m_vals[
"rapidity"]=std::vector<double>(m_bins.at(
"rapidity").size()-1,0.0);
18 m_errs[
"rapidity"]=std::vector<double>(m_bins.at(
"rapidity").size()-1,0.0);
27 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()};
28 m_vals[
"rapidity"]=std::vector<double>(
m_bins.at(
"rapidity").size()-1,0.0);
29 m_errs[
"rapidity"]=std::vector<double>(
m_bins.at(
"rapidity").size()-1,0.0);
40 if (p->status()!=1)
continue;
41 double eta=p->momentum().eta();
42 int bin=std::distance(
m_bins[
"rapidity"].begin(), lower_bound(
m_bins[
"rapidity"].begin(),
m_bins[
"rapidity"].end(),eta))-1;
44 m_vals[
"rapidity"][bin]+=w;
45 m_errs[
"rapidity"][bin]+=w*w;
51 std::ofstream* ofs =
dynamic_cast<std::ofstream*
>(
m_stream);
52 for (
size_t i=1; i<
m_vals[
"rapidity"].size()-1; i++)
56 (*ofs)<< std::fixed << std::setprecision( 6 )<<
m_bins[
"rapidity"][i]<<
" "<<
m_bins[
"rapidity"][i+1]<<
" "<<val<<
" "<<err<<std::endl;
58 if (ofs && !ofs->is_open())
return;
59 if (ofs) ofs->close();
Definition of class AnalysisExample.
#define HEPMC3_ERROR(MESSAGE)
Macro for printing error messages.
Example analysis. Produces a rapidity distribution of final state particles.
double m_sum_of_weights2
Sum of event weights**2.
AnalysisExample(const std::string &filename, std::shared_ptr< GenRunInfo > run)
Constructor.
void close() override
Close file stream.
std::map< std::string, std::vector< double > > m_errs
Uncertainties.
std::map< std::string, std::vector< double > > m_vals
Values.
std::map< std::string, std::vector< double > > m_bins
Binings.
void write_event(const GenEvent &evt) override
Write event to file.
std::ostream * m_stream
Output stream.
double m_sum_of_weights
Sum of event weights.
Stores event-related information.
double weight(const unsigned long &index=0) const
const std::vector< ConstGenParticlePtr > & particles() const
Get list of particles (const)
Stores run-related information.