Exemplo n.º 1
0
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')
Exemplo n.º 2
0
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')