diff --git a/scripts/textometry/visualiseProfile.py b/scripts/textometry/visualiseProfile.py index 54c5ef580b1d3616ed58f9eef74a0955fcd3e325..47bc44af95aa6e3bbd651bb98fa803e08c715faa 100755 --- a/scripts/textometry/visualiseProfile.py +++ b/scripts/textometry/visualiseProfile.py @@ -12,9 +12,10 @@ def gate(measure): return [1 if i >= first and i < last else 0 for i in range(1, 1 + measure['totalSize'])] -def plotProfile(profile, outputPath): +def plotDensity(profile, outputPath): plot.figure(figsize=(16,13)) - ax = seaborn.lineplot(profile) + l = len(profile) + ax = seaborn.lineplot(x=[100*i/(l-1) for i in range(l)], y=profile) ax.set_xlabel("Position") ax.set_xlim(0, 100) ax.set_ylim(0) @@ -29,7 +30,7 @@ def plotProfile(profile, outputPath): def sumProfiles(sameSizeProfiles): return list(map(sum, zip(*sameSizeProfiles))) -def computeProfile(measures, resolution=100): +def computeProfile(measures, resolution): bySize, count = {}, 0 for measure in measures: distribution = gate(measure) @@ -39,13 +40,28 @@ def computeProfile(measures, resolution=100): bySize[l] = [] bySize[l].append(distribution) resampled = map(resample(resolution), map(sumProfiles, bySize.values())) - return [100*x/count for x in sumProfiles(list(resampled))] + return [resolution*x/count for x in sumProfiles(list(resampled))] -def visualiseProfile(measures, outputPath): - profile = computeProfile(measures) +def visualiseProfile(measures, outputPath, resolution=100): + profile = computeProfile(measures, resolution) toTSV(prepare(f"{outputPath}/profile.tsv"), profile, sortBy=None) - plotProfile(profile, f"{outputPath}/profile.png") + plotDensity(profile, f"{outputPath}/profile.png") + +def parseArgs(args): + positional = [] + kwargs = {} + i = 0 + while i < len(args): + if args[i] == '--resolution': + kwargs['resolution'] = int(args[i+1]) + i += 1 + else: + positional.append(args[i]) + i += 1 + return positional, kwargs if __name__ == '__main__': - visualiseProfile([measure for _, measure in fromTSV(argv[1]).iterrows()], - argv[2]) + args, kwargs = parseArgs(argv[1:]) + visualiseProfile([measure for _, measure in fromTSV(args[0]).iterrows()], + args[1], + **kwargs)