22 #include "ns3/assert.h"
49 Data(
const std::string& title);
75 bool generateOneOutputFile,
76 unsigned int dataFileDatasetIndex,
77 std::string &dataFileName)
const = 0;
86 virtual void PrintDataFile (std::ostream &os,
bool generateOneOutputFile)
const = 0;
98 m_extra (m_defaultExtra)
116 : m_data (original.m_data)
129 if (
this != &original)
177 Data2d(
const std::string& title);
181 bool generateOneOutputFile,
182 unsigned int dataFileDatasetIndex,
183 std::string &dataFileName)
const;
184 virtual void PrintDataFile (std::ostream &os,
bool generateOneOutputFile)
const;
190 m_style (m_defaultStyle),
191 m_errorBars (m_defaultErrorBars)
203 bool generateOneOutputFile,
204 unsigned int dataFileDatasetIndex,
205 std::string &dataFileName)
const
209 if (generateOneOutputFile)
215 os <<
"\"" << dataFileName <<
"\" index " << dataFileDatasetIndex;
219 os <<
" title \"" << m_title <<
"\"";
229 os <<
" with points";
232 os <<
" with xerrorbars";
235 os <<
" with yerrorbars";
238 os <<
" with xyerrorbars";
246 os <<
" with linespoints";
249 os <<
" with errorlines";
252 os <<
" with yerrorlines";
255 os <<
" with xyerrorlines";
263 os <<
" with impulses";
269 os <<
" with fsteps";
272 os <<
" with histeps";
274 os <<
" with filledcurve";
279 os <<
" " << m_extra;
285 for (PointSet::const_iterator i = m_pointset.begin ();
286 i != m_pointset.end (); ++i)
293 switch (m_errorBars) {
295 os << i->x <<
" " << i->y << std::endl;
298 os << i->x <<
" " << i->y <<
" " << i->dx << std::endl;
301 os << i->x <<
" " << i->y <<
" " << i->dy << std::endl;
304 os << i->x <<
" " << i->y <<
" " << i->dx <<
" " << i->dy << std::endl;
311 if (generateOneOutputFile)
313 os <<
"e" << std::endl;
325 return (m_pointset.size () == 0);
359 reinterpret_cast<Data2d*
>(
m_data)->m_errorBars = errorBars;
386 data.dx = errorDelta;
387 data.dy = errorDelta;
400 data.dx = xErrorDelta;
401 data.dy = yErrorDelta;
432 Function2d(
const std::string& title,
const std::string&
function);
436 bool generateOneOutputFile,
437 unsigned int dataFileDatasetIndex,
438 std::string &dataFileName)
const;
439 virtual void PrintDataFile (std::ostream &os,
bool generateOneOutputFile)
const;
445 m_function (function)
457 bool generateOneOutputFile,
458 unsigned int dataFileDatasetIndex,
459 std::string &dataFileName)
const
464 os <<
" title \"" << m_title <<
"\"";
467 os <<
" " << m_extra;
513 Data3d(
const std::string& title);
517 bool generateOneOutputFile,
518 unsigned int dataFileDatasetIndex,
519 std::string &dataFileName)
const;
520 virtual void PrintDataFile (std::ostream &os,
bool generateOneOutputFile)
const;
526 m_style (m_defaultStyle)
538 bool generateOneOutputFile,
539 unsigned int dataFileDatasetIndex,
540 std::string &dataFileName)
const
545 os <<
" " << m_style;
548 os <<
" title \"" << m_title <<
"\"";
551 os <<
" " << m_extra;
557 for (PointSet::const_iterator i = m_pointset.begin ();
558 i != m_pointset.end (); ++i)
565 os << i->x <<
" " << i->y <<
" " << i->z << std::endl;
567 os <<
"e" << std::endl;
573 return (m_pointset.size () == 0);
634 Function3d(
const std::string& title,
const std::string&
function);
638 bool generateOneOutputFile,
639 unsigned int dataFileDatasetIndex,
640 std::string &dataFileName)
const;
641 virtual void PrintDataFile (std::ostream &os,
bool generateOneOutputFile)
const;
647 m_function (function)
659 bool generateOneOutputFile,
660 unsigned int dataFileDatasetIndex,
661 std::string &dataFileName)
const
666 os <<
" title \"" << m_title <<
"\"";
669 os <<
" " << m_extra;
699 : m_outputFilename (outputFilename),
700 m_terminal ( DetectTerminal (outputFilename) ),
702 m_generateOneOutputFile (false),
703 m_dataFileDatasetIndex (0)
714 std::string::size_type dotpos = filename.rfind (
'.');
715 if (dotpos == std::string::npos)
return "";
717 if (filename.substr (dotpos) ==
".png") {
720 else if (filename.substr (dotpos) ==
".pdf") {
778 std::ostream &osData,
779 std::string dataFileName)
782 osControl <<
"set terminal " <<
m_terminal << std::endl;
788 osControl <<
"set title \"" <<
m_title <<
"\"" << std::endl;
791 osControl <<
"set xlabel \"" <<
m_xLegend <<
"\"" << std::endl;
794 osControl <<
"set ylabel \"" <<
m_yLegend <<
"\"" << std::endl;
797 osControl <<
m_extra << std::endl;
805 std::string command =
m_datasets.begin ()->m_data->GetCommand ();
807 for (Datasets::const_iterator i =
m_datasets.begin () + 1;
811 "Cannot mix 'plot' and 'splot' GnuplotDatasets.");
814 osControl << command <<
" ";
822 isDataEmpty = i->m_data->IsEmpty ();
827 i->m_data->PrintExpression (osControl,
841 osControl << std::endl;
860 : m_outputFilename (outputFilename),
861 m_terminal (
Gnuplot::DetectTerminal (outputFilename) )
881 throw(std::range_error (
"Gnuplot id is out of range"));
893 os <<
"set terminal " <<
m_terminal << std::endl;
898 for (Plots::iterator i =
m_plots.begin (); i !=
m_plots.end (); ++i)
900 i->GenerateOutput (os);
906 std::string dataFileName)
912 osControl <<
"set terminal " <<
m_terminal << std::endl;
917 for (Plots::iterator i =
m_plots.begin (); i !=
m_plots.end (); ++i)
919 i->GenerateOutput (osControl, osData, dataFileName);
void AddEmptyLine()
Add an empty line in the data output sequence.
std::vector< struct Point > PointSet
The set of points in the dataset.
void SetErrorBars(enum ErrorBars errorBars)
ErrorBars
Whether errorbars should be used for this dataset.
static enum Style m_defaultStyle
default plot style
void SetStyle(enum Style style)
static void SetDefaultStyle(enum Style style)
Change default style for all newly created objects.
void Add(double x, double y)
Style
The plotting style to use for this dataset.
static void SetDefaultErrorBars(enum ErrorBars errorBars)
Change default errorbars style for all newly created objects.
static enum ErrorBars m_defaultErrorBars
default error bars type
Gnuplot2dDataset(const std::string &title="Untitled")
void SetFunction(const std::string &function)
Gnuplot2dFunction(const std::string &title="Untitled", const std::string &function="")
void AddEmptyLine()
Add an empty line in the data output sequence.
Gnuplot3dDataset(const std::string &title="Untitled")
static std::string m_defaultStyle
default plot style
std::vector< struct Point > PointSet
The set of points in the dataset.
void Add(double x, double y, double z)
static void SetDefaultStyle(const std::string &style)
Change default style for all newly created objects.
void SetStyle(const std::string &style)
Gnuplot3dFunction(const std::string &title="Untitled", const std::string &function="")
void SetFunction(const std::string &function)
std::string m_outputFilename
Output file name.
GnuplotCollection(const std::string &outputFilename)
void AddPlot(const Gnuplot &plot)
void SetTerminal(const std::string &terminal)
Gnuplot & GetPlot(unsigned int id)
Return a pointer to one of the added plots.
std::string m_terminal
Gnuplot "terminal" to use.
Plots m_plots
Plots in the collection.
void GenerateOutput(std::ostream &os)
Abstract class to store a plot line to be used by ns3::Gnuplot.
GnuplotDataset(const GnuplotDataset &original)
Reference-counting copy constructor.
static void SetDefaultExtra(const std::string &extra)
Change extra formatting style parameters for newly created objects.
GnuplotDataset & operator=(const GnuplotDataset &original)
Reference-counting assignment operator.
struct Data * m_data
Reference counted data object.
void SetExtra(const std::string &extra)
Add extra formatting parameters to this dataset.
static std::string m_defaultExtra
Extra gnuplot parameters set on every newly created dataset.
void SetTitle(const std::string &title)
Change line title.
~GnuplotDataset()
Reference-counting destructor.
a simple class to generate gnuplot-ready plotting commands from a set of datasets.
std::string m_yLegend
Y axis legend.
void AddDataset(const GnuplotDataset &dataset)
void SetLegend(const std::string &xLegend, const std::string &yLegend)
void SetTerminal(const std::string &terminal)
std::string m_terminal
Gnuplot "terminal" to use.
std::string m_extra
extra parameters for the plot
unsigned int m_dataFileDatasetIndex
Data set index to plot.
void AppendExtra(const std::string &extra)
Datasets m_datasets
Data sets.
void GenerateOutput(std::ostream &os)
Writes gnuplot commands and data values to a single output stream.
std::string m_title
Plot title.
void SetDataFileDatasetIndex(unsigned int index)
Sets the current data stream index in the data file.
std::string m_xLegend
X axis legend.
std::string m_outputFilename
Output file name.
Gnuplot(const std::string &outputFilename="", const std::string &title="")
void SetExtra(const std::string &extra)
void SetTitle(const std::string &title)
void SetOutputFilename(const std::string &outputFilename)
bool m_generateOneOutputFile
true if only one plot will be generated
static std::string DetectTerminal(const std::string &filename)
Crude attempt to auto-detect the correct terminal setting by inspecting the filename's extension.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
list x
Random number samples.
Structure storing the data to for a 2D plot.
virtual void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const
Prints the plot description used as argument to (s)plot.
enum ErrorBars m_errorBars
Whether errorbars should be used for this dataset.
virtual std::string GetCommand() const
Returns the plot type ("plot" or "splot").
virtual void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const
Print the inline data file contents trailing the plot command.
PointSet m_pointset
The set of points in this data set.
virtual bool IsEmpty() const
Checks to see if this GnuplotDataset is empty.
Data2d(const std::string &title)
Initializes with the values from m_defaultStyle and m_defaultErrorBars.
enum Style m_style
The plotting style to use for this dataset.
Structure storing the function to be used for a 2D plot.
virtual void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const
Print the inline data file contents trailing the plot command.
Function2d(const std::string &title, const std::string &function)
Initializes with the function and title.
virtual void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const
Prints the plot description used as argument to (s)plot.
std::string m_function
Function to use.
virtual std::string GetCommand() const
Returns the plot type ("plot" or "splot").
virtual bool IsEmpty() const
Checks to see if this GnuplotDataset is empty.
Structure storing the data for a 3D plot.
virtual void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const
Prints the plot description used as argument to (s)plot.
virtual std::string GetCommand() const
Returns the plot type ("plot" or "splot").
virtual bool IsEmpty() const
Checks to see if this GnuplotDataset is empty.
std::string m_style
The plotting style to use for this dataset.
PointSet m_pointset
The set of points in this data set.
virtual void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const
Print the inline data file contents trailing the plot command.
Data3d(const std::string &title)
Initializes with value from m_defaultStyle.
Structure storing the function to be used for a 3D plot.
std::string m_function
Function to use.
virtual void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const
Print the inline data file contents trailing the plot command.
virtual void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const
Prints the plot description used as argument to (s)plot.
Function3d(const std::string &title, const std::string &function)
Initializes with the function and title.
virtual bool IsEmpty() const
Checks to see if this GnuplotDataset is empty.
virtual std::string GetCommand() const
Returns the plot type ("plot" or "splot").
Structure storing the data to plot.
unsigned int m_references
ref/unref counter for garbage collection
std::string m_extra
Extra parameters for the plot.
virtual void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const =0
Prints the plot description used as argument to (s)plot.
virtual void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const =0
Print the inline data file contents trailing the plot command.
virtual bool IsEmpty() const =0
Checks to see if this GnuplotDataset is empty.
Data(const std::string &title)
Initializes the reference counter to 1 and sets m_title and m_extra.
std::string m_title
Dataset title.
virtual std::string GetCommand() const =0
Returns the plot type ("plot" or "splot").