11#include "ns3/assert.h" 
   40    Data(
const std::string& title);
 
   66                                 bool generateOneOutputFile,
 
   67                                 unsigned int dataFileDatasetIndex,
 
   68                                 std::string& dataFileName) 
const = 0;
 
   77    virtual void PrintDataFile(std::ostream& os, 
bool generateOneOutputFile) 
const = 0;
 
 
   89      m_extra(m_defaultExtra)
 
 
  107    : m_data(original.m_data)
 
 
  123    if (
this != &original)
 
 
  174    Data2d(
const std::string& title);
 
  178                         bool generateOneOutputFile,
 
  179                         unsigned int dataFileDatasetIndex,
 
  180                         std::string& dataFileName) 
const override;
 
  181    void PrintDataFile(std::ostream& os, 
bool generateOneOutputFile) 
const override;
 
 
  187      m_style(m_defaultStyle),
 
  188      m_errorBars(m_defaultErrorBars)
 
 
  200                                          bool generateOneOutputFile,
 
  201                                          unsigned int dataFileDatasetIndex,
 
  202                                          std::string& dataFileName)
 const 
  206    if (generateOneOutputFile)
 
  212        os << 
"\"" << dataFileName << 
"\" index " << dataFileDatasetIndex;
 
  215    if (!m_title.empty())
 
  217        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";
 
  276    if (!m_extra.empty())
 
  278        os << 
" " << m_extra;
 
 
  285    for (
auto i = m_pointset.begin(); i != m_pointset.end(); ++i)
 
  296            os << i->x << 
" " << i->y << std::endl;
 
  299            os << i->x << 
" " << i->y << 
" " << i->dx << std::endl;
 
  302            os << i->x << 
" " << i->y << 
" " << i->dy << std::endl;
 
  305            os << i->x << 
" " << i->y << 
" " << i->dx << 
" " << i->dy << std::endl;
 
  312    if (generateOneOutputFile)
 
  314        os << 
"e" << std::endl;
 
 
  326    return m_pointset.empty();
 
 
  362    reinterpret_cast<Data2d*
>(
m_data)->m_errorBars = errorBars;
 
 
  389    data.dx = errorDelta;
 
  390    data.dy = errorDelta;
 
 
  403    data.dx = xErrorDelta;
 
  404    data.dy = yErrorDelta;
 
 
  435    Function2d(
const std::string& title, 
const std::string& function);
 
  439                         bool generateOneOutputFile,
 
  440                         unsigned int dataFileDatasetIndex,
 
  441                         std::string& dataFileName) 
const override;
 
  442    void PrintDataFile(std::ostream& os, 
bool generateOneOutputFile) 
const override;
 
 
  460                                               bool generateOneOutputFile,
 
  461                                               unsigned int dataFileDatasetIndex,
 
  462                                               std::string& dataFileName)
 const 
  466    if (!m_title.empty())
 
  468        os << 
" title \"" << m_title << 
"\"";
 
  471    if (!m_extra.empty())
 
  473        os << 
" " << m_extra;
 
 
  520    Data3d(
const std::string& title);
 
  524                         bool generateOneOutputFile,
 
  525                         unsigned int dataFileDatasetIndex,
 
  526                         std::string& dataFileName) 
const override;
 
  527    void PrintDataFile(std::ostream& os, 
bool generateOneOutputFile) 
const override;
 
 
  533      m_style(m_defaultStyle)
 
 
  545                                          bool generateOneOutputFile,
 
  546                                          unsigned int dataFileDatasetIndex,
 
  547                                          std::string& dataFileName)
 const 
  551    if (!m_style.empty())
 
  553        os << 
" " << m_style;
 
  556    if (!m_title.empty())
 
  558        os << 
" title \"" << m_title << 
"\"";
 
  561    if (!m_extra.empty())
 
  563        os << 
" " << m_extra;
 
 
  570    for (
auto i = m_pointset.begin(); i != m_pointset.end(); ++i)
 
  578        os << i->x << 
" " << i->y << 
" " << i->z << std::endl;
 
  580    os << 
"e" << std::endl;
 
 
  586    return m_pointset.empty();
 
 
  648    Function3d(
const std::string& title, 
const std::string& function);
 
  652                         bool generateOneOutputFile,
 
  653                         unsigned int dataFileDatasetIndex,
 
  654                         std::string& dataFileName) 
const override;
 
  655    void PrintDataFile(std::ostream& os, 
bool generateOneOutputFile) 
const override;
 
 
  673                                               bool generateOneOutputFile,
 
  674                                               unsigned int dataFileDatasetIndex,
 
  675                                               std::string& dataFileName)
 const 
  679    if (!m_title.empty())
 
  681        os << 
" title \"" << m_title << 
"\"";
 
  684    if (!m_extra.empty())
 
  686        os << 
" " << m_extra;
 
 
  717    : m_outputFilename(outputFilename),
 
  718      m_terminal(DetectTerminal(outputFilename)),
 
  720      m_generateOneOutputFile(false),
 
  721      m_dataFileDatasetIndex(0)
 
 
  734    std::string::size_type dotpos = filename.rfind(
'.');
 
  735    if (dotpos == std::string::npos)
 
  740    if (filename.substr(dotpos) == 
".png")
 
  744    else if (filename.substr(dotpos) == 
".pdf")
 
 
  806        osControl << 
"set terminal " << 
m_terminal << std::endl;
 
  816        osControl << 
"set title \"" << 
m_title << 
"\"" << std::endl;
 
  821        osControl << 
"set xlabel \"" << 
m_xLegend << 
"\"" << std::endl;
 
  826        osControl << 
"set ylabel \"" << 
m_yLegend << 
"\"" << std::endl;
 
  831        osControl << 
m_extra << std::endl;
 
  842    std::string command = 
m_datasets.begin()->m_data->GetCommand();
 
  847                      "Cannot mix 'plot' and 'splot' GnuplotDatasets.");
 
  850    osControl << command << 
" ";
 
  858        isDataEmpty = i->m_data->IsEmpty();
 
  863            i->m_data->PrintExpression(osControl,
 
  877    osControl << std::endl;
 
 
  896    : m_outputFilename(outputFilename),
 
  897      m_terminal(
Gnuplot::DetectTerminal(outputFilename))
 
 
  918        throw(std::range_error(
"Gnuplot id is out of range"));
 
 
  934        os << 
"set terminal " << 
m_terminal << std::endl;
 
  944        i->GenerateOutput(os);
 
 
  950                                  std::ostream& osData,
 
  951                                  std::string dataFileName)
 
  958        osControl << 
"set terminal " << 
m_terminal << std::endl;
 
  968        i->GenerateOutput(osControl, osData, dataFileName);
 
 
void AddEmptyLine()
Add an empty line in the data output sequence.
static Style m_defaultStyle
default plot style
static void SetDefaultStyle(Style style)
Change default style for all newly created objects.
ErrorBars
Whether errorbars should be used for this dataset.
static void SetDefaultErrorBars(ErrorBars errorBars)
Change default errorbars style for all newly created objects.
void SetErrorBars(ErrorBars errorBars)
std::vector< Point > PointSet
The set of points in the dataset.
void SetStyle(Style style)
void Add(double x, double y)
Style
The plotting style to use for this dataset.
static 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")
std::vector< Point > PointSet
The set of points in the dataset.
static std::string m_defaultStyle
default plot style
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.
void SetExtra(const std::string &extra)
Add extra formatting parameters to this dataset.
Data * m_data
Reference counted data object.
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.
Structure storing the data to for a 2D plot.
Style m_style
The plotting style to use for this dataset.
void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const override
Print the inline data file contents trailing the plot command.
void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const override
Prints the plot description used as argument to (s)plot.
PointSet m_pointset
The set of points in this data set.
bool IsEmpty() const override
Checks to see if this GnuplotDataset is empty.
Data2d(const std::string &title)
Initializes with the values from m_defaultStyle and m_defaultErrorBars.
std::string GetCommand() const override
Returns the plot type ("plot" or "splot").
ErrorBars m_errorBars
Whether errorbars should be used for this dataset.
Structure storing the function to be used for a 2D plot.
std::string GetCommand() const override
Returns the plot type ("plot" or "splot").
void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const override
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.
void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const override
Prints the plot description used as argument to (s)plot.
std::string m_function
Function to use.
bool IsEmpty() const override
Checks to see if this GnuplotDataset is empty.
Structure storing the data for a 3D plot.
std::string GetCommand() const override
Returns the plot type ("plot" or "splot").
bool IsEmpty() const override
Checks to see if this GnuplotDataset is empty.
void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const override
Prints the plot description used as argument to (s)plot.
void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const override
Print the inline data file contents trailing the plot command.
std::string m_style
The plotting style to use for this dataset.
PointSet m_pointset
The set of points in this data set.
Data3d(const std::string &title)
Initializes with value from m_defaultStyle.
Structure storing the function to be used for a 3D plot.
bool IsEmpty() const override
Checks to see if this GnuplotDataset is empty.
std::string m_function
Function to use.
void PrintExpression(std::ostream &os, bool generateOneOutputFile, unsigned int dataFileDatasetIndex, std::string &dataFileName) const override
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.
void PrintDataFile(std::ostream &os, bool generateOneOutputFile) const override
Print the inline data file contents trailing the plot command.
std::string GetCommand() const override
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").