File indexing completed on 2023-03-17 11:04:48
0001 #include "GeneratorInterface/LHEInterface/interface/lheh5.h"
0002
0003 namespace lheh5 {
0004
0005 inline std::ostream& operator<<(std::ostream& os, Particle const& p) {
0006 os << "\tpx: " << p.px << " py: " << p.py << " pz: " << p.pz << " e: " << p.e << "\n";
0007 return os;
0008 }
0009
0010 inline std::ostream& operator<<(std::ostream& os, EventHeader const& eh) {
0011 os << "\tnparticles: " << eh.nparticles << " procid: " << eh.pid << " weight: " << eh.weight
0012 << " trials: " << eh.trials << "\n";
0013 os << "\tscale: " << eh.scale << " rscale: " << eh.rscale << " fscale: " << eh.fscale << " aqed: " << eh.aqed
0014 << " aqcd: " << eh.aqcd << "\n";
0015 os << "\tnpLO: " << eh.npLO << " npNLO: " << eh.npNLO << "\n";
0016 return os;
0017 }
0018
0019 Particle Events::mkParticle(size_t idx) const {
0020 return {_vid[idx],
0021 _vstatus[idx],
0022 _vmother1[idx],
0023 _vmother2[idx],
0024 _vcolor1[idx],
0025 _vcolor2[idx],
0026 _vpx[idx],
0027 _vpy[idx],
0028 _vpz[idx],
0029 _ve[idx],
0030 _vm[idx],
0031 _vlifetime[idx],
0032 _vspin[idx]};
0033 }
0034
0035 std::vector<Particle> Events::mkEvent(size_t ievent) const {
0036 std::vector<Particle> _E;
0037
0038
0039 for (size_t id = _vstart[ievent] - _particle_offset; id < _vend[ievent] - _particle_offset; ++id) {
0040 _E.push_back(mkParticle(id));
0041 }
0042
0043
0044 if (_E[0].pz < 0) {
0045 std::swap<Particle>(_E[0], _E[1]);
0046 }
0047
0048 return _E;
0049 }
0050
0051 EventHeader Events::mkEventHeader(int iev) const {
0052 return {
0053 _vnparticles[iev],
0054 _vpid[iev],
0055 _vweight[iev],
0056 _vtrials[iev],
0057 _vscale[iev],
0058 _vrscale[iev],
0059 _vfscale[iev],
0060 _vaqed[iev],
0061 _vaqcd[iev],
0062 _vnpLO[iev],
0063 _vnpNLO[iev],
0064 };
0065 }
0066
0067
0068 Events readEvents(HighFive::Group& g_index,
0069 HighFive::Group& g_particle,
0070 HighFive::Group& g_event,
0071 size_t first_event,
0072 size_t n_events) {
0073
0074 std::vector<size_t> _vstart, _vend;
0075
0076 std::vector<int> _vid, _vstatus, _vmother1, _vmother2, _vcolor1, _vcolor2;
0077 std::vector<double> _vpx, _vpy, _vpz, _ve, _vm, _vlifetime, _vspin;
0078
0079 std::vector<int> _vnparticles, _vpid, _vnpLO, _vnpNLO;
0080 std::vector<size_t> _vtrials;
0081 std::vector<double> _vweight, _vscale, _vrscale, _vfscale, _vaqed, _vaqcd;
0082
0083
0084
0085
0086 HighFive::DataSet _start = g_index.getDataSet("start");
0087 HighFive::DataSet _end = g_index.getDataSet("end");
0088
0089 HighFive::DataSet _id = g_particle.getDataSet("id");
0090 HighFive::DataSet _status = g_particle.getDataSet("status");
0091 HighFive::DataSet _mother1 = g_particle.getDataSet("mother1");
0092 HighFive::DataSet _mother2 = g_particle.getDataSet("mother2");
0093 HighFive::DataSet _color1 = g_particle.getDataSet("color1");
0094 HighFive::DataSet _color2 = g_particle.getDataSet("color2");
0095 HighFive::DataSet _px = g_particle.getDataSet("px");
0096 HighFive::DataSet _py = g_particle.getDataSet("py");
0097 HighFive::DataSet _pz = g_particle.getDataSet("pz");
0098 HighFive::DataSet _e = g_particle.getDataSet("e");
0099 HighFive::DataSet _m = g_particle.getDataSet("m");
0100 HighFive::DataSet _lifetime = g_particle.getDataSet("lifetime");
0101 HighFive::DataSet _spin = g_particle.getDataSet("spin");
0102
0103 HighFive::DataSet _nparticles = g_event.getDataSet("nparticles");
0104 HighFive::DataSet _pid = g_event.getDataSet("pid");
0105 HighFive::DataSet _weight = g_event.getDataSet("weight");
0106 HighFive::DataSet _trials = g_event.getDataSet("trials");
0107 HighFive::DataSet _scale = g_event.getDataSet("scale");
0108 HighFive::DataSet _rscale = g_event.getDataSet("rscale");
0109 HighFive::DataSet _fscale = g_event.getDataSet("fscale");
0110 HighFive::DataSet _aqed = g_event.getDataSet("aqed");
0111 HighFive::DataSet _aqcd = g_event.getDataSet("aqcd");
0112 HighFive::DataSet _npLO = g_event.getDataSet("npLO");
0113 HighFive::DataSet _npNLO = g_event.getDataSet("npNLO");
0114
0115
0116
0117 std::vector<size_t> offset_e = {first_event};
0118 std::vector<size_t> readsize_e = {n_events};
0119
0120
0121
0122 _start.select(offset_e, readsize_e).read(_vstart);
0123 _end.select(offset_e, readsize_e).read(_vend);
0124 std::vector<size_t> offset_p = {_vstart.front()};
0125 std::vector<size_t> readsize_p = {_vend.back() - _vstart.front()};
0126
0127 int RESP = _vend.back() - _vstart.front();
0128 _vid.reserve(RESP);
0129 _vstatus.reserve(RESP);
0130 _vmother1.reserve(RESP);
0131 _vmother2.reserve(RESP);
0132 _vcolor1.reserve(RESP);
0133 _vcolor2.reserve(RESP);
0134 _vpx.reserve(RESP);
0135 _vpy.reserve(RESP);
0136 _vpz.reserve(RESP);
0137 _ve.reserve(RESP);
0138 _vm.reserve(RESP);
0139 _vlifetime.reserve(RESP);
0140 _vspin.reserve(RESP);
0141
0142 _vnparticles.reserve(n_events);
0143 _vpid.reserve(n_events);
0144 _vweight.reserve(n_events);
0145 _vtrials.reserve(n_events);
0146 _vscale.reserve(n_events);
0147 _vrscale.reserve(n_events);
0148 _vfscale.reserve(n_events);
0149 _vaqed.reserve(n_events);
0150 _vaqcd.reserve(n_events);
0151 _vnpLO.reserve(n_events);
0152 _vnpNLO.reserve(n_events);
0153
0154
0155
0156 _id.select(offset_p, readsize_p).read(_vid);
0157 _status.select(offset_p, readsize_p).read(_vstatus);
0158 _mother1.select(offset_p, readsize_p).read(_vmother1);
0159 _mother2.select(offset_p, readsize_p).read(_vmother2);
0160 _color1.select(offset_p, readsize_p).read(_vcolor1);
0161 _color2.select(offset_p, readsize_p).read(_vcolor2);
0162 _px.select(offset_p, readsize_p).read(_vpx);
0163 _py.select(offset_p, readsize_p).read(_vpy);
0164 _pz.select(offset_p, readsize_p).read(_vpz);
0165 _e.select(offset_p, readsize_p).read(_ve);
0166 _m.select(offset_p, readsize_p).read(_vm);
0167 _lifetime.select(offset_p, readsize_p).read(_vlifetime);
0168 _spin.select(offset_p, readsize_p).read(_vspin);
0169
0170
0171
0172
0173 _nparticles.select(offset_e, readsize_e).read(_vnparticles);
0174 _pid.select(offset_e, readsize_e).read(_vpid);
0175 _weight.select(offset_e, readsize_e).read(_vweight);
0176 _trials.select(offset_e, readsize_e).read(_vtrials);
0177 _scale.select(offset_e, readsize_e).read(_vscale);
0178 _rscale.select(offset_e, readsize_e).read(_vrscale);
0179 _fscale.select(offset_e, readsize_e).read(_vfscale);
0180 _aqed.select(offset_e, readsize_e).read(_vaqed);
0181 _aqcd.select(offset_e, readsize_e).read(_vaqcd);
0182 _npLO.select(offset_e, readsize_e).read(_vnpLO);
0183 _npNLO.select(offset_e, readsize_e).read(_vnpNLO);
0184
0185
0186
0187 return {
0188 std::move(_vstart), std::move(_vend), std::move(_vid), std::move(_vstatus), std::move(_vmother1),
0189 std::move(_vmother2), std::move(_vcolor1), std::move(_vcolor2), std::move(_vpx), std::move(_vpy),
0190 std::move(_vpz), std::move(_ve), std::move(_vm), std::move(_vlifetime), std::move(_vspin),
0191 std::move(_vnparticles), std::move(_vpid), std::move(_vweight), std::move(_vtrials), std::move(_vscale),
0192 std::move(_vrscale), std::move(_vfscale), std::move(_vaqed), std::move(_vaqcd), std::move(_vnpLO),
0193 std::move(_vnpNLO), offset_p[0],
0194 };
0195 }
0196
0197 Particle Events2::mkParticle(size_t idx) const {
0198 return {_vid[idx],
0199 _vstatus[idx],
0200 _vmother1[idx],
0201 _vmother2[idx],
0202 _vcolor1[idx],
0203 _vcolor2[idx],
0204 _vpx[idx],
0205 _vpy[idx],
0206 _vpz[idx],
0207 _ve[idx],
0208 _vm[idx],
0209 _vlifetime[idx],
0210 _vspin[idx]};
0211 }
0212
0213 std::vector<Particle> Events2::mkEvent(size_t ievent) const {
0214 std::vector<Particle> _E;
0215
0216
0217 size_t partno = _vstart[ievent] - _particle_offset;
0218 for (int id = 0; id < _vnparticles[ievent]; ++id) {
0219 _E.push_back(mkParticle(partno));
0220 partno++;
0221 }
0222
0223
0224 if (_E[0].pz < 0) {
0225 std::swap<Particle>(_E[0], _E[1]);
0226 }
0227
0228 return _E;
0229 }
0230
0231 EventHeader Events2::mkEventHeader(int iev) const {
0232 return {
0233 _vnparticles[iev],
0234 _vpid[iev],
0235 _vweight[iev],
0236 _vtrials[iev],
0237 _vscale[iev],
0238 _vrscale[iev],
0239 _vfscale[iev],
0240 _vaqed[iev],
0241 _vaqcd[iev],
0242 npLO,
0243 npNLO,
0244 };
0245 }
0246
0247
0248 Events2 readEvents(
0249 HighFive::Group& g_particle, HighFive::Group& g_event, size_t first_event, size_t n_events, int npLO, int npNLO) {
0250
0251 std::vector<size_t> _vstart;
0252
0253 std::vector<int> _vid, _vstatus, _vmother1, _vmother2, _vcolor1, _vcolor2;
0254 std::vector<double> _vpx, _vpy, _vpz, _ve, _vm, _vlifetime, _vspin;
0255
0256 std::vector<int> _vnparticles, _vpid;
0257 std::vector<size_t> _vtrials;
0258 std::vector<double> _vweight, _vscale, _vrscale, _vfscale, _vaqed, _vaqcd;
0259
0260
0261
0262 HighFive::DataSet _start = g_event.getDataSet("start");
0263
0264 HighFive::DataSet _id = g_particle.getDataSet("id");
0265 HighFive::DataSet _status = g_particle.getDataSet("status");
0266 HighFive::DataSet _mother1 = g_particle.getDataSet("mother1");
0267 HighFive::DataSet _mother2 = g_particle.getDataSet("mother2");
0268 HighFive::DataSet _color1 = g_particle.getDataSet("color1");
0269 HighFive::DataSet _color2 = g_particle.getDataSet("color2");
0270 HighFive::DataSet _px = g_particle.getDataSet("px");
0271 HighFive::DataSet _py = g_particle.getDataSet("py");
0272 HighFive::DataSet _pz = g_particle.getDataSet("pz");
0273 HighFive::DataSet _e = g_particle.getDataSet("e");
0274 HighFive::DataSet _m = g_particle.getDataSet("m");
0275 HighFive::DataSet _lifetime = g_particle.getDataSet("lifetime");
0276 HighFive::DataSet _spin = g_particle.getDataSet("spin");
0277
0278 HighFive::DataSet _nparticles = g_event.getDataSet("nparticles");
0279 HighFive::DataSet _pid = g_event.getDataSet("pid");
0280 HighFive::DataSet _weight = g_event.getDataSet("weight");
0281 HighFive::DataSet _trials = g_event.getDataSet("trials");
0282 HighFive::DataSet _scale = g_event.getDataSet("scale");
0283 HighFive::DataSet _rscale = g_event.getDataSet("rscale");
0284 HighFive::DataSet _fscale = g_event.getDataSet("fscale");
0285 HighFive::DataSet _aqed = g_event.getDataSet("aqed");
0286 HighFive::DataSet _aqcd = g_event.getDataSet("aqcd");
0287
0288 std::vector<size_t> offset_e = {first_event};
0289 std::vector<size_t> readsize_e = {n_events};
0290
0291
0292 _start.select(offset_e, readsize_e).read(_vstart);
0293
0294
0295 std::vector<size_t> offset_p = {_vstart.front()};
0296
0297 _vnparticles.reserve(n_events);
0298 _nparticles.select(offset_e, readsize_e).read(_vnparticles);
0299
0300 size_t RESP = _vstart.back() - _vstart.front() + _vnparticles.back();
0301 std::vector<size_t> readsize_p = {RESP};
0302
0303 _vid.reserve(RESP);
0304 _vstatus.reserve(RESP);
0305 _vmother1.reserve(RESP);
0306 _vmother2.reserve(RESP);
0307 _vcolor1.reserve(RESP);
0308 _vcolor2.reserve(RESP);
0309 _vpx.reserve(RESP);
0310 _vpy.reserve(RESP);
0311 _vpz.reserve(RESP);
0312 _ve.reserve(RESP);
0313 _vm.reserve(RESP);
0314 _vlifetime.reserve(RESP);
0315 _vspin.reserve(RESP);
0316
0317 _vpid.reserve(n_events);
0318 _vweight.reserve(n_events);
0319 _vtrials.reserve(n_events);
0320 _vscale.reserve(n_events);
0321 _vrscale.reserve(n_events);
0322 _vfscale.reserve(n_events);
0323 _vaqed.reserve(n_events);
0324 _vaqcd.reserve(n_events);
0325
0326
0327 _id.select(offset_p, readsize_p).read(_vid);
0328 _status.select(offset_p, readsize_p).read(_vstatus);
0329 _mother1.select(offset_p, readsize_p).read(_vmother1);
0330 _mother2.select(offset_p, readsize_p).read(_vmother2);
0331 _color1.select(offset_p, readsize_p).read(_vcolor1);
0332 _color2.select(offset_p, readsize_p).read(_vcolor2);
0333 _px.select(offset_p, readsize_p).read(_vpx);
0334 _py.select(offset_p, readsize_p).read(_vpy);
0335 _pz.select(offset_p, readsize_p).read(_vpz);
0336 _e.select(offset_p, readsize_p).read(_ve);
0337 _m.select(offset_p, readsize_p).read(_vm);
0338 _lifetime.select(offset_p, readsize_p).read(_vlifetime);
0339 _spin.select(offset_p, readsize_p).read(_vspin);
0340
0341 _pid.select(offset_e, readsize_e).read(_vpid);
0342 _weight.select(offset_e, readsize_e).read(_vweight);
0343 _trials.select(offset_e, readsize_e).read(_vtrials);
0344 _scale.select(offset_e, readsize_e).read(_vscale);
0345 _rscale.select(offset_e, readsize_e).read(_vrscale);
0346 _fscale.select(offset_e, readsize_e).read(_vfscale);
0347 _aqed.select(offset_e, readsize_e).read(_vaqed);
0348 _aqcd.select(offset_e, readsize_e).read(_vaqcd);
0349
0350 return {
0351 std::move(_vstart),
0352 std::move(_vid),
0353 std::move(_vstatus),
0354 std::move(_vmother1),
0355 std::move(_vmother2),
0356 std::move(_vcolor1),
0357 std::move(_vcolor2),
0358 std::move(_vpx),
0359 std::move(_vpy),
0360 std::move(_vpz),
0361 std::move(_ve),
0362 std::move(_vm),
0363 std::move(_vlifetime),
0364 std::move(_vspin),
0365 std::move(_vnparticles),
0366 std::move(_vpid),
0367 std::move(_vweight),
0368 std::move(_vtrials),
0369 std::move(_vscale),
0370 std::move(_vrscale),
0371 std::move(_vfscale),
0372 std::move(_vaqed),
0373 std::move(_vaqcd),
0374 npLO,
0375 npNLO,
0376 offset_p[0],
0377 };
0378 }
0379
0380 }