9 m_buffer_size( 256*1024 )
12 HEPMC3_ERROR(
"WriterDOT: could not open output file: "<<filename )
22 m_buffer_size( 256*1024 )
27 std::ofstream* ofs =
dynamic_cast<std::ofstream*
>(
m_stream);
28 if (ofs && !ofs->is_open())
return;
30 if (ofs) ofs->close();
37 if (pd==81||pd==82||pd<25) parton=
true;
39 (pd/1000==1||pd/1000==2||pd/1000==3||pd/1000==4||pd/1000==5)
40 &&(pd%1000/100==1||pd%1000/100==2||pd%1000/100==3||pd%1000/100==4)
41 &&(pd%100==1||pd%100==3)
52 m_cursor += sprintf(m_cursor,
"v0[label=\"Machine\"];\n");
58 if (v->status()==2) m_cursor += sprintf(m_cursor,
"node [color=\"green\"];\n");
59 else m_cursor += sprintf(m_cursor,
"node [color=\"black\"];\n");
62 m_cursor += sprintf(m_cursor,
"node [shape=ellipse];\n");
63 m_cursor += sprintf(m_cursor,
"v%d[label=\"%d\"];\n", -v->id(),v->id());
66 for(
auto p: evt.
beams() ) {
67 if (!p->end_vertex())
continue;
68 m_cursor += sprintf(m_cursor,
"node [shape=point];\n");
69 m_cursor += sprintf(m_cursor,
"v0 -> v%d [label=\"%d(%d)\"];\n", -p->end_vertex()->id(),p->id(),p->pid());
73 for(
auto p: v->particles_out() ) {
79 if (
is_parton(
std::abs(p->pid()))&&p->status()!=1) m_cursor += sprintf(m_cursor,
"edge [color=\"red\"];\n");
80 else m_cursor +=sprintf(m_cursor,
"edge [color=\"black\"];\n");
85 m_cursor += sprintf(m_cursor,
"node [shape=point];\n");
86 m_cursor += sprintf(m_cursor,
"v%d -> o%d [label=\"%d(%d)\"];\n", -v->id(),p->id(),p->id(),p->pid());
90 m_cursor += sprintf(m_cursor,
"node [shape=ellipse];\n");
91 m_cursor += sprintf(m_cursor,
"v%d -> v%d [label=\"%d(%d)\"];\n", -v->id(),-p->end_vertex()->id(),p->id(),p->pid());
96 m_cursor += sprintf(m_cursor,
"labelloc=\"t\";\nlabel=\"Event %d; Vertices %lu; Particles %lu;\";\n", evt.
event_number(), evt.
vertices().size(), evt.
particles().size());
97 m_cursor += sprintf(m_cursor,
"}\n\n");
105 }
catch (
const std::bad_alloc& e) {
113 HEPMC3_ERROR(
"WriterDOT::allocate_buffer: could not allocate buffer!" )
125 m_stream->write( m_buffer, length );
const std::vector< ConstGenVertexPtr > & vertices() const
Get list of vertices (const)
int m_style
style of dot file
#define HEPMC3_WARNING(MESSAGE)
Macro for printing HEPMC3_HEPMC3_WARNING messages.
std::ofstream m_file
Output file.
char * m_buffer
Stream buffer.
bool is_parton(const int &pd)
Detects if particle is parton. Might be used to draw partons different from hadrons.
void close()
Close file stream.
void allocate_buffer()
allocates buffer for output
int event_number() const
Get event number.
std::vector< ConstGenParticlePtr > beams() const
Vector of beam particles.
void flush()
flushes output buffer
Stores event-related information.
WriterDOT(const std::string &filename, std::shared_ptr< GenRunInfo > run=std::shared_ptr< GenRunInfo >())
Constructor.
std::ostream * m_stream
Output stream.
char * m_cursor
Cursor inside stream buffer.
unsigned long m_buffer_size
Buffer size.
void write_event(const GenEvent &evt)
Write event to file.
#define HEPMC3_ERROR(MESSAGE)
Macro for printing error messages.
Definition of class WriterDOT.
const std::vector< ConstGenParticlePtr > & particles() const
Get list of particles (const)
Feature< Feature_type > abs(const Feature< Feature_type > &input)
Obtain the absolute value of a Feature. This works as you'd expect. If foo is a valid Feature...
void forced_flush()
flushes output buffer