16 m_reader = std::make_shared<LHEF::Reader>(filename);
21 m_reader = std::make_shared<LHEF::Reader>(stream);
28 for (
int nn = n; nn > 0; --nn)
42 m_hepr = std::make_shared<HEPRUPAttribute>();
49 for (
auto t1:
m_hepr->tags) {
50 if (t1->name !=
"header")
continue;
51 for (
auto t2: t1->tags) {
52 if (t2->name !=
"initrwgt")
continue;
53 for (
auto t3: t2->tags) {
54 if (t3->name !=
"weightgroup")
continue;
55 for (
auto t4: t3->tags)
if (t4->name ==
"weight") nweights++;
71 std::make_shared<FloatAttribute>(
m_hepr->heprup.NPRUP));
77 std::vector<std::string> weightnames;
78 for (
int i = 0, N =
m_hepr->heprup.weightinfo.size(); i < N; ++i ) weightnames.push_back(
m_hepr->heprup.weightNameHepMC(i));
79 if (nweights == 0) nweights=1;
80 for (
size_t i = weightnames.size(); i < nweights; ++i ) weightnames.push_back(std::to_string(i));
81 run_info()->set_weight_names(weightnames);
85 for (
int i = 0, N =
m_hepr->heprup.generators.size(); i < N; ++i )
111 std::shared_ptr<HEPEUPAttribute> hepe = std::make_shared<HEPEUPAttribute>();
112 if (
m_reader->outsideBlock.length() )
116 std::vector<LHEF::HEPEUP*> input;
117 if (
m_reader->hepeup.subevents.size() > 0) input.insert(input.end(), hepe->hepeup.subevents.begin(), hepe->hepeup.subevents.end());
118 else { input.push_back(&
m_reader->hepeup);}
119 int first_group_event =
m_neve;
121 for (
auto ahepeup: input)
125 evt.
add_attribute(
"AlphaQCD", std::make_shared<DoubleAttribute>(ahepeup->AQCDUP));
126 evt.
add_attribute(
"AlphaEM", std::make_shared<DoubleAttribute>(ahepeup->AQEDUP));
127 evt.
add_attribute(
"NUP", std::make_shared<IntAttribute>(ahepeup->NUP));
128 evt.
add_attribute(
"IDPRUP", std::make_shared<LongAttribute>(ahepeup->IDPRUP));
130 std::vector<GenParticlePtr> particles;
131 std::map< std::pair<int, int>, GenVertexPtr> vertices;
132 for (
int i = 0; i < ahepeup->NUP; ++i )
134 FourVector mom((ahepeup->PUP)[i][0], (ahepeup->PUP)[i][1], (ahepeup->PUP)[i][2], (ahepeup->PUP)[i][3]);
135 particles.push_back(std::make_shared<GenParticle>(mom, ahepeup->IDUP[i], ahepeup->ISTUP[i]));
136 if ( i < 2 )
continue;
137 std::pair<int, int> vertex_index(ahepeup->MOTHUP[i].first, ahepeup->MOTHUP[i].second);
138 if (vertices.find(vertex_index) == vertices.end()) vertices[vertex_index] = std::make_shared<GenVertex>();
139 vertices[vertex_index]->add_particle_out(particles.back());
141 for (
auto v: vertices )
143 std::pair<int, int> vertex_index = v.first;
144 GenVertexPtr vertex = v.second;
145 for (
int i = vertex_index.first-1; i < vertex_index.second; ++i)
146 if ( i >= 0 && i < (
int)particles.size())
147 vertex->add_particle_in(particles[i]);
149 std::pair<int, int> vertex_index(0, 0);
150 if (vertices.find(vertex_index) == vertices.end()) vertices[vertex_index] = std::make_shared<GenVertex>();
151 for (
size_t i = 0; i < particles.size(); ++i)
152 if (!particles[i]->end_vertex() && !particles[i]->production_vertex())
154 if ( i < 2 ) vertices[vertex_index]->add_particle_in(particles[i]);
155 else vertices[vertex_index]->add_particle_out(particles[i]);
157 for (
auto v: vertices ) evt.
add_vertex(v.second);
158 if (particles.size() > 1)
160 particles[0]->set_status(4);
161 particles[1]->set_status(4);
167 std::vector<double> wts;
168 for (
int i = 0, N = ahepeup->weights.size(); i < N; ++i )
170 wts.push_back(ahepeup->weights[i].first);
void close() override
Close.
static std::vector< XMLTag * > findXMLTags(std::string str, std::string *leftover=0)
void add_vertex(GenVertexPtr v)
Add vertex.
bool read_event(GenEvent &ev) override
Reading event.
std::shared_ptr< LHEF::Reader > m_reader
The actual reader.
ReaderLHEF(std::istream &)
The ctor to read from stream.
std::deque< GenEvent > m_storage
storage used for subevents.
bool skip(const int) override
skip events
bool failed() override
State.
void add_attribute(const std::string &name, const std::shared_ptr< Attribute > &att, const int &id=0)
Add event attribute to event.
Stores event-related information.
void set_beam_particles(GenParticlePtr p1, GenParticlePtr p2)
Set incoming beam particles.
std::shared_ptr< GenRunInfo > run_info() const
Get the global GenRunInfo object.
void set_run_info(std::shared_ptr< GenRunInfo > run)
Set the global GenRunInfo object.
const std::vector< double > & weights() const
Get event weight values as a vector.
bool m_failed
State of reader.
void clear()
Remove contents of this event.
Definition of class ReaderLHEF.
void set_event_number(const int &num)
Set event number.
std::shared_ptr< HEPRUPAttribute > m_hepr
Holder of attributes.