Commit cba089f2 authored by Cristian Pozo Gonzalez's avatar Cristian Pozo Gonzalez
Browse files

Add new arguments and menu

parent da2020ab
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -52,7 +52,8 @@ dependencies = [
  'matplotlib>=3.7',
  'astropy>=5.3',
  'requests>=2.31',
  'Pillow>=9.5'
  'Pillow>=9.5',
  'PyConsoleMenu>=1.0'
]

[project.optional-dependencies]
+28 −12
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
#######################################################

import sys
import os
from PyQt5 import QtWidgets
from . import utils
from . import gui
@@ -13,12 +14,27 @@ VERSION = '0.1.4'

def main():
    args = utils.getOptions(VERSION)
    selectedFiles, selectedGroups = utils.getFiles()
    if not len(sys.argv) > 1:
        selec = utils.load_menu()
        if selec == 0:
            utils.init_flag();            
        elif selec == 10:
            utils.example_flag('basic');
        elif selec == 11:
            utils.example_flag('fits');
    else:
        print(args.init)
        if args.init:
            utils.init_flag();

        elif args.example != '':
            print(f"INFO:\t Create the {args.example} example files ")
            utils.example_flag(args.example);
        else:
            selectedFiles, selectedGroups = utils.getFiles()
            if len(selectedFiles) > 0:
                if args.list:
                    print(selectedFiles.filename)

                else:
                    print(f"INFO:\t {str(len(selectedFiles))} galaxies found in selected group(s).")
                    df = selectedFiles # utils.expand_df(selectedFiles)
+99 −4
Original line number Diff line number Diff line
import os
import re
import sys
import glob
import argparse
from pathlib import Path
import pandas as pd
import pkg_resources
from PyConsoleMenu import SelectorMenu


import warnings
from typing import Union
@@ -21,28 +24,37 @@ def getOptions(version):
    global VERSION

    parser = argparse.ArgumentParser(prog='GALAssify', description="GALAssify: Tool to manually classify galaxies.")

    parser.add_argument('--version', action='version', version='%(prog)s ' + version,
                        help="Prints software version and exit.\n")
    parser.add_argument('-p', '--path', type=dir_path, default='img',

    parser.add_argument('--init',action='store_true',help='Generate a basic config file, and the basic folder structure.')

    parser.add_argument('--example', type=example_type, default='', help='Run a galassify (basic or fits) example.')
    
    parser.add_argument('-p', '--path', type=dir_path, default=getPackageResource('img'),
                        help="Path to image files.\n")
    parser.add_argument('-c', '--config', type=dir_file, default='config',
    
    parser.add_argument('-c', '--config', type=dir_file, default=getPackageResource('config'),
                        help="Config json file to load.\n")
    
    #parser.add_argument('-f', '--filename', nargs='+',
    #                    required=not('-p' in sys.argv
    #                    or '--path' in sys.argv
    #                    or '--version' in sys.argv), type=dir_file,
    #                    help="Image or list to classify. Not required if path or path + group are given.\n")

    parser.add_argument('-s', '--savefile',
                        #required=not('--version' in sys.argv),
                        default='output.csv',
                        help="CSV file to load and export changes. If does not exists, a new one is created.\n")
    parser.add_argument("-l", "--list", action="store_true",
                        help="List selected files only and exit.\n")
    parser.add_argument('-i', '--inputfile', default='galaxies.csv', type=dir_file,
    
    parser.add_argument('-i', '--inputfile', default=getPackageResource('files/galaxies.csv'), type=dir_file,
                        help="""Galaxy database file in *.csv format.
                        Minimum required columns: ['galaxy'].
                        Recomended columns: ['group', 'galaxy', 'ra', 'dec',  'filename' and/or 'fits']""")
    
    parser.add_argument('group', metavar='GROUP', nargs='*',
                        help="Group number. Selects images with name format: img_<group>_*.png\n")

@@ -51,6 +63,80 @@ def getOptions(version):
    return args


def load_menu():    
    
    global select_option
    select_option = 3

    options = ["INIT (--init):\t Generate a basic config file, and the basic folder structure.", 
                "EXAMPLE (--example):\t Generate a files whit a galassify example", 
                "EXIT"]
    menu = SelectorMenu(options, title='GALAssify: A tool to manually classify galaxies.')
    ans = menu.input()
    if ans.index==0:
        print(f"INFO:\t Input example files was created")
        select_option = 0
        #return(0)
    elif ans.index==1:
        options_2 = ["BASIC (--example basic):\t Load the images example", 
                    "FITS (--example fits):\t Load the images fits example", 
                    "BACK"]
        menu_2 = SelectorMenu(options_2, title='GALAssify Example: Generate a files whit a galassify example')
        ans_2 = menu_2.input()
        if (ans_2.index==0):
            select_option = 10;
            #return(10)
        elif (ans_2.index==1):
            select_option = 11;
            #return(11)
        else:
            load_menu()
    return select_option

def init_flag():
    print(f"INFO:\t Input example files was created")
    try:
        os.system("mkdir files")
        os.system('cd files; echo "group,galaxy,ra,dec,filename" >> galaxies.csv')
        os.system('cd files; echo "group,galaxy,ra,dec,filename,fits" >> galaxies_fits.csv')
        os.system('cd files; echo "group,galaxy,filename,morphology,large,tiny,faceon,edgeon,star,calibration,recentre,duplicated,member,hiiregion,yes,no,comment" >> output.csv')
        os.system('cd files; echo "group,galaxy,filename,fits,fits_coords,morphology,large,tiny,faceon,edgeon,star,calibration,recentre,duplicated,member,hiiregion,yes,no,comment" >> output_fits.csv')
        os.system("mkdir img")
        os.system("cd img; mkdir fits; mkdir nog")
    except:
        pass
    print(f"RUN:\t 'galassify -i files/galaxies.csv -s files/output.csv -p img/' or 'galassify -i files/galaxies_fits.csv -s files/output_fits.csv -p img/'")

def example_flag(type_example):
    if type_example == 'basic':
        try:
            os.system("mkdir files")
            os.system('cd files; echo "group,galaxy,filename,morphology,large,tiny,faceon,edgeon,star,calibration,recentre,duplicated,member,hiiregion,yes,no,comment" >> output.csv')
            os.system(f"cp '{getPackageResource('files/galaxies.csv')}' files/galaxies.csv")
            os.system("mkdir img")
            content=glob.glob(f"{getPackageResource('img/')}")
            content = [f for f in os.listdir(f"{getPackageResource('img/')}") if re.match(r'.*\.jpeg', f)]
            for element in content:
                elemet_dir = getPackageResource('img/'+element)
                os.system(f"cp '{elemet_dir}' img/{element}")
        except:
            pass
        print(f"RUN:\t galassify -i files/galaxies.csv -s files/output.csv -p img/ ")
    else:
        try:
            os.system("mkdir files")
            os.system('cd files; echo "group,galaxy,filename,fits,fits_coords,morphology,large,tiny,faceon,edgeon,star,calibration,recentre,duplicated,member,hiiregion,yes,no,comment" >> output_fits.csv')
            os.system(f"cp '{getPackageResource('files/galaxies_fits.csv')}' files/galaxies_fits.csv")
            os.system("mkdir img; cd img; mkdir fits")            
            content=glob.glob(f"{getPackageResource('img/fits/')}")
            content = [f for f in os.listdir(f"{getPackageResource('img/fits/')}") if re.match(r'.*\.fits', f)]
            for element in content:
                elemet_dir = getPackageResource('img/fits/'+element)
                os.system(f"cp '{elemet_dir}' img/fits/{element}")
        except:
            pass
        print(f"RUN:\t galassify -i files/galaxies_fits.csv -s files/output_fits.csv -p img/fits/ ")

def getVersion():
    global VERSION
    return VERSION
@@ -116,6 +202,15 @@ def getFiles():
    #    files = []
    return selectedFiles, selectedGroups

def example_type(type_text):
    if type_text == 'basic':
        return(type_text)
    elif type_text == 'fits':
        return(type_text)
    elif type_text == '':
        return(type_text)
    else:
        raise argparse.ArgumentTypeError(f"readable_example_type: {type_text} is not a valid example type.")

def dir_path(path):
    d = Path(path)