plotCHDBasedMeasureVsIterations.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from regmaxsn.core.maxDistanceBasedMetric import maxDistEMD
  2. from regmaxsn.core.matplotlibRCParams import mplPars
  3. from matplotlib import pyplot as plt
  4. from regmaxsn.core.misc import parFileCheck
  5. import pandas as pd
  6. import os
  7. import seaborn as sns
  8. import sys
  9. def plotMaxDistEMDVsIteration(parFile, parNames):
  10. sns.set(rc=mplPars)
  11. plt.ion()
  12. metricsDF = pd.DataFrame()
  13. parsList = parFileCheck(parFile, parNames)
  14. for parInd, pars in enumerate(parsList):
  15. resDir = pars['resDir']
  16. swcList = pars['swcList']
  17. expNames = [os.path.split(swc)[1][:-4] for swc in swcList]
  18. iters = sorted([int(fle[3:-4]) for fle in os.listdir(resDir) if fle.find('ref') == 0])
  19. nIter = max(iters)
  20. centroidAlignedSWCs = [os.path.join(resDir, '{}{}.swc'.format(expName, 0)) for expName in expNames]
  21. for iterInd in range(nIter + 1):
  22. print('Doing {}/{}'.format(iterInd + 1, nIter + 1))
  23. iterSWCs = [os.path.join(resDir, '{}{}.swc'.format(expName, iterInd)) for expName in expNames]
  24. metric = maxDistEMD(iterSWCs, centroidAlignedSWCs)
  25. tempDict = {"Job Number": parInd + 1, "Iteration Number": iterInd,
  26. "CH based Metric": metric}
  27. metricsDF = metricsDF.append(tempDict, ignore_index=True)
  28. fig, ax = plt.subplots(figsize=(14, 11.2))
  29. sns.pointplot(data=metricsDF,
  30. x="Iteration Number", y="CH based Metric", hue="Job Number",
  31. ci=None, linestyles="-", markers="o", ax=ax)
  32. fig.tight_layout()
  33. return fig
  34. if __name__ == '__main__':
  35. from regmaxsn.core.RegMaxSPars import RegMaxSNParNames
  36. assert len(sys.argv) == 2, 'Improper usage! Please use as \'python {} parFile\''.format(sys.argv[1])
  37. parFile = sys.argv[1]
  38. figs = plotMaxDistEMDVsIteration(parFile, RegMaxSNParNames)
  39. raw_input('Press any key to close figures and quit:')