Added New Plot 'No. of Repaired Samples by each Node'
This commit is contained in:
parent
4ef2617674
commit
be0ce303c6
|
@ -50,12 +50,14 @@ class Block:
|
||||||
"""
|
"""
|
||||||
line = self.data[id::self.blockSizeR]
|
line = self.data[id::self.blockSizeR]
|
||||||
success = line.count(1)
|
success = line.count(1)
|
||||||
|
repairedSamples = 0
|
||||||
if success >= self.blockSizeCK:
|
if success >= self.blockSizeCK:
|
||||||
ret = ~line
|
ret = ~line
|
||||||
self.data[id::self.blockSizeR] = 1
|
self.data[id::self.blockSizeR] = 1
|
||||||
|
repairedSamples = len(line) - success
|
||||||
else:
|
else:
|
||||||
ret = zeros(self.blockSizeC)
|
ret = zeros(self.blockSizeC)
|
||||||
return ret
|
return ret, repairedSamples
|
||||||
|
|
||||||
def getRow(self, rowID):
|
def getRow(self, rowID):
|
||||||
"""It returns the block row corresponding to rowID."""
|
"""It returns the block row corresponding to rowID."""
|
||||||
|
@ -71,12 +73,14 @@ class Block:
|
||||||
"""
|
"""
|
||||||
line = self.data[id*self.blockSizeR:(id+1)*self.blockSizeR]
|
line = self.data[id*self.blockSizeR:(id+1)*self.blockSizeR]
|
||||||
success = line.count(1)
|
success = line.count(1)
|
||||||
|
repairedSamples = 0
|
||||||
if success >= self.blockSizeRK:
|
if success >= self.blockSizeRK:
|
||||||
ret = ~line
|
ret = ~line
|
||||||
self.data[id*self.blockSizeR:(id+1)*self.blockSizeR] = 1
|
self.data[id*self.blockSizeR:(id+1)*self.blockSizeR] = 1
|
||||||
|
repairedSamples = len(line) - success
|
||||||
else:
|
else:
|
||||||
ret = zeros(self.blockSizeR)
|
ret = zeros(self.blockSizeR)
|
||||||
return ret
|
return ret, repairedSamples
|
||||||
|
|
||||||
def print(self):
|
def print(self):
|
||||||
"""It prints the block in the terminal (outside of the logger rules))."""
|
"""It prints the block in the terminal (outside of the logger rules))."""
|
||||||
|
|
|
@ -22,6 +22,7 @@ class Result:
|
||||||
self.sampleRecvCount = [0] * shape.numberNodes
|
self.sampleRecvCount = [0] * shape.numberNodes
|
||||||
self.restoreRowCount = [0] * shape.numberNodes
|
self.restoreRowCount = [0] * shape.numberNodes
|
||||||
self.restoreColumnCount = [0] * shape.numberNodes
|
self.restoreColumnCount = [0] * shape.numberNodes
|
||||||
|
self.repairedSampleCount = [0] * shape.numberNodes
|
||||||
|
|
||||||
def copyValidators(self, validators):
|
def copyValidators(self, validators):
|
||||||
"""Copy information from simulator.validators to result."""
|
"""Copy information from simulator.validators to result."""
|
||||||
|
@ -32,6 +33,7 @@ class Result:
|
||||||
self.sampleRecvCount[i] = validators[i].sampleRecvCount
|
self.sampleRecvCount[i] = validators[i].sampleRecvCount
|
||||||
self.restoreRowCount[i] = validators[i].restoreRowCount
|
self.restoreRowCount[i] = validators[i].restoreRowCount
|
||||||
self.restoreColumnCount[i] = validators[i].restoreColumnCount
|
self.restoreColumnCount[i] = validators[i].restoreColumnCount
|
||||||
|
self.repairedSampleCount[i] = validators[i].repairedSampleCount
|
||||||
|
|
||||||
def populate(self, shape, config, missingVector):
|
def populate(self, shape, config, missingVector):
|
||||||
"""It populates part of the result data inside a vector."""
|
"""It populates part of the result data inside a vector."""
|
||||||
|
|
|
@ -62,6 +62,7 @@ class Validator:
|
||||||
self.sampleRecvCount = 0
|
self.sampleRecvCount = 0
|
||||||
self.restoreRowCount = 0
|
self.restoreRowCount = 0
|
||||||
self.restoreColumnCount = 0
|
self.restoreColumnCount = 0
|
||||||
|
self.repairedSampleCount = 0
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
if self.shape.chiR < 1 and self.shape.chiC < 1:
|
if self.shape.chiR < 1 and self.shape.chiC < 1:
|
||||||
self.logger.error("Chi has to be greater than 0", extra=self.format)
|
self.logger.error("Chi has to be greater than 0", extra=self.format)
|
||||||
|
@ -518,7 +519,8 @@ class Validator:
|
||||||
|
|
||||||
def restoreRow(self, id):
|
def restoreRow(self, id):
|
||||||
"""Restore a given row if repairable."""
|
"""Restore a given row if repairable."""
|
||||||
rep = self.block.repairRow(id)
|
rep, repairedSamples = self.block.repairRow(id)
|
||||||
|
self.repairedSampleCount += repairedSamples
|
||||||
if (rep.any()):
|
if (rep.any()):
|
||||||
# If operation is based on send queues, segments should
|
# If operation is based on send queues, segments should
|
||||||
# be queued after successful repair.
|
# be queued after successful repair.
|
||||||
|
@ -538,7 +540,8 @@ class Validator:
|
||||||
|
|
||||||
def restoreColumn(self, id):
|
def restoreColumn(self, id):
|
||||||
"""Restore a given column if repairable."""
|
"""Restore a given column if repairable."""
|
||||||
rep = self.block.repairColumn(id)
|
rep, repairedSamples = self.block.repairColumn(id)
|
||||||
|
self.repairedSampleCount += repairedSamples
|
||||||
if (rep.any()):
|
if (rep.any()):
|
||||||
# If operation is based on send queues, segments should
|
# If operation is based on send queues, segments should
|
||||||
# be queued after successful repair.
|
# be queued after successful repair.
|
||||||
|
|
|
@ -86,6 +86,7 @@ class Visualizor:
|
||||||
self.plotSentData(result, plotPath)
|
self.plotSentData(result, plotPath)
|
||||||
self.plotRecvData(result, plotPath)
|
self.plotRecvData(result, plotPath)
|
||||||
self.plotDupData(result, plotPath)
|
self.plotDupData(result, plotPath)
|
||||||
|
self.plotSamplesRepaired(result, plotPath)
|
||||||
if self.config.saveRCdist:
|
if self.config.saveRCdist:
|
||||||
self.plotRowCol(result, plotPath)
|
self.plotRowCol(result, plotPath)
|
||||||
|
|
||||||
|
@ -380,3 +381,23 @@ class Visualizor:
|
||||||
conf["yaxismax"] = maxi
|
conf["yaxismax"] = maxi
|
||||||
plotData(conf)
|
plotData(conf)
|
||||||
print("Plot %s created." % conf["path"])
|
print("Plot %s created." % conf["path"])
|
||||||
|
|
||||||
|
def plotSamplesRepaired(self, result, plotPath):
|
||||||
|
"""Plots the number of samples repaired by all nodes"""
|
||||||
|
conf = {}
|
||||||
|
text = str(result.shape).split("-")
|
||||||
|
conf["textBox"] = "Row Size: "+text[2]+"\nColumn Size: "+text[6]+"\nNumber of nodes: "+text[10]\
|
||||||
|
+"\nFailure rate: "+text[14]+"%"+"\nNetwork degree: "+text[32]+"\nMalicious Nodes: "+text[36]+"%"
|
||||||
|
conf["title"] = "Number of Samples Repaired by Nodes"
|
||||||
|
conf["type"] = "individual_bar"
|
||||||
|
conf["legLoc"] = 1
|
||||||
|
conf["desLoc"] = 1
|
||||||
|
conf["xlabel"] = "Nodes"
|
||||||
|
conf["ylabel"] = "Number of Samples Repaired"
|
||||||
|
conf["data"] = result.repairedSampleCount
|
||||||
|
conf["xdots"] = range(result.shape.numberNodes)
|
||||||
|
conf["path"] = plotPath + "/repairedSampleCount.png"
|
||||||
|
maxi = max(conf["data"])
|
||||||
|
conf["yaxismax"] = maxi
|
||||||
|
plotData(conf)
|
||||||
|
print("Plot %s created." % conf["path"])
|
||||||
|
|
Loading…
Reference in New Issue