#include <ConnectivityProbeQuon.h>
Public Member Functions | |
| void | initialize () |
| void | handleMessage (cMessage *msg) |
| ~ConnectivityProbeQuon () | |
Private Member Functions | |
| void | extractTopology () |
| void | resetTopologyNodes () |
| unsigned int | getComponentSize (OverlayKey key) |
Private Attributes | |
| std::fstream | pltNetwork |
| std::fstream | pltData |
| std::fstream | pltVector |
| simtime_t | probeIntervall |
| simtime_t | plotIntervall |
| simtime_t | startPlotTime |
| simtime_t | plotPeriod |
| bool | plotConnections |
| bool | plotBindings |
| bool | plotMissing |
| cMessage * | probeTimer |
| cMessage * | plotTimer |
| QuonTopology | Topology |
| GlobalStatistics * | globalStatistics |
| cOutVector | cOV_NodeCount |
| cOutVector | cOV_MaximumComponent |
| cOutVector | cOV_MaxConnectivity |
| cOutVector | cOV_ZeroMissingNeighbors |
| cOutVector | cOV_AverageMissingNeighbors |
| cOutVector | cOV_MaxMissingNeighbors |
| cOutVector | cOV_AverageDrift |
Definition at line 48 of file ConnectivityProbeQuon.h.
| ConnectivityProbeQuon::~ConnectivityProbeQuon | ( | ) |
Definition at line 301 of file ConnectivityProbeQuon.cc.
{
// destroy self timer messages
cancelAndDelete(probeTimer);
cancelAndDelete(plotTimer);
}
| void ConnectivityProbeQuon::extractTopology | ( | ) | [private] |
Definition at line 265 of file ConnectivityProbeQuon.cc.
Referenced by handleMessage().
{
for(int i=0; i<=simulation.getLastModuleId(); i++) {
cModule* module = simulation.getModule(i);
if(module && dynamic_cast<Quon*>(module)) {
Quon* quonp = check_and_cast<Quon*>(module);
if(quonp->getState() == QREADY) {
QuonTopologyNode temp(i);
Topology.insert(std::make_pair(quonp->getKey(), temp));
}
}
}
}
| unsigned int ConnectivityProbeQuon::getComponentSize | ( | OverlayKey | key | ) | [private] |
Definition at line 286 of file ConnectivityProbeQuon.cc.
Referenced by handleMessage().
{
QuonTopology::iterator itEntry = Topology.find(key);
if(itEntry != Topology.end() && itEntry->second.visited == false) {
int count = 1;
itEntry->second.visited = true;
Quon* quonp = itEntry->second.getModule();
for(QuonSiteMap::iterator itSites = quonp->Sites.begin(); itSites != quonp->Sites.end(); ++itSites) {
count += getComponentSize(itSites->first);
}
return count;
}
return 0;
}
| void ConnectivityProbeQuon::handleMessage | ( | cMessage * | msg | ) |
Definition at line 75 of file ConnectivityProbeQuon.cc.
{
// fill topology with all QUONP modules
extractTopology();
if(Topology.size() == 0) {
return;
}
// catch self timer messages
if(msg->isName("probeTimer")) {
//reset timer
cancelEvent(probeTimer);
scheduleAt(simTime() + probeIntervall, msg);
unsigned int maxComponent = 0;
for(QuonTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) {
unsigned int count = getComponentSize(itTopology->second.getModule()->getKey());
if(count > maxComponent) {
maxComponent = count;
}
resetTopologyNodes();
if(count == Topology.size()) {
break;
}
}
cOV_NodeCount.record((double)Topology.size());
cOV_MaximumComponent.record((double)maxComponent);
cOV_MaxConnectivity.record((double)maxComponent * 100.0 / (double)Topology.size());
RECORD_STATS (
globalStatistics->addStdDev("ConnectivityProbe: max connectivity", (double)maxComponent * 100.0 / (double)Topology.size());
);
int mnMax = 0;
int mnZero = 0;
int driftCount = 0;
double mnAverage = 0.0;
double drift = 0.0;
for(QuonTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) {
QuonAOI AOI(itTopology->second.getModule()->getPosition(), itTopology->second.getModule()->getAOI());
int missing = 0;
for(QuonTopology::iterator itI = Topology.begin(); itI != Topology.end(); ++itI) {
if(itI != itTopology && AOI.collide(itI->second.getModule()->getPosition())) {
QuonSiteMap::iterator currentSite = itTopology->second.getModule()->Sites.find(itI->second.getModule()->getKey());
if(currentSite == itTopology->second.getModule()->Sites.end()) {
++missing;
}
else {
drift += sqrt(currentSite->second->position.distanceSqr(itI->second.getModule()->getPosition()));
++driftCount;
}
}
}
mnAverage += missing;
if(mnMax < missing) {
mnMax = missing;
}
if(missing == 0) {
++mnZero;
}
}
mnAverage /= (double)Topology.size();
if(driftCount > 0) {
drift /= (double)driftCount;
}
cOV_ZeroMissingNeighbors.record((double)mnZero);
RECORD_STATS (
globalStatistics->addStdDev("ConnectivityProbe: percentage zero missing neighbors", (double)mnZero * 100.0 / (double)Topology.size());
globalStatistics->addStdDev("ConnectivityProbe: average drift", drift);
);
cOV_AverageMissingNeighbors.record(mnAverage);
cOV_MaxMissingNeighbors.record((double)mnMax);
cOV_AverageDrift.record(drift);
}
else if(msg->isName("plotTimer")) {
//reset timer
cancelEvent(plotTimer);
if(plotPeriod == 0.0 || simTime() <= startPlotTime + plotPeriod) {
scheduleAt(simTime() + plotIntervall, msg);
}
bool missingFound = false;
if(plotMissing) {
for(QuonTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) {
QuonAOI AOI(itTopology->second.getModule()->getPosition(), itTopology->second.getModule()->getAOI());
for(QuonTopology::iterator itI = Topology.begin(); itI != Topology.end(); ++itI) {
if(itI != itTopology && AOI.collide(itI->second.getModule()->getPosition())) {
QuonSiteMap::iterator currentSite = itTopology->second.getModule()->Sites.find(itI->second.getModule()->getKey());
if(currentSite == itTopology->second.getModule()->Sites.end()) {
missingFound = true;
}
}
}
}
}
if(!plotMissing || missingFound) {
int range = (int)Topology.begin()->second.getModule()->getAreaDimension();
std::stringstream oss;
std::string filename;
int simTimeInt, stellen = 1;
simTimeInt = (int)SIMTIME_DBL(simTime());
oss << "plot";
for(int i=0; i<6; i++) {
if(!(simTimeInt / stellen)) {
oss << "0";
}
stellen *= 10;
}
oss << simTimeInt;
// open / write plot file
filename = oss.str() + ".plot";
pltNetwork.open(filename.c_str(), std::ios::out);
pltNetwork << "set xrange [0:" << range << "]" << endl;
pltNetwork << "set yrange [0:" << range << "]" << endl;
pltNetwork << "set nokey" << endl;
// open point file
filename = oss.str() + ".point";
pltData.open(filename.c_str(), std::ios::out);
pltNetwork << "plot '" << filename << "' using 1:2 with points pointtype 7,\\" << endl;
// open vector file
filename = oss.str() + ".arrow";
pltVector.open(filename.c_str(), std::ios::out);
pltNetwork << " '" << filename << "' using 1:2:3:4 with vectors linetype 1" << endl;
pltNetwork.close();
// write point data file
for(QuonTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) {
pltData << itTopology->second.getModule()->getPosition().x << "\t" << itTopology->second.getModule()->getPosition().y << endl;
}
pltData.close();
//write arrow data file
if(!plotMissing) {
for(QuonTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) {
for(QuonSiteMap::iterator itSites = itTopology->second.getModule()->Sites.begin(); itSites != itTopology->second.getModule()->Sites.end(); ++itSites) {
if(plotBindings && itSites->second->type != QBINDING && !itSites->second->softNeighbor) {
continue;
}
if(plotConnections) {
QuonTopology::iterator destNode = Topology.find(itSites->second->address.getKey());
if(destNode != Topology.end()) {
Vector2D relPos = destNode->second.getModule()->getPosition() - itTopology->second.getModule()->getPosition();
pltVector << itTopology->second.getModule()->getPosition().x << "\t" << itTopology->second.getModule()->getPosition().y << "\t"
<< relPos.x << "\t" << relPos.y << endl;
}
}
else {
Vector2D relPos = itSites->second->position - itTopology->second.getModule()->getPosition();
pltVector << itTopology->second.getModule()->getPosition().x << "\t" << itTopology->second.getModule()->getPosition().y << "\t"
<< relPos.x << "\t" << relPos.y << endl;
}
}
}
}
else {
for(QuonTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) {
QuonAOI AOI(itTopology->second.getModule()->getPosition(), itTopology->second.getModule()->getAOI());
for(QuonTopology::iterator itI = Topology.begin(); itI != Topology.end(); ++itI) {
if(itI != itTopology && AOI.collide(itI->second.getModule()->getPosition())) {
QuonSiteMap::iterator currentSite = itTopology->second.getModule()->Sites.find(itI->second.getModule()->getKey());
if(currentSite == itTopology->second.getModule()->Sites.end()) {
Vector2D relPos = itI->second.getModule()->getPosition() - itTopology->second.getModule()->getPosition();
pltVector << itTopology->second.getModule()->getPosition().x << "\t"
<< itTopology->second.getModule()->getPosition().y << "\t"
<< relPos.x << "\t" << relPos.y << "\t"
<< itTopology->second.getModule()->getParentModule()->getParentModule()->getFullName() << ":"
<< itTopology->second.getModule()->getKey().toString(16) << "\t"
<< itI->second.getModule()->getParentModule()->getParentModule()->getFullName() << ":"
<< itI->second.getModule()->getKey().toString(16) << endl;
}
}
}
}
}
pltVector.close();
}
}
Topology.clear();
}
| void ConnectivityProbeQuon::initialize | ( | ) |
Definition at line 40 of file ConnectivityProbeQuon.cc.
{
globalStatistics = GlobalStatisticsAccess().get();
probeIntervall = par("connectivityProbeIntervall");
plotIntervall = par("visualizeNetworkIntervall");
startPlotTime = par("startPlotTime");
plotPeriod = par("plotPeriod");
probeTimer = new cMessage("probeTimer");
plotTimer = new cMessage("plotTimer");
plotConnections = par("plotConnections");
plotBindings = par("plotBindings");
plotMissing = par("plotMissing");
if(probeIntervall > 0.0) {
scheduleAt(simTime() + probeIntervall, probeTimer);
cOV_NodeCount.setName("total node count");
cOV_MaximumComponent.setName("largest connected component");
cOV_MaxConnectivity.setName("connectivity in percent");
cOV_ZeroMissingNeighbors.setName("neighbor-error free nodes");
cOV_AverageMissingNeighbors.setName("average missing neighbors per node");
cOV_MaxMissingNeighbors.setName("largest missing neighbors count");
cOV_AverageDrift.setName("average drift");
}
if(plotIntervall > 0.0) {
if(startPlotTime == 0.0) {
scheduleAt(simTime() + plotIntervall, plotTimer);
}
else {
scheduleAt(simTime() + startPlotTime, plotTimer);
}
}
}
| void ConnectivityProbeQuon::resetTopologyNodes | ( | ) | [private] |
Definition at line 279 of file ConnectivityProbeQuon.cc.
Referenced by handleMessage().
cOutVector ConnectivityProbeQuon::cOV_AverageDrift [private] |
Definition at line 80 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
cOutVector ConnectivityProbeQuon::cOV_AverageMissingNeighbors [private] |
Definition at line 78 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
cOutVector ConnectivityProbeQuon::cOV_MaxConnectivity [private] |
Definition at line 76 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
cOutVector ConnectivityProbeQuon::cOV_MaximumComponent [private] |
Definition at line 75 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
cOutVector ConnectivityProbeQuon::cOV_MaxMissingNeighbors [private] |
Definition at line 79 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
cOutVector ConnectivityProbeQuon::cOV_NodeCount [private] |
Definition at line 74 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
cOutVector ConnectivityProbeQuon::cOV_ZeroMissingNeighbors [private] |
Definition at line 77 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
Definition at line 71 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
bool ConnectivityProbeQuon::plotBindings [private] |
Definition at line 66 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
bool ConnectivityProbeQuon::plotConnections [private] |
Definition at line 65 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
simtime_t ConnectivityProbeQuon::plotIntervall [private] |
Definition at line 62 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
bool ConnectivityProbeQuon::plotMissing [private] |
Definition at line 67 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
simtime_t ConnectivityProbeQuon::plotPeriod [private] |
Definition at line 64 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
cMessage* ConnectivityProbeQuon::plotTimer [private] |
Definition at line 69 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), initialize(), and ~ConnectivityProbeQuon().
std::fstream ConnectivityProbeQuon::pltData [private] |
Definition at line 56 of file ConnectivityProbeQuon.h.
Referenced by handleMessage().
std::fstream ConnectivityProbeQuon::pltNetwork [private] |
Definition at line 56 of file ConnectivityProbeQuon.h.
Referenced by handleMessage().
std::fstream ConnectivityProbeQuon::pltVector [private] |
Definition at line 56 of file ConnectivityProbeQuon.h.
Referenced by handleMessage().
simtime_t ConnectivityProbeQuon::probeIntervall [private] |
Definition at line 61 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
cMessage* ConnectivityProbeQuon::probeTimer [private] |
Definition at line 68 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), initialize(), and ~ConnectivityProbeQuon().
simtime_t ConnectivityProbeQuon::startPlotTime [private] |
Definition at line 63 of file ConnectivityProbeQuon.h.
Referenced by handleMessage(), and initialize().
QuonTopology ConnectivityProbeQuon::Topology [private] |
Definition at line 70 of file ConnectivityProbeQuon.h.
Referenced by extractTopology(), getComponentSize(), handleMessage(), and resetTopologyNodes().
1.7.1