def compute_stack_stat(statfile, params): #compute the number of cells stat = pd.DataFrame.from_csv(statfile, sep='\t') cellnum = pd.DataFrame() for img in stat.Image_name.unique(): curstat = stat[stat.Image_name == img] cellnum = cellnum.append(pd.Series({ 'Number_of_glomeruli': len(curstat), 'Image_name': curstat.Image_name.iloc[0], 'Kidney_volume': curstat.Kidney_volume.iloc[0], 'Mean_size': curstat.Diameter.mean(), 'Stdev_of_size': curstat.Diameter.std() }), ignore_index=True) cellnum = filelib.extract_groups(cellnum) cellnum.to_csv(params.inputfolder + '../statistics/stack_statistics.csv', sep='\t')
def compute_size_distribution(statfile, params): stat = pd.DataFrame.from_csv(statfile, sep='\t') absvalues = True #compute distribution of diameters dmin = int(round(2 * float(params.minrad))) dmax = int(round(2 * float(params.maxrad))) n = 5 dmin = int(dmin) / n * n dmax = int(dmax) / n * n + n bins = np.linspace(dmin, dmax, num=(dmax - dmin) / n + 1) bins = np.int_(bins) stat['Diameter, $\mu m$'] = stat.Diameter stat['Volume, x 1000 $\mu m^3$'] = stat.Volume / 1000 x = 'Diameter, $\mu m$' if absvalues: y = 'Number of glomeruli' else: y = 'Frequency' distr = pd.DataFrame() for img in stat.Image_name.unique(): curstat = stat[stat.Image_name == img] curdistr = pd.DataFrame() for i in range(1, len(bins)): curstat0 = curstat[(curstat[x] >= bins[i - 1]) & (curstat[x] < bins[i])] if absvalues: fr = len(curstat0) else: fr = len(curstat0) * 1. / len(curstat) curdistr = curdistr.append(pd.Series({ x: bins[i - 1] + (bins[i] - bins[i - 1]) / 2., y: fr }), ignore_index=True) curdistr['Image_name'] = curstat.Image_name.iloc[0] distr = pd.concat([distr, curdistr], ignore_index=True) distr = filelib.extract_groups(distr) distr.to_csv(params.inputfolder + '../statistics/diameter_distribution.csv', sep='\t') maxvol = int(round(4. / 3 * np.pi * float(params.maxrad)**3)) minvol = int(round(4. / 3 * np.pi * float(params.minrad)**3)) n = 32 dmin = int(minvol / 1000) / n * n dmax = int(maxvol / 1000 * 0.4) / n * n + n bins = np.linspace(dmin, dmax, num=(dmax - dmin) / n + 1) bins = np.int_(bins) x = 'Volume, x 1000 $\mu m^3$' distr = pd.DataFrame() for img in stat.Image_name.unique(): curstat = stat[stat.Image_name == img] curdistr = pd.DataFrame() for i in range(1, len(bins)): curstat0 = curstat[(curstat[x] >= bins[i - 1]) & (curstat[x] < bins[i])] if absvalues: fr = len(curstat0) else: fr = len(curstat0) * 1. / len(curstat) curdistr = curdistr.append(pd.Series({ x: bins[i - 1] + (bins[i] - bins[i - 1]) / 2., y: fr }), ignore_index=True) curdistr['Image_name'] = curstat.Image_name.iloc[0] distr = pd.concat([distr, curdistr], ignore_index=True) distr = filelib.extract_groups(distr) distr.to_csv(params.inputfolder + '../statistics/volume_distribution.csv', sep='\t')