def read_xml_data(folder=None, filename='output00000246.xml'): output_path = folder or os.path.abspath(os.path.dirname(__file__)) xml_file = os.path.join(output_path, filename) mcds = pyMCDS_cells(xml_file, output_path=output_path) ncells = len(mcds.data['discrete_cells']['ID']) centers = np.zeros((ncells, 3)) centers[:, 0] = mcds.data['discrete_cells']['position_x'] centers[:, 1] = mcds.data['discrete_cells']['position_y'] centers[:, 2] = mcds.data['discrete_cells']['position_z'] colors = np.zeros((ncells, 3)) colors[:, 0] = 1 colors[:, 1] = 1 colors[:, 2] = 0 cycle_model = mcds.data['discrete_cells']['cycle_model'] cell_type = mcds.data['discrete_cells']['cell_type'] onco = mcds.data['discrete_cells']['oncoprotein'] onco_min = onco.min() onco_range = onco.max() - onco.min() # This coloring is only approximately correct, but at least it shows # variation in cell colors for idx in range(ncells): if cell_type[idx] == 1: colors[idx, 0] = 1 colors[idx, 1] = 1 colors[idx, 2] = 0 if cycle_model[idx] < 100: colors[idx, 0] = 1.0 - (onco[idx] - onco_min) / onco_range colors[idx, 1] = colors[idx, 0] colors[idx, 2] = 0 elif cycle_model[idx] == 100: colors[idx, 0] = 1 colors[idx, 1] = 0 colors[idx, 2] = 0 elif cycle_model[idx] > 100: colors[idx, 0] = 0.54 # 139./255 colors[idx, 1] = 0.27 # 69./255 colors[idx, 2] = 0.075 # 19./255 radius = mcds.data['discrete_cells']['total_volume'] * .75 / np.pi radius = np.cbrt(radius) return centers, colors, radius
def read_data(): global idx_xml, xml_files mcds = pyMCDS_cells(xml_files[idx_xml], _DATA_DIR) ncells = len(mcds.data['discrete_cells']['ID']) centers = np.zeros((ncells, 3)) centers[:, 0] = mcds.data['discrete_cells']['position_x'] centers[:, 1] = mcds.data['discrete_cells']['position_y'] centers[:, 2] = mcds.data['discrete_cells']['position_z'] colors = np.zeros((ncells, 3)) colors[:, 0] = 1 colors[:, 1] = 1 colors[:, 2] = 0 cycle_model = mcds.data['discrete_cells']['cycle_model'] cell_type = mcds.data['discrete_cells']['cell_type'] onco = mcds.data['discrete_cells']['oncoprotein'] onco_min = onco.min() onco_range = onco.max() - onco.min() # This coloring is only approximately correct, but at least it shows # variation in cell colors for idx in range(ncells): if cell_type[idx] == 1: colors[idx, 0] = 1 colors[idx, 1] = 1 colors[idx, 2] = 0 if cycle_model[idx] < 100: colors[idx, 0] = 1.0 - (onco[idx] - onco_min) / onco_range colors[idx, 1] = colors[idx, 0] colors[idx, 2] = 0 elif cycle_model[idx] == 100: colors[idx, 0] = 1 colors[idx, 1] = 0 colors[idx, 2] = 0 elif cycle_model[idx] > 100: colors[idx, 0] = 0.54 # 139./255 colors[idx, 1] = 0.27 # 69./255 colors[idx, 2] = 0.075 # 19./255 radius = mcds.data['discrete_cells']['total_volume'] * .75 / np.pi radius = np.cbrt(radius) return centers, colors, radius
print('# num_days = ', num_days) kdx += 1 ymax = float(sys.argv[kdx]) print('ymax = ', ymax) print('data_dir = ', data_dir) os.chdir(data_dir) #xml_files = glob.glob('output/output*.xml') xml_files = glob.glob('output*.xml') os.chdir('..') xml_files.sort() #print('xml_files = ',xml_files) ds_count = len(xml_files) print("----- ds_count = ", ds_count) mcds = [pyMCDS_cells(xml_files[i], data_dir) for i in range(ds_count)] tval = np.linspace(0, mcds[-1].get_time(), ds_count) print('tval= ', tval) y_load = np.array([ np.floor(mcds[idx].data['discrete_cells']['assembled_virion']).sum() for idx in range(ds_count) ]).astype(int) print(y_load) xvals = [*range(1, num_days + 1)] xvals = [el * 1440 for el in xvals] xlabels = tuple(str(val) for val in range(1, num_days + 1)) plt.xticks(xvals, xlabels)
import numpy as np import matplotlib.pyplot as plt # if you want to plot results # run this script from your output directory xml_files = glob.glob('output*.xml') xml_files.sort() print(xml_files) n = len(xml_files) t = np.zeros(n) uninfected = np.zeros(n) infected = np.zeros(n) dead = np.zeros(n) idx = 0 for f in xml_files: mcds = pyMCDS_cells(f, '.') t[idx] = mcds.get_time() cycle = mcds.data['discrete_cells']['cycle_model'] cycle = cycle.astype(int) ID_uninfected = np.where( (mcds.data['discrete_cells']['assembled_virion'] < 1) & (cycle < 100)) ID_infected = np.where( (mcds.data['discrete_cells']['assembled_virion'] >= 1) & (cycle < 100)) uninfected[idx] = len(ID_uninfected[0]) infected[idx] = len(ID_infected[0]) dead_ID = np.where(cycle >= 100) dead[idx] = len(dead_ID[0]) # print(infected)
colors_array.Modified() def win_callback(obj, event): global size global panel if size != obj.GetSize(): size_old = size size = obj.GetSize() size_change = [size[0] - size_old[0], 0] panel.re_align(size_change) if __name__ == '__main__': # mcds = pyMCDS_cells('output00000001.xml', '.') # 23123 cells mcds = pyMCDS_cells('output00000246.xml', '.') print('time=', mcds.get_time()) print(mcds.data['discrete_cells'].keys()) ncells = len(mcds.data['discrete_cells']['ID']) global xyz xyz = np.zeros((ncells, 3)) xyz[:, 0] = mcds.data['discrete_cells']['position_x'] xyz[:, 1] = mcds.data['discrete_cells']['position_y'] xyz[:, 2] = mcds.data['discrete_cells']['position_z'] #xyz = xyz[:1000] np.random.seed(42) # rgb = np.random.rand(xyz.shape[0], 3)
#from pyMCDS import pyMCDS from pyMCDS_cells import pyMCDS_cells import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.use("TkAgg") argc = len(sys.argv) print('argv=', sys.argv) print('argv[0]=', sys.argv[0]) #p1=string.atof(sys.argv[1]) #mcds = pyMCDS_cells('output00000000.xml','output'); #mcds = pyMCDS_cells('output00000002.xml') fname = "output%08d.xml" % int(sys.argv[1]) mcds = pyMCDS_cells(fname) #In [7]: mcds.data['discrete_cells'].keys() #Out[7]: dict_keys(['ID', 'position_x', 'position_y', 'position_z', 'total_volume', 'cell_type', 'cycle_model', 'current_phase', 'elapsed_time_in_phase', 'nuclear_volume', 'cytoplasmic_volume', 'fluid_fraction', 'calcified_fraction', 'orientation_x', 'orientation_y', 'orientation_z', 'polarity', 'migration_speed', 'motility_vector_x', 'motility_vector_y', 'motility_vector_z', 'migration_bias', 'motility_bias_direction_x', 'motility_bias_direction_y', 'motility_bias_direction_z', 'persistence_time', 'motility_reserved', 'receptor', 'elastic_coefficient']) tval = int(mcds.get_time()) print('time = ', tval) cx = mcds.data['discrete_cells']['position_x'] cy = mcds.data['discrete_cells']['position_y'] print('x size =', cx.size) print('y size =', cy.size) bad_max = 5000 #idx_bad = np.where((cx > bad_max) ^ (cy > bad_max)) #print('idx_bad=',idx_bad) #cycle = mcds.data['discrete_cells']['cycle_model']
from pyMCDS_cells import pyMCDS_cells import numpy as np from fury import window, actor, ui #mcds = pyMCDS_cells('output00000001.xml','data') mcds = pyMCDS_cells('output00000001.xml','.') # 23123 cells print('time=',mcds.get_time()) print(mcds.data['discrete_cells'].keys()) #Out[7]: dict_keys(['ID', 'position_x', 'position_y', 'position_z', 'total_volume', 'cell_type', 'cycle_model', 'current_phase', 'elapsed_time_in_phase', 'nuclear_volume', 'cytoplasmic_volume', 'fluid_fraction', 'calcified_fraction', 'orientation_x', 'orientation_y', 'orientation_z', 'polarity', 'migration_speed', 'motility_vector_x', 'motility_vector_y', 'motility_vector_z', 'migration_bias', 'motility_bias_direction_x', 'motility_bias_direction_y', 'motility_bias_direction_z', 'persistence_time', 'motility_reserved', 'oncoprotein', 'elastic_coefficient', 'kill_rate', 'attachment_lifetime', 'attachment_rate']) # http://www.mathcancer.org/blog/paraview-for-physicell-part-1/ # The following lines assign an integer to represent # a color, defined in a Color Map. # sval = 0 # immune cells are yellow? # if val[5,idx] == 1: # [5]=cell_type # sval = 1 # lime green # if (val[6,idx] == 6) or (val[6,idx] == 7): # sval = 0 # if val[7,idx] == 100: # [7]=current_phase # sval = 3 # apoptotic: red # if val[7,idx] > 100 and val[7,idx] < 104: # sval = 2 # necrotic: brownish ncells = len(mcds.data['discrete_cells']['ID']) print('num cells = ',ncells) #xyz = np.empty((ncells,3)) xyz = np.zeros((ncells,3))
import glob from pyMCDS_cells import pyMCDS_cells import numpy as np xml_files = glob.glob('output*.xml') xml_files.sort() print(xml_files) num_xml = len(xml_files) print(num_xml) tcount = 0 count_macs = np.zeros(44) #mcds1 = pyMCDS('output00000001.xml', 'timeseries_set') for xml_f in xml_files: # mcds = pyMCDS_cells('output00000001.xml','.') mcds = pyMCDS_cells(xml_f,'.') # Matlab (Adrianne) # ind1(tcount) = length(find( MCDS.discrete_cells.metadata.type == 3)); %CD8 # ind2(tcount) = length(find( MCDS.discrete_cells.metadata.type == 4)); %macs # ind3(tcount) = length(find( MCDS.discrete_cells.metadata.type == 5)); %neutrophils # dead_cells(tcount) = length(MCDS.discrete_cells.dead_cells); # live_target_cells(tcount) = length(find( MCDS.discrete_cells.metadata.type == 1))-dead_cells(tcount); # infected_cells(tcount) = length(find(MCDS.discrete_cells.custom.virion>1)); print('time=',mcds.get_time()) cell_id = mcds.data['discrete_cells']['ID'] num_cells = cell_id.shape[0] print('# cells = ',num_cells) cell_type = mcds.data['discrete_cells']['cell_type'] macs = np.where(cell_type == 4.0) count_macs[tcount] = len(macs[0])
from pyMCDS_cells import pyMCDS_cells import numpy as np from fury import window, actor, ui #mcds = pyMCDS_cells('output00000001.xml','data') #mcds = pyMCDS_cells('output00000001.xml','.') # 23123 cells mcds = pyMCDS_cells('output00000001.xml', '../tmpdir') # 23123 cells print('time=', mcds.get_time()) print(mcds.data['discrete_cells'].keys()) #Out[7]: dict_keys(['ID', 'position_x', 'position_y', 'position_z', 'total_volume', 'cell_type', 'cycle_model', 'current_phase', 'elapsed_time_in_phase', 'nuclear_volume', 'cytoplasmic_volume', 'fluid_fraction', 'calcified_fraction', 'orientation_x', 'orientation_y', 'orientation_z', 'polarity', 'migration_speed', 'motility_vector_x', 'motility_vector_y', 'motility_vector_z', 'migration_bias', 'motility_bias_direction_x', 'motility_bias_direction_y', 'motility_bias_direction_z', 'persistence_time', 'motility_reserved', 'oncoprotein', 'elastic_coefficient', 'kill_rate', 'attachment_lifetime', 'attachment_rate']) # http://www.mathcancer.org/blog/paraview-for-physicell-part-1/ # The following lines assign an integer to represent # a color, defined in a Color Map. # sval = 0 # immune cells are yellow? # if val[5,idx] == 1: # [5]=cell_type # sval = 1 # lime green # if (val[6,idx] == 6) or (val[6,idx] == 7): # sval = 0 # if val[7,idx] == 100: # [7]=current_phase # sval = 3 # apoptotic: red # if val[7,idx] > 100 and val[7,idx] < 104: # sval = 2 # necrotic: brownish ncells = len(mcds.data['discrete_cells']['ID']) print('num cells = ', ncells) #xyz = np.empty((ncells,3)) xyz = np.zeros((ncells, 3))