From 472dca50a02049587b67755bbf4b55f63c46b8fe Mon Sep 17 00:00:00 2001 From: Alice BRENON <alice.brenon@ens-lyon.fr> Date: Fri, 5 Jan 2024 12:22:52 +0100 Subject: [PATCH] Add the ability to set the resolution from the command line in the profile visualisation script --- scripts/textometry/visualiseProfile.py | 34 +++++++++++++++++++------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/scripts/textometry/visualiseProfile.py b/scripts/textometry/visualiseProfile.py index 54c5ef5..47bc44a 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) -- GitLab