INET Framework for OMNeT++/OMNEST
inet::visualizer::PathVisualizerBase Class Referenceabstract

#include <PathVisualizerBase.h>

Inheritance diagram for inet::visualizer::PathVisualizerBase:
inet::visualizer::VisualizerBase inet::visualizer::PathCanvasVisualizerBase inet::visualizer::PathOsgVisualizerBase inet::visualizer::NetworkRouteCanvasVisualizer inet::visualizer::TransportRouteCanvasVisualizer inet::visualizer::NetworkRouteOsgVisualizer inet::visualizer::TransportRouteOsgVisualizer

Classes

class  DirectiveResolver
 
class  PathVisualization
 

Public Member Functions

virtual ~PathVisualizerBase ()
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, cObject *object, cObject *details) override
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual void handleParameterChange (const char *name) override
 
virtual void refreshDisplay () const override
 
virtual void subscribe ()
 
virtual void unsubscribe ()
 
virtual bool isPathStart (cModule *module) const =0
 
virtual bool isPathEnd (cModule *module) const =0
 
virtual bool isPathElement (cModule *module) const =0
 
virtual const PathVisualizationcreatePathVisualization (const std::vector< int > &path, cPacket *packet) const =0
 
virtual const PathVisualizationgetPathVisualization (const std::vector< int > &path)
 
virtual void addPathVisualization (const PathVisualization *pathVisualization)
 
virtual void removePathVisualization (const PathVisualization *pathVisualization)
 
virtual void removeAllPathVisualizations ()
 
virtual void setAlpha (const PathVisualization *pathVisualization, double alpha) const =0
 
virtual const std::vector< int > * getIncompletePath (int treeId)
 
virtual void addToIncompletePath (int treeId, cModule *module)
 
virtual void removeIncompletePath (int treeId)
 
virtual std::string getPathVisualizationText (cPacket *packet) const
 
virtual void refreshPathVisualization (const PathVisualization *pathVisualization, cPacket *packet)
 
virtual void updatePathVisualization (const std::vector< int > &path, cPacket *packet)
 
- Protected Member Functions inherited from inet::visualizer::VisualizerBase
virtual int numInitStages () const override
 
virtual Coord getPosition (const cModule *networkNode) const
 
virtual Coord getContactPosition (const cModule *networkNode, const Coord &fromPosition, const char *contactMode, double contactSpacing) const
 
virtual InterfaceEntrygetInterfaceEntry (cModule *networkNode, cModule *module) const
 

Protected Attributes

LineManagerlineManager = nullptr
 
std::map< int, std::vector< int > > incompletePaths
 Maps packet to module vector. More...
 
std::map< int, int > numPaths
 Maps nodes to the number of paths that go through it. More...
 
std::multimap< std::pair< int, int >, const PathVisualization * > pathVisualizations
 Maps source/destination modules to multiple paths between them. More...
 
Parameters
bool displayRoutes = false
 
NetworkNodeFilter nodeFilter
 
PacketFilter packetFilter
 
ColorSet lineColorSet
 
cFigure::LineStyle lineStyle
 
double lineWidth = NaN
 
bool lineSmooth = false
 
double lineShift = NaN
 
const char * lineShiftMode = nullptr
 
double lineContactSpacing = NaN
 
const char * lineContactMode = nullptr
 
StringFormat labelFormat
 
cFigure::Font labelFont
 
const char * labelColorAsString = nullptr
 
cFigure::Color labelColor
 
const char * fadeOutMode = nullptr
 
double fadeOutTime = NaN
 
double fadeOutAnimationSpeed = NaN
 
- Protected Attributes inherited from inet::visualizer::VisualizerBase
cModule * visualizerTargetModule = nullptr
 
const char * tags = nullptr
 

Constructor & Destructor Documentation

inet::visualizer::PathVisualizerBase::~PathVisualizerBase ( )
virtual
48 {
49  if (displayRoutes)
50  unsubscribe();
51 }
bool displayRoutes
Definition: PathVisualizerBase.h:64
virtual void unsubscribe()
Definition: PathVisualizerBase.cc:128

Member Function Documentation

void inet::visualizer::PathVisualizerBase::addPathVisualization ( const PathVisualization pathVisualization)
protectedvirtual

Reimplemented in inet::visualizer::PathCanvasVisualizerBase.

Referenced by inet::visualizer::PathCanvasVisualizerBase::addPathVisualization(), and updatePathVisualization().

161 {
162  auto sourceAndDestination = std::pair<int, int>(pathVisualization->moduleIds.front(), pathVisualization->moduleIds.back());
163  pathVisualizations.insert(std::pair<std::pair<int, int>, const PathVisualization *>(sourceAndDestination, pathVisualization));
164 }
std::multimap< std::pair< int, int >, const PathVisualization * > pathVisualizations
Maps source/destination modules to multiple paths between them.
Definition: PathVisualizerBase.h:96
void inet::visualizer::PathVisualizerBase::addToIncompletePath ( int  treeId,
cModule *  module 
)
protectedvirtual

Referenced by receiveSignal().

201 {
202  auto& moduleIds = incompletePaths[treeId];
203  auto moduleId = module->getId();
204  if (moduleIds.size() == 0 || moduleIds[moduleIds.size() - 1] != moduleId)
205  moduleIds.push_back(moduleId);
206 }
std::map< int, std::vector< int > > incompletePaths
Maps packet to module vector.
Definition: PathVisualizerBase.h:88
const PathVisualizerBase::PathVisualization * inet::visualizer::PathVisualizerBase::createPathVisualization ( const std::vector< int > &  path,
cPacket *  packet 
) const
protectedpure virtual
const std::vector< int > * inet::visualizer::PathVisualizerBase::getIncompletePath ( int  treeId)
protectedvirtual

Referenced by receiveSignal().

192 {
193  auto it = incompletePaths.find(treeId);
194  if (it == incompletePaths.end())
195  return nullptr;
196  else
197  return &it->second;
198 }
std::map< int, std::vector< int > > incompletePaths
Maps packet to module vector.
Definition: PathVisualizerBase.h:88
const PathVisualizerBase::PathVisualization * inet::visualizer::PathVisualizerBase::getPathVisualization ( const std::vector< int > &  path)
protectedvirtual

Referenced by updatePathVisualization().

151 {
152  auto key = std::pair<int, int>(path.front(), path.back());
153  auto range = pathVisualizations.equal_range(key);
154  for (auto it = range.first; it != range.second; it++)
155  if (it->second->moduleIds == path)
156  return it->second;
157  return nullptr;
158 }
std::multimap< std::pair< int, int >, const PathVisualization * > pathVisualizations
Maps source/destination modules to multiple paths between them.
Definition: PathVisualizerBase.h:96
std::string inet::visualizer::PathVisualizerBase::getPathVisualizationText ( cPacket *  packet) const
protectedvirtual

Referenced by inet::visualizer::PathCanvasVisualizerBase::createPathVisualization(), and inet::visualizer::PathCanvasVisualizerBase::refreshPathVisualization().

140 {
141  DirectiveResolver directiveResolver(packet);
142  return labelFormat.formatString(&directiveResolver);
143 }
StringFormat labelFormat
Definition: PathVisualizerBase.h:75
const char * formatString(IDirectiveResolver *resolver) const
Definition: StringFormat.cc:29
void inet::visualizer::PathVisualizerBase::handleParameterChange ( const char *  name)
overrideprotectedvirtual
84 {
85  if (name != nullptr) {
86  if (!strcmp(name, "nodeFilter"))
87  nodeFilter.setPattern(par("nodeFilter"));
88  else if (!strcmp(name, "packetFilter"))
89  packetFilter.setPattern(par("packetFilter"));
91  }
92 }
void setPattern(const char *pattern)
Definition: NetworkNodeFilter.cc:24
PacketFilter packetFilter
Definition: PathVisualizerBase.h:66
NetworkNodeFilter nodeFilter
Definition: PathVisualizerBase.h:65
virtual void removeAllPathVisualizations()
Definition: PathVisualizerBase.cc:178
void setPattern(const char *pattern)
Definition: PacketFilter.cc:24
void inet::visualizer::PathVisualizerBase::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::visualizer::VisualizerBase.

Reimplemented in inet::visualizer::PathOsgVisualizerBase, and inet::visualizer::PathCanvasVisualizerBase.

Referenced by inet::visualizer::PathCanvasVisualizerBase::initialize().

54 {
56  if (!hasGUI()) return;
57  if (stage == INITSTAGE_LOCAL) {
58  displayRoutes = par("displayRoutes");
59  nodeFilter.setPattern(par("nodeFilter"));
60  packetFilter.setPattern(par("packetFilter"));
61  lineColorSet.parseColors(par("lineColor"));
62  lineStyle = cFigure::parseLineStyle(par("lineStyle"));
63  lineWidth = par("lineWidth");
64  lineSmooth = par("lineSmooth");
65  lineShift = par("lineShift");
66  lineShiftMode = par("lineShiftMode");
67  lineContactSpacing = par("lineContactSpacing");
68  lineContactMode = par("lineContactMode");
69  labelFormat.parseFormat(par("labelFormat"));
70  labelFont = cFigure::parseFont(par("labelFont"));
71  labelColorAsString = par("labelColor");
74  fadeOutMode = par("fadeOutMode");
75  fadeOutTime = par("fadeOutTime");
76  fadeOutAnimationSpeed = par("fadeOutAnimationSpeed");
78  if (displayRoutes)
79  subscribe();
80  }
81 }
StringFormat labelFormat
Definition: PathVisualizerBase.h:75
double fadeOutAnimationSpeed
Definition: PathVisualizerBase.h:81
double lineShift
Definition: PathVisualizerBase.h:71
const char * lineContactMode
Definition: PathVisualizerBase.h:74
void parseColors(const char *colorNames)
Definition: ColorSet.cc:24
void setPattern(const char *pattern)
Definition: NetworkNodeFilter.cc:24
double lineWidth
Definition: PathVisualizerBase.h:69
static LineManager * getLineManager(const cCanvas *canvas)
Definition: LineManager.cc:27
PacketFilter packetFilter
Definition: PathVisualizerBase.h:66
NetworkNodeFilter nodeFilter
Definition: PathVisualizerBase.h:65
const char * lineShiftMode
Definition: PathVisualizerBase.h:72
bool lineSmooth
Definition: PathVisualizerBase.h:70
cFigure::Font labelFont
Definition: PathVisualizerBase.h:76
virtual void initialize(int stage) override
Definition: VisualizerBase.cc:29
const char * fadeOutMode
Definition: PathVisualizerBase.h:79
double fadeOutTime
Definition: PathVisualizerBase.h:80
bool displayRoutes
Definition: PathVisualizerBase.h:64
bool isEmpty(const char *s)
Definition: PathVisualizerBase.h:35
Local initializations.
Definition: InitStages.h:35
void setPattern(const char *pattern)
Definition: PacketFilter.cc:24
Color
Definition: DiffservUtil.h:30
void parseFormat(const char *format)
Definition: StringFormat.cc:24
const char * labelColorAsString
Definition: PathVisualizerBase.h:77
cModule * visualizerTargetModule
Definition: VisualizerBase.h:31
cFigure::LineStyle lineStyle
Definition: PathVisualizerBase.h:68
LineManager * lineManager
Definition: PathVisualizerBase.h:84
double lineContactSpacing
Definition: PathVisualizerBase.h:73
ColorSet lineColorSet
Definition: PathVisualizerBase.h:67
cFigure::Color labelColor
Definition: PathVisualizerBase.h:78
virtual void subscribe()
Definition: PathVisualizerBase.cc:120
virtual bool inet::visualizer::PathVisualizerBase::isPathElement ( cModule *  module) const
protectedpure virtual
virtual bool inet::visualizer::PathVisualizerBase::isPathEnd ( cModule *  module) const
protectedpure virtual
virtual bool inet::visualizer::PathVisualizerBase::isPathStart ( cModule *  module) const
protectedpure virtual
void inet::visualizer::PathVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
cObject *  object,
cObject *  details 
)
overridevirtual
230 {
231  Enter_Method_Silent();
233  if (isPathStart(static_cast<cModule *>(source))) {
234  auto module = check_and_cast<cModule *>(source);
235  auto packet = check_and_cast<cPacket *>(object);
236  auto treeId = packet->getEncapsulationTreeId();
237  auto path = getIncompletePath(treeId);
238  if (path != nullptr)
239  removeIncompletePath(treeId);
240  auto networkNode = getContainingNode(module);
241  if (nodeFilter.matches(networkNode) && packetFilter.matches(packet))
242  addToIncompletePath(treeId, networkNode);
243  }
244  }
246  if (isPathElement(static_cast<cModule *>(source))) {
247  auto module = check_and_cast<cModule *>(source);
248  auto packet = check_and_cast<cPacket *>(object);
249  auto treeId = packet->getEncapsulationTreeId();
250  auto path = getIncompletePath(treeId);
251  if (path != nullptr)
252  addToIncompletePath(treeId, getContainingNode(module));
253  }
254  }
256  if (isPathEnd(static_cast<cModule *>(source))) {
257  auto module = check_and_cast<cModule *>(source);
258  auto packet = check_and_cast<cPacket *>(object);
259  auto treeId = packet->getEncapsulationTreeId();
260  auto path = getIncompletePath(treeId);
261  if (path != nullptr) {
262  auto networkNode = getContainingNode(module);
263  if (nodeFilter.matches(networkNode) && packetFilter.matches(packet))
264  updatePathVisualization(*path, packet);
265  removeIncompletePath(treeId);
266  }
267  }
268  }
269  else
270  throw cRuntimeError("Unknown signal");
271 }
bool matches(const cModule *module) const
Definition: NetworkNodeFilter.cc:29
virtual bool isPathElement(cModule *module) const =0
PacketFilter packetFilter
Definition: PathVisualizerBase.h:66
NetworkNodeFilter nodeFilter
Definition: PathVisualizerBase.h:65
virtual bool isPathEnd(cModule *module) const =0
virtual void addToIncompletePath(int treeId, cModule *module)
Definition: PathVisualizerBase.cc:200
static simsignal_t packetReceivedFromUpperSignal
Definition: LayeredProtocolBase.h:29
virtual void updatePathVisualization(const std::vector< int > &path, cPacket *packet)
Definition: PathVisualizerBase.cc:213
bool matches(const cPacket *packet) const
Definition: PacketFilter.cc:29
cModule * getContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:65
virtual const std::vector< int > * getIncompletePath(int treeId)
Definition: PathVisualizerBase.cc:191
virtual void removeIncompletePath(int treeId)
Definition: PathVisualizerBase.cc:208
static simsignal_t packetReceivedFromLowerSignal
Definition: LayeredProtocolBase.h:33
static simsignal_t packetSentToUpperSignal
Definition: LayeredProtocolBase.h:28
virtual bool isPathStart(cModule *module) const =0
void inet::visualizer::PathVisualizerBase::refreshDisplay ( ) const
overrideprotectedvirtual

Reimplemented in inet::visualizer::PathCanvasVisualizerBase.

Referenced by inet::visualizer::PathCanvasVisualizerBase::refreshDisplay().

95 {
96  AnimationPosition currentAnimationPosition;
97  std::vector<const PathVisualization *> removedPathVisualizations;
98  for (auto it : pathVisualizations) {
99  auto pathVisualization = it.second;
100  double delta;
101  if (!strcmp(fadeOutMode, "simulationTime"))
102  delta = (currentAnimationPosition.getSimulationTime() - pathVisualization->lastUsageAnimationPosition.getSimulationTime()).dbl();
103  else if (!strcmp(fadeOutMode, "animationTime"))
104  delta = currentAnimationPosition.getAnimationTime() - pathVisualization->lastUsageAnimationPosition.getAnimationTime();
105  else if (!strcmp(fadeOutMode, "realTime"))
106  delta = currentAnimationPosition.getRealTime() - pathVisualization->lastUsageAnimationPosition.getRealTime();
107  else
108  throw cRuntimeError("Unknown fadeOutMode: %s", fadeOutMode);
109  if (delta > fadeOutTime)
110  removedPathVisualizations.push_back(pathVisualization);
111  else
112  setAlpha(pathVisualization, 1 - delta / fadeOutTime);
113  }
114  for (auto path : removedPathVisualizations) {
115  const_cast<PathVisualizerBase *>(this)->removePathVisualization(path);
116  delete path;
117  }
118 }
const char * fadeOutMode
Definition: PathVisualizerBase.h:79
double fadeOutTime
Definition: PathVisualizerBase.h:80
std::multimap< std::pair< int, int >, const PathVisualization * > pathVisualizations
Maps source/destination modules to multiple paths between them.
Definition: PathVisualizerBase.h:96
virtual void setAlpha(const PathVisualization *pathVisualization, double alpha) const =0
virtual void removePathVisualization(const PathVisualization *pathVisualization)
Definition: PathVisualizerBase.cc:166
void inet::visualizer::PathVisualizerBase::refreshPathVisualization ( const PathVisualization pathVisualization,
cPacket *  packet 
)
protectedvirtual

Reimplemented in inet::visualizer::PathCanvasVisualizerBase.

Referenced by inet::visualizer::PathCanvasVisualizerBase::refreshPathVisualization(), and updatePathVisualization().

225 {
226  pathVisualization->lastUsageAnimationPosition = AnimationPosition();
227 }
void inet::visualizer::PathVisualizerBase::removeAllPathVisualizations ( )
protectedvirtual

Referenced by handleParameterChange().

179 {
180  incompletePaths.clear();
181  numPaths.clear();
182  std::vector<const PathVisualization *> removedPathVisualizations;
183  for (auto it : pathVisualizations)
184  removedPathVisualizations.push_back(it.second);
185  for (auto it : removedPathVisualizations) {
187  delete it;
188  }
189 }
std::map< int, std::vector< int > > incompletePaths
Maps packet to module vector.
Definition: PathVisualizerBase.h:88
std::multimap< std::pair< int, int >, const PathVisualization * > pathVisualizations
Maps source/destination modules to multiple paths between them.
Definition: PathVisualizerBase.h:96
std::map< int, int > numPaths
Maps nodes to the number of paths that go through it.
Definition: PathVisualizerBase.h:92
virtual void removePathVisualization(const PathVisualization *pathVisualization)
Definition: PathVisualizerBase.cc:166
void inet::visualizer::PathVisualizerBase::removeIncompletePath ( int  treeId)
protectedvirtual

Referenced by receiveSignal().

209 {
210  incompletePaths.erase(incompletePaths.find(treeId));
211 }
std::map< int, std::vector< int > > incompletePaths
Maps packet to module vector.
Definition: PathVisualizerBase.h:88
void inet::visualizer::PathVisualizerBase::removePathVisualization ( const PathVisualization pathVisualization)
protectedvirtual

Reimplemented in inet::visualizer::PathCanvasVisualizerBase.

Referenced by refreshDisplay(), removeAllPathVisualizations(), and inet::visualizer::PathCanvasVisualizerBase::removePathVisualization().

167 {
168  auto sourceAndDestination = std::pair<int, int>(pathVisualization->moduleIds.front(), pathVisualization->moduleIds.back());
169  auto range = pathVisualizations.equal_range(sourceAndDestination);
170  for (auto it = range.first; it != range.second; it++) {
171  if (it->second == pathVisualization) {
172  pathVisualizations.erase(it);
173  break;
174  }
175  }
176 }
std::multimap< std::pair< int, int >, const PathVisualization * > pathVisualizations
Maps source/destination modules to multiple paths between them.
Definition: PathVisualizerBase.h:96
virtual void inet::visualizer::PathVisualizerBase::setAlpha ( const PathVisualization pathVisualization,
double  alpha 
) const
protectedpure virtual
void inet::visualizer::PathVisualizerBase::subscribe ( )
protectedvirtual

Referenced by initialize().

121 {
122  auto subscriptionModule = getModuleFromPar<cModule>(par("subscriptionModule"), this);
123  subscriptionModule->subscribe(LayeredProtocolBase::packetSentToUpperSignal, this);
124  subscriptionModule->subscribe(LayeredProtocolBase::packetReceivedFromUpperSignal, this);
125  subscriptionModule->subscribe(LayeredProtocolBase::packetReceivedFromLowerSignal, this);
126 }
static simsignal_t packetReceivedFromUpperSignal
Definition: LayeredProtocolBase.h:29
static simsignal_t packetReceivedFromLowerSignal
Definition: LayeredProtocolBase.h:33
static simsignal_t packetSentToUpperSignal
Definition: LayeredProtocolBase.h:28
void inet::visualizer::PathVisualizerBase::unsubscribe ( )
protectedvirtual

Referenced by ~PathVisualizerBase().

129 {
130  // NOTE: lookup the module again because it may have been deleted first
131  auto subscriptionModule = getModuleFromPar<cModule>(par("subscriptionModule"), this, false);
132  if (subscriptionModule != nullptr) {
133  subscriptionModule->unsubscribe(LayeredProtocolBase::packetSentToUpperSignal, this);
134  subscriptionModule->unsubscribe(LayeredProtocolBase::packetReceivedFromUpperSignal, this);
135  subscriptionModule->unsubscribe(LayeredProtocolBase::packetReceivedFromLowerSignal, this);
136  }
137 }
static simsignal_t packetReceivedFromUpperSignal
Definition: LayeredProtocolBase.h:29
static simsignal_t packetReceivedFromLowerSignal
Definition: LayeredProtocolBase.h:33
static simsignal_t packetSentToUpperSignal
Definition: LayeredProtocolBase.h:28
void inet::visualizer::PathVisualizerBase::updatePathVisualization ( const std::vector< int > &  path,
cPacket *  packet 
)
protectedvirtual

Referenced by receiveSignal().

214 {
215  const PathVisualization *pathVisualization = getPathVisualization(moduleIds);
216  if (pathVisualization == nullptr) {
217  pathVisualization = createPathVisualization(moduleIds, packet);
218  addPathVisualization(pathVisualization);
219  }
220  else
221  refreshPathVisualization(pathVisualization, packet);
222 }
virtual void addPathVisualization(const PathVisualization *pathVisualization)
Definition: PathVisualizerBase.cc:160
virtual void refreshPathVisualization(const PathVisualization *pathVisualization, cPacket *packet)
Definition: PathVisualizerBase.cc:224
virtual const PathVisualization * createPathVisualization(const std::vector< int > &path, cPacket *packet) const =0
Definition: PathVisualizerBase.cc:145
virtual const PathVisualization * getPathVisualization(const std::vector< int > &path)
Definition: PathVisualizerBase.cc:150

Member Data Documentation

bool inet::visualizer::PathVisualizerBase::displayRoutes = false
protected

Referenced by initialize(), and ~PathVisualizerBase().

double inet::visualizer::PathVisualizerBase::fadeOutAnimationSpeed = NaN
protected
const char* inet::visualizer::PathVisualizerBase::fadeOutMode = nullptr
protected

Referenced by initialize(), and refreshDisplay().

double inet::visualizer::PathVisualizerBase::fadeOutTime = NaN
protected

Referenced by initialize(), and refreshDisplay().

std::map<int, std::vector<int> > inet::visualizer::PathVisualizerBase::incompletePaths
protected
cFigure::Color inet::visualizer::PathVisualizerBase::labelColor
protected
const char* inet::visualizer::PathVisualizerBase::labelColorAsString = nullptr
protected
cFigure::Font inet::visualizer::PathVisualizerBase::labelFont
protected
StringFormat inet::visualizer::PathVisualizerBase::labelFormat
protected
ColorSet inet::visualizer::PathVisualizerBase::lineColorSet
protected
const char* inet::visualizer::PathVisualizerBase::lineContactMode = nullptr
protected
double inet::visualizer::PathVisualizerBase::lineContactSpacing = NaN
protected
double inet::visualizer::PathVisualizerBase::lineShift = NaN
protected
const char* inet::visualizer::PathVisualizerBase::lineShiftMode = nullptr
protected
bool inet::visualizer::PathVisualizerBase::lineSmooth = false
protected
cFigure::LineStyle inet::visualizer::PathVisualizerBase::lineStyle
protected
double inet::visualizer::PathVisualizerBase::lineWidth = NaN
protected
NetworkNodeFilter inet::visualizer::PathVisualizerBase::nodeFilter
protected
std::map<int, int> inet::visualizer::PathVisualizerBase::numPaths
protected

Maps nodes to the number of paths that go through it.

Referenced by removeAllPathVisualizations().

PacketFilter inet::visualizer::PathVisualizerBase::packetFilter
protected
std::multimap<std::pair<int, int>, const PathVisualization *> inet::visualizer::PathVisualizerBase::pathVisualizations
protected

The documentation for this class was generated from the following files: