files4brainNetViewer.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Fri Sep 4 15:25:17 2020
  5. @author: p277634
  6. """
  7. import numpy as np
  8. from scipy.io import loadmat
  9. from itertools import combinations
  10. class BNVfiles():
  11. def __init__(self):
  12. self.fileNodes = './data/Desikan-Killiany68_myTest.txt'
  13. self.fileMapper = './data/mapFS2DTI.mat'
  14. self.pathsave = './dataSave/'
  15. self.nroi = 68
  16. self.pairs = np.array(list(combinations(range(self.nroi),2)), dtype=np.int32)
  17. self._getMapper()
  18. def _getMapper(self):
  19. self.map = loadmat(self.fileMapper)['map']['raw2cross'][0][0][0]-1
  20. def doNodes(self, colors=None, sizes=None, name='nodes'):
  21. """ Desikan parcelation by default
  22. @ colors: [nRoi], scale for coloring nodes
  23. @ sizes: [nROi], scale for the size of nodes """
  24. A = np.loadtxt(self.fileNodes)
  25. if colors is not None:
  26. A[:,3] = colors[self.map]
  27. if sizes is not None:
  28. A[:,4] = sizes[self.map]
  29. np.savetxt(self.pathsave+name + '.node', A)
  30. def doEdges(self, edges, weights, name='edges'):
  31. """ @ edges: directed FC with sign
  32. @ weights: strength of edge """
  33. ## Edges are transposed with respect to brain connectivity toolbox
  34. fc = np.zeros((self.nroi, self.nroi))
  35. for i in range(self.pairs.shape[0]):
  36. if edges[i] > 0:
  37. fc[self.map[self.pairs[i,0]], self.map[self.pairs[i,1]]] = weights[i]
  38. elif edges[i] < 0:
  39. fc[self.map[self.pairs[i,1]], self.map[self.pairs[i,0]]] = weights[i]
  40. np.savetxt(self.pathsave+name + '.edge', fc.T)