A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
gnuplot-helper-example.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2013 University of Washington
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * This is based on double-probe-example.cc.
18 *
19 * Author: Mitch Watrous (watrous@u.washington.edu)
20 */
21
22/*
23 * This example is designed to show the main features of an
24 * ns3::GnuplotHelper.
25 */
26
27#include "ns3/core-module.h"
28#include "ns3/stats-module.h"
29
30#include <string>
31
32using namespace ns3;
33
34NS_LOG_COMPONENT_DEFINE("GnuplotHelperExample");
35
36/**
37 * This is our test object, an object that increments a counter according
38 * to a Poisson process, and exports the (integer-valued) count as a
39 * trace source.
40 */
41class Emitter : public Object
42{
43 public:
44 /**
45 * Register this type.
46 * \return The TypeId.
47 */
48 static TypeId GetTypeId();
50
51 private:
52 void DoInitialize() override;
53 /// Counts how many time this function is called.
54 void Count();
55
56 TracedValue<uint32_t> m_counter; //!< Simple counter
57 Ptr<ExponentialRandomVariable> m_var; //!< Random number generator.
58};
59
61
64{
65 static TypeId tid = TypeId("ns3::Emitter")
67 .SetGroupName("Stats")
68 .AddConstructor<Emitter>()
69 .AddTraceSource("Counter",
70 "sample counter",
72 "ns3::TracedValueCallback::Double");
73 return tid;
74}
75
77{
78 NS_LOG_FUNCTION(this);
79 m_counter = 0;
80 m_var = CreateObject<ExponentialRandomVariable>();
81}
82
83void
85{
86 NS_LOG_FUNCTION(this);
88}
89
90void
92{
93 NS_LOG_FUNCTION(this);
94 NS_LOG_DEBUG("Counting at " << Simulator::Now().As(Time::S));
95 m_counter += 1.0;
97}
98
99int
100main(int argc, char* argv[])
101{
102 CommandLine cmd(__FILE__);
103 cmd.Parse(argc, argv);
104
105 //
106 // This Emitter has a trace source object that will emit values at
107 // random times.
108 //
109
110 Ptr<Emitter> emitter = CreateObject<Emitter>();
111 Names::Add("/Names/Emitter", emitter);
112
113 //
114 // This gnuplot helper will be used to produce output used to make
115 // gnuplot plots.
116 //
117
118 // Create the gnuplot helper.
119 GnuplotHelper plotHelper;
120
121 // Configure the plot. Arguments include file prefix, plot title,
122 // x-label, y-label, and output file type
123 plotHelper.ConfigurePlot("gnuplot-helper-example",
124 "Emitter Count vs. Time",
125 "Time (Seconds)",
126 "Emitter Count",
127 "png");
128
129 // Create a probe. Because the trace source we are interested in is
130 // of type uint32_t, we specify the type of probe to use by the first
131 // argument specifying its ns3 TypeId.
132 plotHelper.PlotProbe("ns3::Uinteger32Probe",
133 "/Names/Emitter/Counter",
134 "Output",
135 "Emitter Count",
137
138 // The Emitter object is not associated with an ns-3 node, so
139 // it won't get started automatically, so we need to do this ourselves
141
142 Simulator::Stop(Seconds(100.0));
145
146 return 0;
147}
This is our test object, an object that increments counters at various times and emits one of them as...
void DoInitialize() override
Initialize() implementation.
static TypeId GetTypeId()
Register this type.
TracedValue< double > m_counter
Sample counter, normally this would be integer type.
static TypeId GetTypeId()
Register this type.
void Count()
Counts how many time this function is called.
Ptr< ExponentialRandomVariable > m_var
Random number generator.
Parse command-line arguments.
Definition: command-line.h:232
double GetValue(double mean, double bound)
Get the next random value drawn from the distribution.
Helper class used to make gnuplot plots.
void ConfigurePlot(const std::string &outputFileNameWithoutExtension, const std::string &title, const std::string &xLegend, const std::string &yLegend, const std::string &terminalType="png")
void PlotProbe(const std::string &typeId, const std::string &path, const std::string &probeTraceSource, const std::string &title, GnuplotAggregator::KeyLocation keyLocation=GnuplotAggregator::KEY_INSIDE)
static void Add(std::string name, Ptr< Object > object)
Add the association between the string "name" and the Ptr<Object> obj.
Definition: names.cc:775
A base class which provides memory management and object aggregation.
Definition: object.h:89
void Initialize()
Invoke DoInitialize on all Objects aggregated to this one.
Definition: object.cc:214
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:571
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:142
static Time Now()
Return the current simulation virtual time.
Definition: simulator.cc:208
static void Run()
Run the simulation.
Definition: simulator.cc:178
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:186
@ S
second
Definition: nstime.h:116
Trace classes with value semantics.
Definition: traced-value.h:116
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:932
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:268
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:46
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1326
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns cmd
Definition: second.py:40