Skip to content

Commit

Permalink
moved rotProfile2D from GJEMS
Browse files Browse the repository at this point in the history
  • Loading branch information
ajkswamy committed Jun 12, 2018
1 parent 0153bb0 commit 8366043
Showing 1 changed file with 122 additions and 0 deletions.
122 changes: 122 additions & 0 deletions regmaxsn/scripts/utils/rotProfile2D.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
from regmaxsn.core.SWCTransforms import SWCRotate, ArgGenIterator, objFun
import multiprocessing as mp
import numpy as np
from itertools import product
import json
from matplotlib import pyplot as plt
import seaborn as sns
plt.ion()
import os
from regmaxsn.core.matplotlibRCParams import mplPars


sns.set(rc=mplPars)
# ----------------------------------------------------------------------------------------------------------------------
homeFolder = "/home/aj"
dirPath = os.path.join(homeFolder,'DataAndResults/morphology/OriginalData/borstHSN2D/')
#
expNames = [
'HSN-fluoro01.CNG2D',
'HSN-fluoro01.CNG2DRandRot',
# 'HSN-fluoro01.CNG2DRandRot1',
# 'HSN-fluoro01.CNG2DRandRot2',
# 'HSN-fluoro01.CNG2DRandRot3',
# 'HSN-fluoro01.CNG2DRandRot4',
# 'HSN-fluoro01.CNG2DRandRot5',
# 'HSN-fluoro01.CNGNoiseStd42DRandRot',
# 'HSN-fluoro01.CNGNoiseStd42DRandRot1',
# 'HSN-fluoro01.CNGNoiseStd42DRandRot2',
# 'HSN-fluoro01.CNGNoiseStd42DRandRot3',
# 'HSN-fluoro01.CNGNoiseStd42DRandRot4',
# 'HSN-fluoro01.CNGNoiseStd42DRandRot5',
# 'HSN-fluoro02.CNG2D',
# 'HSN-fluoro03.CNG',
# 'HSN-fluoro04.CNG',
# 'HSN-fluoro05.CNG2D',
# 'HSN-fluoro06.CNG',
# 'HSN-fluoro07.CNG',
# 'HSN-fluoro08.CNG',
# 'HSN-fluoro09.CNG',
# 'HSN-fluoro10.CNG',
]


refInd = 0
resDir = os.path.join(homeFolder,'DataAndResults/morphology/directPixelBased/rotProfile2D/')
if not os.path.isdir(resDir):
os.mkdir(resDir)
# ----------------------------------------------------------------------------------------------------------------------

# gridSizes = [40.0, 20.0, 10.0]
gridSizes = [40.0]
# gridSizes = [20.0]
# gridSizes = [10.0]
bounds = [[0, 0], [0, 0], [-np.pi / 6, np.pi / 6]]

# bounds = [[0, 0], [-np.pi / 3, np.pi / 3], [-np.pi / 3, np.pi / 3]]


rotMinRes = np.deg2rad(1).round(4)
nCPU = 7

refSWC = os.path.join(dirPath, expNames[refInd] + '.swc')
SWC2Align = os.path.join(dirPath, expNames[1] + '.swc')
SWCRotCenter = np.loadtxt(SWC2Align)[:, 2:5].mean(axis=0)
data = np.loadtxt(SWC2Align)[:, 2:5] - SWCRotCenter
maxDist = np.linalg.norm(data, axis=1).max()
pool = mp.Pool(processes=nCPU)
with sns.axes_style('whitegrid'):
# fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(10, 8))
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(7, 5.6))

with open(os.path.join(dirPath, expNames[1] + '.json')) as fle:
pars = json.load(fle)
actualSol = -np.rad2deg(pars['angles'][2])


SWCDatas = [SWCRotate(refSWC, SWC2Align, x) for x in gridSizes]
noChangeVals = [objFun(([0, 0, 0], data)) for data in SWCDatas]
stepSizes = [2 * x / maxDist for x in gridSizes]

for gridInd, gridSize in enumerate(gridSizes):

# print('Gridsize:' + str(gridSize))
stepSize = stepSizes[gridInd]
# print('Stepsize: ' + str(np.rad2deg(stepSize)))
bounds = np.array(bounds)
boundsRoundedUp = np.sign(bounds) * np.ceil(np.abs(bounds) / stepSize) * stepSize
possiblePts1D = [np.round(np.arange(x[0], x[1] + 0.9 * stepSize, stepSize), 3).tolist() for x in boundsRoundedUp]
possiblePts3D = np.round(list(product(*possiblePts1D)), 3).tolist()
argGen = ArgGenIterator(possiblePts3D, SWCDatas[gridInd])
funcVals = pool.map(objFun, argGen)
outFile = os.path.join(resDir, expNames[refInd] + expNames[1] + str(int(gridSize)) + 'rot.json')
with open(outFile, 'w') as fle:
json.dump({'possiblePoints3D': possiblePts3D, 'funcVals': funcVals}, fle)
with sns.axes_style('whitegrid'):

# ax1 = ax[gridInd]
ax1 = ax
ax1.plot(np.rad2deg(possiblePts1D[2]), funcVals, 'b-o', lw=6, ms=12)
ybounds = (0.1 * np.floor(min(funcVals)*10), 0.1 * np.ceil(max(funcVals)*10))
ax1.set_ylim(ybounds)
ax1.plot([actualSol] * 2, ybounds, 'r-', lw=6)
ax1.set_ylabel(r'Dissimilarity')
# ax1.set_title(r'GridSize=' + str(int(gridSize)) + '$\mu$m')
if not gridInd:
bestSol = possiblePts3D[np.argmin(funcVals)]
else:
minimum = min(funcVals)
if minimum > noChangeVals[gridInd]:
bestSol = [0, 0, 0]
else:
# if True:
minimzers = [y for x, y in enumerate(possiblePts3D) if funcVals[x] == minimum]
prevVals = [objFun((x, SWCDatas[gridInd - 1])) for x in minimzers]
bestSol = minimzers[np.argmin(prevVals)]

bestVal = objFun((bestSol, SWCDatas[gridInd]))
print(bestSol)

ax1.set_xlabel(r'rotation about Z in degrees')
fig.tight_layout()
fig.canvas.draw()

0 comments on commit 8366043

Please sign in to comment.