Mercurial > repos > rv43 > plot_smb_tiff
comparison plot_smb_tiff.py @ 0:9f331fb5be2c draft
planemo upload for repository https://github.com/rolfverberg/galaxytools commit ec74ae97e0ca220d04cb668baa656358abf190e9
| author | rv43 |
|---|---|
| date | Fri, 10 Mar 2023 20:57:05 +0000 |
| parents | |
| children | 6be076b081c4 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:9f331fb5be2c |
|---|---|
| 1 #!/usr/bin/env python3 | |
| 2 | |
| 3 import logging | |
| 4 | |
| 5 import argparse | |
| 6 import matplotlib.pyplot as plt | |
| 7 import os | |
| 8 #from re import compile as re_compile | |
| 9 import sys | |
| 10 | |
| 11 def __main__(): | |
| 12 | |
| 13 # Parse command line arguments | |
| 14 parser = argparse.ArgumentParser( | |
| 15 description='Plot an image for the SMB schema') | |
| 16 parser.add_argument('--cycle', | |
| 17 required=True, | |
| 18 help='''Run cycle.''') | |
| 19 parser.add_argument('--station', | |
| 20 required=True, | |
| 21 choices=['id1a3', 'id3a'], | |
| 22 help='''Beamline station.''') | |
| 23 parser.add_argument('--btr', | |
| 24 required=True, | |
| 25 help='''BTR.''') | |
| 26 parser.add_argument('--sample', | |
| 27 required=True, | |
| 28 help='''Sample name.''') | |
| 29 parser.add_argument('--scan_number', | |
| 30 default=-1, | |
| 31 type=int, | |
| 32 help='SPEC scan number') | |
| 33 parser.add_argument('--image_index', | |
| 34 default=0, | |
| 35 type=int, | |
| 36 help='Image index relative the first') | |
| 37 parser.add_argument('-l', '--log', | |
| 38 # type=argparse.FileType('w'), | |
| 39 default=sys.stdout, | |
| 40 help='Logging stream or filename') | |
| 41 parser.add_argument('--log_level', | |
| 42 choices=logging._nameToLevel.keys(), | |
| 43 default='INFO', | |
| 44 help='''Specify a preferred logging level.''') | |
| 45 args = parser.parse_args() | |
| 46 | |
| 47 # Set log configuration | |
| 48 # When logging to file, the stdout log level defaults to WARNING | |
| 49 logging_format = '%(asctime)s : %(levelname)s - %(module)s : %(funcName)s - %(message)s' | |
| 50 level = logging.getLevelName(args.log_level) | |
| 51 if args.log is sys.stdout: | |
| 52 logging.basicConfig(format=logging_format, level=level, force=True, | |
| 53 handlers=[logging.StreamHandler()]) | |
| 54 else: | |
| 55 if isinstance(args.log, str): | |
| 56 logging.basicConfig(filename=f'{args.log}', filemode='w', | |
| 57 format=logging_format, level=level, force=True) | |
| 58 elif isinstance(args.log, io.TextIOWrapper): | |
| 59 logging.basicConfig(filemode='w', format=logging_format, level=level, | |
| 60 stream=args.log, force=True) | |
| 61 else: | |
| 62 raise(ValueError(f'Invalid argument --log: {args.log}')) | |
| 63 stream_handler = logging.StreamHandler() | |
| 64 logging.getLogger().addHandler(stream_handler) | |
| 65 stream_handler.setLevel(logging.WARNING) | |
| 66 stream_handler.setFormatter(logging.Formatter(logging_format)) | |
| 67 | |
| 68 # Log command line arguments | |
| 69 logging.info(f'cycle = {args.cycle}') | |
| 70 logging.info(f'station = {args.station}') | |
| 71 logging.info(f'btr = {args.btr}') | |
| 72 logging.info(f'sample = {args.sample}') | |
| 73 logging.info(f'scan_number = {args.scan_number}') | |
| 74 logging.info(f'image_index = {args.image_index}') | |
| 75 logging.debug(f'log = {args.log}') | |
| 76 logging.debug(f'is log stdout? {args.log is sys.stdout}') | |
| 77 | |
| 78 # Check input parameters | |
| 79 if args.image_index < 0: | |
| 80 raise ValueError(f'Invalid "image_index" parameter ({args.image_index})') | |
| 81 | |
| 82 # Check work directory | |
| 83 workdir = f'/nfs/chess/{args.station}/{args.cycle}/{args.btr}/{args.sample}' | |
| 84 logging.info(f'workdir = {workdir}') | |
| 85 if not os.path.isdir(workdir): | |
| 86 raise ValueError('Invalid work directory: {workdir}') | |
| 87 | |
| 88 # Get all available scan_numbers | |
| 89 scan_numbers = [int(v) for v in os.listdir(workdir) if v.isdigit() and | |
| 90 os.path.isdir(f'{workdir}/{v}')] | |
| 91 | |
| 92 if args.scan_number == -1: | |
| 93 # Pick lowest scan_number with image files | |
| 94 image_file = None | |
| 95 for scan_number in sorted(scan_numbers): | |
| 96 if 'nf' in os.listdir(f'{workdir}/{scan_number}'): | |
| 97 # indexRegex = re_compile(r'\d+') | |
| 98 path = f'{workdir}/{scan_number}/nf' | |
| 99 # image_files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f)) and | |
| 100 # f.endswith(".tif") and indexRegex.search(f)] | |
| 101 image_files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f)) | |
| 102 and f.endswith(".tif")] | |
| 103 if len(image_files): | |
| 104 image_file = f'{path}/{image_files[0]}' | |
| 105 break | |
| 106 else: | |
| 107 # Pick requested image file | |
| 108 scan_number = args.scan_number | |
| 109 if not os.path.isdir(f'{workdir}/{scan_number}'): | |
| 110 raise ValueError('Invalid scan_number (non-existing directory {workdir}/{scan_number})') | |
| 111 path = f'{workdir}/{scan_number}/nf' | |
| 112 if 'nf' not in os.listdir(f'{workdir}/{scan_number}'): | |
| 113 raise ValueError('Unable to find directory {path}') | |
| 114 image_files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f)) | |
| 115 and f.endswith(".tif")] | |
| 116 if args.image_index >= len(image_files): | |
| 117 raise ValueError('Unable to open the {args.image_index}th image file in {path}') | |
| 118 image_file = f'{path}/{image_files[args.image_index]}' | |
| 119 | |
| 120 # Plot image to file | |
| 121 if image_file is None: | |
| 122 raise ValueError('Unable to find a valid image') | |
| 123 data = plt.imread(image_file) | |
| 124 title = 'image_files[0]' | |
| 125 plt.figure(title) | |
| 126 plt.imshow(data) | |
| 127 plt.savefig('image.jpg') | |
| 128 plt.close(fig=title) | |
| 129 | |
| 130 if __name__ == "__main__": | |
| 131 __main__() | |
| 132 |
