File indexing completed on 2024-04-06 12:13:49
0001
0002 #ifndef GeneratorInterface_LHEInterface_LHEH5_H
0003 #define GeneratorInterface_LHEInterface_LHEH5_H
0004
0005 #include <iostream>
0006 #include <string>
0007 #include <vector>
0008
0009 #include <unistd.h>
0010
0011 #include "highfive/H5File.hpp"
0012 #include "highfive/H5DataSet.hpp"
0013
0014 namespace lheh5 {
0015
0016 struct Particle {
0017 int id, status, mother1, mother2, color1, color2;
0018 double px, py, pz, e, m, lifetime, spin;
0019
0020
0021
0022
0023
0024
0025
0026 };
0027
0028 struct EventHeader {
0029
0030 int nparticles;
0031 int pid;
0032 double weight;
0033 size_t trials;
0034 double scale;
0035 double rscale;
0036 double fscale;
0037 double aqed;
0038 double aqcd;
0039 int npLO;
0040 int npNLO;
0041 };
0042
0043 struct Events {
0044
0045 std::vector<size_t> _vstart;
0046 std::vector<size_t> _vend;
0047
0048 std::vector<int> _vid;
0049 std::vector<int> _vstatus;
0050 std::vector<int> _vmother1;
0051 std::vector<int> _vmother2;
0052 std::vector<int> _vcolor1;
0053 std::vector<int> _vcolor2;
0054 std::vector<double> _vpx;
0055 std::vector<double> _vpy;
0056 std::vector<double> _vpz;
0057 std::vector<double> _ve;
0058 std::vector<double> _vm;
0059 std::vector<double> _vlifetime;
0060 std::vector<double> _vspin;
0061
0062 std::vector<int> _vnparticles;
0063 std::vector<int> _vpid;
0064 std::vector<double> _vweight;
0065 std::vector<size_t> _vtrials;
0066 std::vector<double> _vscale;
0067 std::vector<double> _vrscale;
0068 std::vector<double> _vfscale;
0069 std::vector<double> _vaqed;
0070 std::vector<double> _vaqcd;
0071 std::vector<int> _vnpLO;
0072 std::vector<int> _vnpNLO;
0073 size_t _particle_offset;
0074
0075 Particle mkParticle(size_t idx) const;
0076 std::vector<Particle> mkEvent(size_t ievent) const;
0077 EventHeader mkEventHeader(int ievent) const;
0078 };
0079
0080 struct Events2 {
0081
0082 std::vector<size_t> _vstart;
0083
0084 std::vector<int> _vid;
0085 std::vector<int> _vstatus;
0086 std::vector<int> _vmother1;
0087 std::vector<int> _vmother2;
0088 std::vector<int> _vcolor1;
0089 std::vector<int> _vcolor2;
0090 std::vector<double> _vpx;
0091 std::vector<double> _vpy;
0092 std::vector<double> _vpz;
0093 std::vector<double> _ve;
0094 std::vector<double> _vm;
0095 std::vector<double> _vlifetime;
0096 std::vector<double> _vspin;
0097
0098 std::vector<int> _vnparticles;
0099 std::vector<int> _vpid;
0100 std::vector<double> _vweight;
0101 std::vector<size_t> _vtrials;
0102 std::vector<double> _vscale;
0103 std::vector<double> _vrscale;
0104 std::vector<double> _vfscale;
0105 std::vector<double> _vaqed;
0106 std::vector<double> _vaqcd;
0107 int npLO;
0108 int npNLO;
0109 size_t _particle_offset;
0110
0111 Particle mkParticle(size_t idx) const;
0112 std::vector<Particle> mkEvent(size_t ievent) const;
0113 EventHeader mkEventHeader(int ievent) const;
0114 };
0115
0116 Events readEvents(HighFive::Group& g_index,
0117 HighFive::Group& g_particle,
0118 HighFive::Group& g_event,
0119 size_t first_event,
0120 size_t n_events);
0121 Events2 readEvents(
0122 HighFive::Group& g_particle, HighFive::Group& g_event, size_t first_event, size_t n_events, int npLO, int npNLO);
0123 std::ostream& operator<<(std::ostream& os, Particle const& p);
0124 std::ostream& operator<<(std::ostream& os, EventHeader const& eh);
0125 }
0126
0127 #endif