ConnectivityProbe Class Reference

#include <ConnectivityProbe.h>

List of all members.

Public Member Functions

virtual void initialize ()
virtual void handleMessage (cMessage *msg)
virtual ~ConnectivityProbe ()

Private Member Functions

void extractTopology ()
int findComponent (OverlayKey key, int Component)

Private Attributes

double probeIntervall
cMessage * probeTimer
VTopology Topology
cOutVector cOV_NodeCount
cOutVector cOV_MaximumComponent
cOutVector cOV_ZeroMissingNeighbors
cOutVector cOV_OneMissingNeighbor
cOutVector cOV_TwoMissingNeighbor
cOutVector cOV_ThreeMissingNeighbor
cOutVector cOV_FourMissingNeighbor
cOutVector cOV_FiveMissingNeighbors
cOutVector cOV_SeveralMissingNeighbors
cOutVector cOV_AverageMissingNeighbors
cOutVector cOV_MaxMissingNeighbors


Constructor & Destructor Documentation

ConnectivityProbe::~ConnectivityProbe (  )  [virtual]

00182 {
00183     // destroy self timer messages
00184     cancelAndDelete(probeTimer);
00185 }


Member Function Documentation

void ConnectivityProbe::initialize (  )  [virtual]

00040 {
00041     probeIntervall = par("connectivityProbeIntervall");
00042     probeTimer = new cMessage("probeTimer");
00043     if(probeIntervall != 0.0f) {
00044         scheduleAt(simulation.simTime() + probeIntervall, probeTimer);
00045 
00046         cOV_NodeCount.setName("Total Node Count");
00047         cOV_MaximumComponent.setName("Maximum Component Size");
00048         cOV_ZeroMissingNeighbors.setName("Nodes with 0 Missing Neighbors");
00049         cOV_OneMissingNeighbor.setName("Nodes with 1 Missing Neighbor");
00050         cOV_TwoMissingNeighbor.setName("Nodes with 2 Missing Neighbor");
00051         cOV_ThreeMissingNeighbor.setName("Nodes with 3 Missing Neighbor");
00052         cOV_FourMissingNeighbor.setName("Nodes with 4 Missing Neighbor");
00053         cOV_FiveMissingNeighbors.setName("Nodes with 5 Missing Neighbors");
00054         cOV_SeveralMissingNeighbors.setName("Nodes with more than 5 Missing Neighbors");
00055         cOV_AverageMissingNeighbors.setName("Average Missing Neighbors per Node");
00056         cOV_MaxMissingNeighbors.setName("Max Missing Neighbors per Node");
00057     }
00058 }

void ConnectivityProbe::handleMessage ( cMessage *  msg  )  [virtual]

00061 {
00062     // catch self timer messages
00063     if(msg->isName("probeTimer")) {
00064         //reset timer
00065         cancelEvent(probeTimer);
00066         scheduleAt(simulation.simTime() + probeIntervall, msg);
00067 
00068         // fill topology with all VAST modules
00069         extractTopology();
00070 
00071         int Component = 1;
00072         unsigned int maxComponent = 0;
00073         for(VTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) {
00074             int count = findComponent(itTopology->second.module()->getThisNode().key, Component);
00075             if(count > maxComponent) {
00076                 maxComponent = count;
00077             }
00078             if(maxComponent == Topology.size()) {
00079                 break;
00080             }
00081             ++Component;
00082         }
00083 
00084         cOV_NodeCount.record((double)Topology.size());
00085         cOV_MaximumComponent.record((double)maxComponent);
00086 
00087         int mnZero, mnOne, mnTwo, mnThree, mnFour, mnFive, mnSeveral, mnMax;
00088         double mnAverage = 0.0;
00089         double AOIWidthSqr = Topology.begin()->second.module()->getAOI();
00090         AOIWidthSqr *= AOIWidthSqr;
00091         mnZero = mnOne = mnTwo = mnThree = mnFour = mnFive = mnSeveral = mnMax = 0;
00092 
00093         for(VTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) {
00094             NodeSet SiteHandles;
00095             Vector2D vastPosition = itTopology->second.module()->getPosition();
00096             int missing = 0;
00097             for(VTopology::iterator itI = Topology.begin(); itI != Topology.end(); ++itI) {
00098                 if(itI != itTopology && vastPosition.distanceSqr(itI->second.module()->getPosition()) <= AOIWidthSqr) {
00099                     SiteHandles.insert(itI->second.module()->getThisNode());
00100                 }
00101             }
00102 
00103             for(NodeSet::iterator itSiteHandles = SiteHandles.begin(); itSiteHandles != SiteHandles.end(); ++itSiteHandles) {
00104                 if(itTopology->second.module()->getList()->Sites.find(*itSiteHandles) == itTopology->second.module()->getList()->Sites.end()) {
00105                     ++missing;
00106                 }
00107             }
00108 
00109             switch(missing) {
00110                 case 0:
00111                     ++mnZero;
00112                 break;
00113                 case 1:
00114                     ++mnOne;
00115                 break;
00116                 case 2:
00117                     ++mnTwo;
00118                 break;
00119                 case 3:
00120                     ++mnThree;
00121                 break;
00122                 case 4:
00123                     ++mnFour;
00124                 break;
00125                 case 5:
00126                     ++mnFive;
00127                 break;
00128                 default:
00129                     ++mnSeveral;
00130             }
00131             mnAverage += missing;
00132             if(mnMax < missing) {
00133                 mnMax = missing;
00134             }
00135         }
00136         mnAverage /= (double)Topology.size();
00137 
00138         cOV_ZeroMissingNeighbors.record((double)mnZero);
00139         cOV_OneMissingNeighbor.record((double)mnOne);
00140         cOV_TwoMissingNeighbor.record((double)mnTwo);
00141         cOV_ThreeMissingNeighbor.record((double)mnThree);
00142         cOV_FourMissingNeighbor.record((double)mnFour);
00143         cOV_FiveMissingNeighbors.record((double)mnFive);
00144         cOV_SeveralMissingNeighbors.record((double)mnSeveral);
00145         cOV_AverageMissingNeighbors.record(mnAverage);
00146         cOV_MaxMissingNeighbors.record((double)mnMax);
00147 
00148         Topology.clear();
00149     }
00150 }

void ConnectivityProbe::extractTopology (  )  [private]

00153 {
00154     for(int i=0; i<=simulation.lastModuleId(); i++) {
00155         cModule* module = simulation.module(i);
00156         if(module && dynamic_cast<Vast*>(module)) {
00157             Vast* vast = check_and_cast<Vast*>(module);
00158             if(vast->getState() == BaseOverlay::READY) {
00159                 VTopologyNode temp(i);
00160                 Topology.insert(std::make_pair(vast->getThisNode().key, temp));
00161             }
00162         }
00163     }
00164 }

int ConnectivityProbe::findComponent ( OverlayKey  key,
int  Component 
) [private]

00167 {
00168     VTopology::iterator itEntry = Topology.find(key);
00169     if(itEntry != Topology.end() && itEntry->second.componentCounter < Component) {
00170         int visited = 1;
00171         itEntry->second.componentCounter = Component;
00172         Vast* vast = itEntry->second.module();
00173         for(SiteMap::iterator itSites = vast->getList()->Sites.begin(); itSites != vast->getList()->Sites.end(); ++itSites) {
00174             visited += findComponent(itSites->first.key, Component);
00175         }
00176         return visited;
00177     }
00178     return 0;
00179 }


Member Data Documentation

double ConnectivityProbe::probeIntervall [private]

cMessage* ConnectivityProbe::probeTimer [private]

VTopology ConnectivityProbe::Topology [private]

cOutVector ConnectivityProbe::cOV_NodeCount [private]

cOutVector ConnectivityProbe::cOV_MaximumComponent [private]

cOutVector ConnectivityProbe::cOV_ZeroMissingNeighbors [private]

cOutVector ConnectivityProbe::cOV_OneMissingNeighbor [private]

cOutVector ConnectivityProbe::cOV_TwoMissingNeighbor [private]

cOutVector ConnectivityProbe::cOV_ThreeMissingNeighbor [private]

cOutVector ConnectivityProbe::cOV_FourMissingNeighbor [private]

cOutVector ConnectivityProbe::cOV_FiveMissingNeighbors [private]

cOutVector ConnectivityProbe::cOV_SeveralMissingNeighbors [private]

cOutVector ConnectivityProbe::cOV_AverageMissingNeighbors [private]

cOutVector ConnectivityProbe::cOV_MaxMissingNeighbors [private]


The documentation for this class was generated from the following files:
Generated on Thu Apr 17 13:19:28 2008 for ITM OverSim by  doxygen 1.5.3