1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from regmaxsn.core.swcFuncs import readSWC_numpy, resampleSWC
- from scipy.spatial import ConvexHull
- import pandas as pd
- from scipy.spatial.distance import cdist
- def maxDistStats(swcFiles):
- swcHullVerts = []
- swcDatas = []
- swcDataSeries =[]
- swcHullVertsSeries = []
- maxDistStatsDF = pd.DataFrame()
- for swcFile in swcFiles:
- totalLen, swcDataWithR = resampleSWC(swcFile, 0.5)
- swcData = swcDataWithR[:, :3]
- swcDatas.append(swcData)
- swcDataSeries.append(pd.Series([tuple(x) for x in swcData]))
- hull = ConvexHull(swcData)
- swcHullVert = swcData[hull.vertices, :]
- swcHullVerts.append(swcHullVert)
- swcHullVertsSeries.append(pd.Series([tuple(x) for x in swcHullVert]))
- for swcInd1, swcData1 in enumerate(swcDatas):
- swcInds = range(len(swcFiles))
- swcInds.remove(swcInd1)
- swcDataSeries1 = swcDataSeries[swcInd1]
- for swcInd2 in swcInds:
- swcHullVert2 = swcHullVerts[swcInd2]
- swcHullVertSeries2 = swcHullVertsSeries[swcInd2]
- distMat = cdist(swcData1, swcHullVert2)
- maxDistsInds = distMat.argmax(axis=1)
- tempDF = pd.DataFrame()
- tempDF["source point"] = swcDataSeries1
- tempDF["maximum distance"] = distMat.max(axis=1)
- tempDF["destination farthest point"] = swcHullVertSeries2[maxDistsInds].values
- tempDF["destination SWC"] = swcFiles[swcInd2]
- maxDistStatsDF = maxDistStatsDF.append(tempDF, ignore_index=True)
- return maxDistStatsDF
|