Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #!/usr/bin/etc python
  2. from numpy.random import choice
  3. from itertools import count,chain
  4. from copy import deepcopy
  5. import sys
  6.  
  7. ###############
  8. # Globals
  9. ###############
  10. possible_states = ["progenitor","differentiated"]
  11.  
  12. #################
  13. # Classes
  14. #################
  15. class Cell:
  16. def __init__(self,pDiff,state,parent_name=-1):
  17. self.parent_name = parent_name
  18. self.name = nameGenerator.next()
  19. #assert(0>pDiff>1)
  20. self.pDiff = float(pDiff)
  21. self.weights = [1-self.pDiff,self.pDiff]
  22. #assert (sum(self.weights)==1)
  23. self.cycles = 0
  24. #assert(state in self.possible_states)
  25. self.state = state
  26. def divide(self):
  27. if(self.state=="progenitor"):
  28. newState=choice(possible_states,p=self.weights)
  29. daughterState = choice(possible_states,p=self.weights)
  30. self.state = newState
  31. self.cycles = 1
  32. return([self,Cell(parent_name=self.name,pDiff=self.pDiff,state=newState)])
  33. else:
  34. return([self])
  35. def __str__(self):
  36. return("Cell%d:%s:%d" % (self.name,self.state,self.cycles))
  37. def __repr__(self):
  38. return(self.__str__())
  39.  
  40.  
  41. nStart = 10
  42. pDiff = 0.45 # probability that a cell division will produce a daughter cell that is 'post-mitotic' (e.g. differentiated)
  43. nCycles = 30
  44. nameGenerator = count(start=0,step=1)
  45. cells = {0:[Cell(pDiff=pDiff,state="progenitor") for i in xrange(nStart)]} #initialize progenitor pool
  46.  
  47.  
  48. # Simulate Cell cycle for nCycles
  49. for i in xrange(1,nCycles+1):
  50. sys.stderr.write("%d" % i)
  51. cells[i] = [deepcopy(x) for x in cells[i-1]]
  52. cells[i] = [x.divide() for x in cells[i]]
  53. #print(cells[i])
  54. cells[i] = list(chain.from_iterable(cells[i]))
  55.  
  56. #Report Summary stats by cycle
  57. print("%s: %s\t%s\t%s" % ("round", "total_cells", "fracProgenitors","fracDifferentiated"))
  58. for k in cells.keys():
  59. nCells = len(cells[k])
  60. fracProgenitors = (len([i for i in cells[k] if i.state == "progenitor"])/float(nCells))*100
  61. fracDiff = 100-fracProgenitors
  62. print("%s: %d\t%0.2f\t%0.2f" % (k,nCells,fracProgenitors,fracDiff))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement