Exemplo n.º 1
0
def set_inclusion():
    conectarBd()
    papers = Paper.objects()[21:50]
    print(len(papers))
    for paper in papers:
        paper.inclusion1 = True
        paper.inclusion2 = True
        paper.citationsWanted = False
        # print(paper.doi)
        paper.save()
def mostrarPantallaCuracionBibliografica():
    conectarBd()
    papers = Paper.objects(
        Q(inclusion1=True) & Q(inclusion2=True)
        & Q(bibliographyIsLoaded__exists=False))
    count_papers = len(papers)
    if count_papers > 0:
        st.success("Se encontraron disponibles " + str(count_papers) +
                   " papers para cargar.")
        st.markdown("## ¿Desea realizar la carga ahora?")
        cargar = st.button("Cargar")
        if cargar:
            automatizarCarga(papers)
    else:
        st.error("No hay papers disponibles para cargar en este momento.")
def obtenerCitaciones():
    conectarBd()
    papers = Paper.objects(
        Q(inclusion1=True) & Q(inclusion2=True)
        & Q(citationsSearched__exists=False))
    count_papers = len(papers)
    if count_papers > 0:
        st.success("Se encontraron disponibles " + str(count_papers) +
                   " papers de los cuales obtener citaciones.")
        st.markdown("## ¿Desea buscar las citaciones ahora?")
        buscar = st.button("Buscar")
        if buscar:
            st.error("Este módulo aún se encuentra en desarrollo.")
            # all_dois = set()
            # cont = len(papers)
            # #for paper in papers:
            # dois = get_citations(papers)
            # st.success("Se encontraron "+str(len(dois))+" páginas de citaciones")
            # #st.markdown(all_dois)
            # #Dar posibilidad de descargar la lista en un archivo.
    else:
        st.error("No hay papers disponibles para buscar citaciones.")
Exemplo n.º 4
0
def verificarUsuario():
    if os.path.exists("user_selected"):
        user = f = open("user_selected", "r").read()
        st.sidebar.write("Usuario: " + user)
        if st.sidebar.button("Cambiar Usuario"):
            os.remove("user_selected")
        return user
    else:
        if os.path.exists("user_session"):
            with open('user_session', 'rb') as fp:
                opciones = pickle.load(fp)
        else:
            opciones = op.opciones.copy()
            conectarBd()
            with st.spinner("Conectando con la Base de Datos..."):
                for paper in Paper.objects():
                    if paper.user_inclusion1 is not None:
                        opciones["users"].add(paper.user_inclusion1)
                        if paper.user_inclusion2 is not None:
                            opciones["users"].add(paper.user_inclusion2)
                with open('user_session', 'wb') as fp:
                    pickle.dump(opciones, fp, protocol=pickle.HIGHEST_PROTOCOL)
        options = list(opciones["users"])
        options.append("Otro")
        options = ["Seleccionar..."] + options
        st.markdown("#### Usuario")
        user = st.selectbox(
            label=
            "Seleccione su nombre de entre la lista de usuarios. Si usted no se encuentra en la lista elija 'Otro' y carguelo manualmente por única vez.",
            options=options)
        if user == "Otro":
            user = st.text_input(
                label="Ingrese un usuario para agregar a la base de datos.")
        if st.button("Guardar Usuario"):
            f = open("user_selected", "w")
            f.write(user)
            f.close()
            os.remove("user_session")
            return user
Exemplo n.º 5
0
def mostrarSeccionCarga():
    conectarBd()
    uploaded_file = st.file_uploader("Archivo Bibtex con la información de los papers")
    before = len(Paper.objects)
    if uploaded_file is not None:
        # To read file as bytes:
        bytes_data = uploaded_file.read()
        data = bytes_data.decode("utf-8")
        bib_data = parse_string(data, 'bibtex')
        notdoi = []
        papers = []
        with st.spinner("Preprocesando el archivo para la carga..."):
            total = sum(1 for entry in bib_data.entries.values())
        st.success("Se iniciará la carga de "+str(total)+" papers a la base de datos.")
        my_bar = st.progress(.0)
        loaded = 0
        for entry in bib_data.entries.values():
            fields = entry.fields
            title = fields["title"].replace('{', '').replace('}', '')
            doi = fields.get("doi")
            isOnlyReference = False
            loaded+=1
            my_bar.progress(loaded/total)
            if doi is None:
                notdoi.append(title)
                continue
            abstract = fields.get("abstract","")
            paper = Paper(title = title, doi = doi , abstract = abstract, isOnlyReference = isOnlyReference).save()
            papers.append(paper)

        after = len(Paper.objects)
        st.success("Se ingresaron "+ str(after-before) + " papers a la base de datos")
        st.write([x.title for x in papers])
        if len(notdoi):
            st.error ("No se pudo ingresar " + str(len(notdoi)) + " debido a que no se conocía su doi")
            st.write(notdoi)
Exemplo n.º 6
0
def get_papers():
    conectarBd()
    papers = Paper.objects(
        Q(inclusion1=True) & Q(inclusion2=True)
        & Q(citationsWanted__exists=False))
    return papers
def mostrarSeccionExtracción(user):
    conectarBd()

    col1, col2 = st.beta_columns(2)
    opciones = buscarOpcionesCargadas()
    seccion = st.sidebar.radio(label="Secciones",
                               options=[
                                   "Seleccionar artículo",
                                   "Características de la investigación",
                                   "Tareas visuales"
                               ])
    if st.sidebar.button("Enviar"): guardarExtraccion()
    if st.sidebar.button("Cargar otro paper"):
        reiniciarCarga()

    if seccion == "Seleccionar artículo":
        if os.path.exists("paper_selected"):
            st.markdown(
                "#### Ya se ha seleccionado el paper cuyos datos extraer")
            with open('paper_selected', 'r') as fp:
                data = json.load(fp)
                st.json(data)
            if st.button("Seleccionar otro paper"):
                os.remove("paper_selected")
        else:
            st.markdown("## Seleccionar artículo  para extraer datos.")
            doi = st.text_input(
                label=
                "Ingrese el doi del artículo en su formato url. Por ejemplo: doi.org/10.1109/CVPR.2016.609"
            )
            if st.button(label="Buscar"):
                paper = None
                try:
                    badflag = False
                    paper = Paper.objects.get(doi=doi)
                    st.success("Se encontró un paper con título:\n" + '**"' +
                               paper.title + '"**')
                    goals = paper.research_goal
                    if goals:
                        st.error(
                            "El paper encontrado tiene cargadas el objetivo de la investigación"
                        )
                        st.write("Objetivo de la investigación: ")
                        for goal in goals:
                            st.write(paper.research_goal)
                        badflag = True

                    if paper.practical_contibution is not None:
                        st.error(
                            "El paper encontrado tiene cargadas Aportes Prácticos de la investigación"
                        )
                        st.write("Aporte práctico: " +
                                 paper.practical_contibution)
                        badflag = True

                    if paper.viticultural_aspects is not None:
                        st.error(
                            "El paper encontrado tiene cargadas Aspectos Vitícolas de la investigación"
                        )
                        st.write("Aspectos Vitícolas: " +
                                 paper.viticultural_aspects)
                        badflag = True
                    tasks = paper.visual_tasks
                    if tasks:
                        st.error(
                            "El paper encontrado tiene cargadas las tareas visuales"
                        )
                        visual_to_show = []
                        for task in paper.visual_tasks:
                            visual_to_show.append(json.loads(task.to_json()))
                        st.write(visual_to_show)
                        badflag = True
                    if not badflag:
                        st.success(
                            "El paper seleccionado esta en condiciones para llevar adelante la carga\n"
                        )
                        with open('paper_selected', 'w') as fp:
                            json.dump(paper.to_json(), fp)
                        st.write(
                            "Continue con la extracción y los datos ingresados se asociarán a este paper."
                        )
                        st.json(paper.to_json())
                    else:
                        st.error(
                            "El paper seleccionado NO esta en condiciones para llevar adelante la carga. Contactese con el administrador de su Base de Datos.\n"
                        )
                except Paper.MultipleObjectsReturned:
                    st.write(
                        "Al parecer, hay más de un paper con el doi ingresado."
                    )
                    papers = Paper.objects(doi=doi)
                    names = []
                    for paper in papers:
                        names.append(paper.title)
                    name = st.selectbox(
                        label="Elija el que usted quiera analizar",
                        options=names)
                    paper = Paper.objects(doi=doi, names=name)[0]
                except Paper.DoesNotExist:
                    st.error(
                        "No existe ningun paper con el doi ingresado en la base de datos."
                    )

    if seccion == "Tareas visuales":
        if os.path.exists("tareas_def"):
            st.markdown("#### Ya se han cargado los datos de esta sección")
            with open('tareas_def', 'r') as fp:
                tasks = json.load(fp)
            st.json(tasks)
            if st.button("Cargar más tareas"):
                os.remove("tareas_def")
            if st.button("Eliminar datos cargados"):
                os.remove("tareas")
                os.remove("tareas_def")
        else:
            st.markdown("## Extraer datos del paper seleccionado.")
            st.markdown("### Tareas Visuales de alto Nivel")
            st.markdown(
                "Los siguientes campos deberán completarse para **cada una** de las tareas visuales que se llevan a cabo mediante CV en el paper."
            )
            st.markdown(
                "Una vez que se hayan completado los campos necesarios, presione **'Cargar Tarea'** para salvar los datos y pasar a la siguiente tarea visual (si es que hay más de una)."
            )

            col1, col2 = st.beta_columns(2)
            with col1:
                st.markdown("#### Nombre de la tarea")
                options = list(opciones["visual_tasks_list"])
                options.append("Otra")
                task = st.selectbox(
                    label=
                    "Seleccione una tarea visual de alto nivel. Si la que se quiere ingresar no se encuentra en la lista elija 'Otra' y carguela manualmente",
                    options=options)
                if task == "Otra":
                    task = st.text_input(
                        label=
                        "Ingrese una tarea visual para agregar a la base de datos."
                    )
                sub = st.radio("Subsecciones", [
                    "Información Vitícola", "Dataset", "Features", "Algoritmos"
                ])
                if st.button("1) Agregar tarea visual a la lista"):
                    cargarTarea(task)
                mostrarTareas()
                if st.button("2) Guardar lista de tareas"):
                    copyfile("tareas", "tareas_def")
                    time.sleep(1)
                    st.success("¡Se han guardado los datos de esta sección! ")
                    with open('tareas_def', 'r') as fp:
                        tasks = json.load(fp)
                    st.json(tasks.to_json())
                    st.write(
                        "Seguí completando los campos de otras secciones o presioná 'Enviar' en la barra lateral si ya completaste todas las secciones."
                    )
                if st.button("Eliminar tareas visuales cargadas"):
                    os.remove("tareas")
                    st.success(
                        "¡Se han eliminado las tareas visuales cargadas hasta el momento! "
                    )

            with col2:
                if sub == "Información Vitícola":
                    if os.path.exists("viticulture"):
                        st.markdown(
                            "#### Ya se han cargado los datos de esta sección")
                        with open('viticulture', 'r') as fp:
                            data = json.load(fp)
                        st.json(data)
                        if st.button("Eliminar datos cargados"):
                            os.remove("viticulture")
                    else:
                        st.markdown("#### Objetos Vitícolas")
                        options = list(opciones["viticultural_objects_list"])
                        options.append("Otros")
                        objs = st.multiselect(
                            label=
                            "Seleccione todos los objetos vitícolas sobre los que se aplica la tarea visual de alto nivel. Si algún objeto no se encuentra en la lista elija 'Otros' y carguelo manualmente",
                            options=options)
                        if "Otros" in objs:
                            objs2 = st.text_input(
                                label=
                                "Ingrese objetos vitícolas para agregar a la base de datos separados por comas"
                            )
                        st.markdown("#### Variables Vitícolas")
                        options = list(opciones["viticultural_variable_list"])
                        options.append("Otras")
                        vars = st.multiselect(
                            label=
                            "Seleccione todas las variables vitícolas que se midieron mediante esta tarea visual. Si alguna variable vitícola no se encuentra en la lista elija 'Otras' y carguela manualmente",
                            options=options)
                        if "Otras" in vars:
                            vars2 = st.text_input(
                                label=
                                "Ingrese variables vitícolas para agregar a la base de datos separados por comas"
                            )
                        var_details = st.text_area(
                            label=
                            "Ingrese algun comentario destacable sobre la manera en que se aplicó esta tarea visual a la medición de la variable en caso de ser necesario."
                        )
                        monitor = st.checkbox(
                            "¿Se monitoriza la medición de estas variables a lo largo del tiempo?"
                        )
                        guardar = st.button("Guardar")
                        if guardar:
                            if "Otras" in vars:
                                if "Otros" in objs:
                                    cargarInfoViticola(objs, vars,
                                                       var_details, monitor,
                                                       objs2.split(','),
                                                       vars2.split(','))
                                else:
                                    cargarInfoViticola(objs,
                                                       vars,
                                                       var_details,
                                                       monitor,
                                                       vars2=vars2.split(','))
                            else:
                                if "Otros" in objs:
                                    cargarInfoViticola(objs, vars,
                                                       var_details, monitor,
                                                       objs2.split(','))
                                else:
                                    cargarInfoViticola(objs, vars, var_details,
                                                       monitor)

                if sub == "Dataset":
                    st.markdown("#### Dataset")
                    if os.path.exists("dataset"):
                        st.markdown(
                            "#### Ya se han cargado los datos de esta sección")
                        with open('dataset', 'r') as fp:
                            data = json.load(fp)
                        st.json(data)
                        if st.button("Eliminar datos cargados"):
                            os.remove("dataset")
                    else:
                        bench = st.checkbox(
                            "¿El dataset utilizado es de benchmarking?")
                        if not bench:
                            format = st.selectbox(
                                label=
                                "Seleccione los elementos de los que se compone el dataset",
                                options=list(opciones["dataset_format_list"]))

                            options = list(
                                opciones["electromagnetic_spectrum_list"])
                            options.append("Otra")
                            electromagnetic = st.selectbox(
                                label=
                                "Indique qué sección del espectro electromagnetico se capturó en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente",
                                options=options)
                            if electromagnetic == "Otra":
                                electromagnetic = st.text_input(
                                    label=
                                    "Ingrese una sección del espectro electromagnetico para agregar a la base de datos."
                                )

                            options = list(opciones["camera_types_list"])
                            options.append("Otra")
                            camera = st.selectbox(
                                label=
                                "Indique con qué tipo/arreglo de cámara se capturó el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente",
                                options=options)
                            if camera == "Otra":
                                camera = st.text_input(
                                    label=
                                    "Ingrese una sección del espectro electromagnetico para agregar a la base de datos."
                                )

                            camera_details = st.text_area(
                                label=
                                "Ingrese algun comentario destacable sobre el hardware utilizado en caso de que lo crea conveniente"
                            )

                            options = list(
                                opciones["data_capture_conditions_list"])
                            options.append("Otra")
                            condition = st.selectbox(
                                label=
                                "Seleccione las condiciones en que se capturó el dataset. Si la que se quiere ingresar no se encuentra en la lista elija 'Otra' y carguela manualmente",
                                options=options)
                            if condition == "Otra":
                                condition = st.text_input(
                                    label=
                                    "Ingrese una condición de captura nueva para agregar a la base de datos."
                                )

                            options = list(opciones["varietal_list"])
                            options.append("Otros")
                            # varietal = st.st.multiselect(label="Seleccione el/los varietales correspondientes observados en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente",options=options)
                            # if varietal == "Otra":
                            #     varietal = st.text_input(label="Ingrese una condición de captura nueva para agregar a la base de datos.")
                            varietales = st.multiselect(
                                label=
                                "Seleccione el/los varietales correspondientes observados en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente",
                                options=options)
                            if "Otros" in varietales:
                                varietales2 = st.text_input(
                                    label=
                                    "Ingrese varietales para agregar a la base de datos, separados por comas"
                                )

                            options = list(
                                opciones["irrigation_conduction_list"])
                            options.append("Otros")
                            # irrigation = st.multiselect(label="Seleccione el/los sistemas de conducción observados en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente",options=options)
                            # if irrigation == "Otra":
                            #     irrigation = st.text_input(label="Ingrese una condición de captura nueva para agregar a la base de datos.")
                            irrigations = st.multiselect(
                                label=
                                "Seleccione el/los sistemas de conducción observados en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente",
                                options=options)
                            if "Otros" in irrigations:
                                irrigations2 = st.text_input(
                                    label=
                                    "Ingrese sistemas de conducción para agregar a la base de datos, separados por comas"
                                )

                            dataset_details = st.text_area(
                                label=
                                "Ingrese algun comentario destacable sobre la captura del dataset en caso de ser necesario."
                            )
                        link = st.checkbox("¿Se encuentra disponible?")
                        if link:
                            link = st.text_input(
                                label="Ingrese la url para acceder al dataset."
                            )
                        if st.button("Guardar"):
                            if bench:  #objs=varietales #vars=irrigations
                                #cargarDataset(bench,link)
                                if "Otros" in irrigations:
                                    if "Otros" in varietales:
                                        cargarDataset(
                                            bench,
                                            link,
                                            varietales,
                                            irrigations,
                                            varietales2=varietales2.split(','),
                                            irrigations2=irrigations2.split(
                                                ','))
                                        #cargarInfoViticola(objs,vars,var_details,monitor,varietales2.split(','),irrigations2.split(','))
                                    else:
                                        cargarDataset(
                                            bench,
                                            link,
                                            varietales,
                                            irrigations,
                                            irrigations2=irrigations2.split(
                                                ','))
                                        #cargarInfoViticola(objs,vars,var_details,monitor,irrigations2=irrigations2.split(','))
                                else:
                                    if "Otros" in varietales:
                                        cargarDataset(
                                            bench,
                                            link,
                                            varietales,
                                            irrigations,
                                            varietales2=varietales2.split(','))
                                        #cargarInfoViticola(objs,vars,var_details,monitor,varietales2.split(','))
                                    else:
                                        cargarDataset(bench, link, varietales,
                                                      irrigations)
                                        #cargarInfoViticola(objs,vars,var_details,monitor)

                            else:
                                #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details)
                                if "Otros" in irrigations:
                                    if "Otros" in varietales:
                                        cargarDataset(
                                            bench,
                                            link,
                                            varietales,
                                            irrigations,
                                            format,
                                            electromagnetic,
                                            camera,
                                            camera_details,
                                            condition,
                                            dataset_details,
                                            varietales2=varietales2.split(','),
                                            irrigations2=irrigations2.split(
                                                ','))
                                        #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details)
                                    else:
                                        cargarDataset(
                                            bench,
                                            link,
                                            varietales,
                                            irrigations,
                                            format,
                                            electromagnetic,
                                            camera,
                                            camera_details,
                                            condition,
                                            dataset_details,
                                            irrigations2=irrigations2.split(
                                                ','))
                                        #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details)
                                else:
                                    if "Otros" in varietales:
                                        cargarDataset(
                                            bench,
                                            link,
                                            varietales,
                                            irrigations,
                                            format,
                                            electromagnetic,
                                            camera,
                                            camera_details,
                                            condition,
                                            dataset_details,
                                            varietales2=varietales2.split(','))
                                        #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details)
                                    else:
                                        cargarDataset(bench, link, varietales,
                                                      irrigations, format,
                                                      electromagnetic, camera,
                                                      camera_details,
                                                      condition,
                                                      dataset_details)
                                        #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details)

                if sub == "Features":
                    if os.path.exists("features_def"):
                        st.markdown(
                            "#### Ya se han cargado los datos de esta sección")
                        feat = pd.read_csv('features_def')
                        st.dataframe(feat)
                        if st.button("Cargar más datos"):
                            os.remove("features_def")
                        if st.button("Eliminar datos cargados"):
                            os.remove("features")
                            os.remove("features_def")
                    else:
                        st.markdown("#### Features")
                        st.markdown(
                            "Las features son representaciones de los datos visuales crudos que son más propicias para una tarea informática y se obtienen a través de un proceso a menudo creativo. "
                        )
                        feature_type = st.selectbox(
                            "Elija un tipo de features a ingresar",
                            options=list(opciones["visual_features_types"]))
                        if st.checkbox(
                                "Ver más info sobre los tipos de features..."):
                            st.markdown("Existen 3 tipos:")
                            st.markdown(
                                "- **Classic hand-crafted features**: Estas features están diseñadas por expertos humanos tratando de mantener invariante una propiedad específica de los datos. Estas features son fácilmente interpretables y caracterizan aspectos fundamentales de las imágenes como el color, la textura y la forma.\n- **Features latentes** : Estas features consisten en representaciones  del objeto ocultas en un subespacio de dimensionalidad inferior al de los datos crudos y son encontradas automáticamente por algoritmos de optimización.\n- **Deep Features**: Estas features consisten en representaciones jerárquicas extraídas mediante una red neuronal multicapa. En este tipo de features, el conocimiento del experto se concentra en el diseño de la red que se encargará de aprender la mejor forma de representar los datos a medida que aprende a realizar la tarea para la cual los necesita."
                            )

                        if feature_type == "Handcrafted":
                            options = list(
                                opciones["visual_features_handcrafted_list"])
                            options.append("Otras")
                            features_hand = st.multiselect(
                                label=
                                "Seleccione todas las handcrafted features utilizadas para esta tarea visual de alto nivel. Si alguna feature de este estilo no se encuentra en la lista elija 'Otras' y carguelas manualmente",
                                options=options)
                            if "Otras" in features_hand:
                                features_hand2 = st.text_input(
                                    label=
                                    "Ingrese handcrafted features para agregar a la base de datos **separadas por comas**"
                                )
                            if st.button(
                                    "1) Agregar Handcrafted Features a la lista"
                            ):
                                if "Otras" in features_hand:
                                    cargarFeatures("Handcrafted",
                                                   features_hand,
                                                   features_hand2)
                                else:
                                    cargarFeatures("Handcrafted",
                                                   features_hand)
                        elif feature_type == "Latent":
                            options = list(
                                opciones["visual_features_latent_list"])
                            options.append("Otras")
                            features_lat = st.multiselect(
                                label=
                                "Seleccione todas las latent features utilizadas para esta tarea visual de alto nivel. Si alguna feature de este estilo no se encuentra en la lista elija 'Otras' y carguelas manualmente",
                                options=options)
                            if "Otras" in features_lat:
                                features_lat2 = st.text_input(
                                    label=
                                    "Ingrese latent features para agregar a la base de datos **separadas por comas**"
                                )
                            if st.button(
                                    "1) Agregar Latent Features a la lista"):
                                if "Otras" in features_lat:
                                    cargarFeatures("Latent", features_lat,
                                                   features_lat2)
                                else:
                                    cargarFeatures("Latent", features_lat)
                        elif feature_type == "Deep":
                            options = list(
                                opciones["visual_features_deep_list"])
                            options.append("Otras")
                            features_deep = st.multiselect(
                                label=
                                "Seleccione todas las deep features utilizadas para esta tarea visual de alto nivel. Si alguna feature de este estilo no se encuentra en la lista elija 'Otras' y carguelas manualmente",
                                options=options)
                            if "Otras" in features_deep:
                                features_deep2 = st.text_input(
                                    label=
                                    "Ingrese latent features para agregar a la base de datos separadas por comas"
                                )
                            if st.button(
                                    "1) Agregar Deep Features a la lista"):
                                if "Otras" in features_deep:
                                    cargarFeatures("Deep", features_deep,
                                                   features_deep2)
                                else:
                                    cargarFeatures("Deep", features_deep)

                        if st.button("2) Guardar lista completa"):
                            copyfile("features", "features_def")
                            st.success(
                                "¡Se han guardado los datos de esta sección! ")
                            data = pd.read_csv('features_def')
                            st.dataframe(data)
                            st.write(
                                "Seguí completando los campos de otras secciones o presioná 'Enviar' en la barra lateral si ya completaste todas las secciones."
                            )

                        if st.button("Eliminar afiliaciones cargadas"):
                            os.remove("features")
                            st.success(
                                "¡Se han eliminado las afiliaciones cargadas hasta el momento! "
                            )

                if sub == "Algoritmos":
                    if os.path.exists("algorithms"):
                        st.markdown(
                            "#### Ya se han cargado los datos de esta sección")
                        with open('algorithms', 'r') as fp:
                            data = json.load(fp)
                        st.json(data)
                        if st.button("Eliminar datos cargados"):
                            os.remove("algorithms")
                    else:
                        st.markdown("#### Algoritmos")
                        options = list(opciones["algorithms_list"])
                        options.append("Otros")
                        algs = st.multiselect(
                            label=
                            "Seleccione todos los algoritmos de machine learning que se usaron para esta tarea visual. Si algún algoritmo no se encuentra en la lista elija 'Otros' y carguelo manualmente",
                            options=options)
                        if "Otros" in algs:
                            algs2 = st.text_input(
                                label=
                                "Ingrese algoritmos de machine learning para agregar a la base de datos separados por comas"
                            )
                        guardar = st.button("Guardar")
                        if guardar and not "Otros" in algs:
                            cargarAlgoritmos(algs)
                        if guardar and "Otros" in algs:
                            cargarAlgoritmos(algs, algs2.split(','))

    if seccion == "Características de la investigación":
        if os.path.exists("caracteristicas"):
            st.markdown("#### Ya se han cargado los datos de esta sección")
            with open('caracteristicas', 'r') as fp:
                data = json.load(fp)
            st.json(data)
            if st.button("Eliminar datos cargados"):
                os.remove("caracteristicas")
        else:
            st.markdown("## Extraer datos del paper seleccionado.")
            st.markdown("#### Objetivo de la investigación")
            options = list(opciones["research_goal_list"])
            options.append("Otros")
            goals = st.multiselect(
                label=
                "Seleccione los objetivos que persiguieron los autores con esta investigación. Si ninguno de los objetivos de la lista lo convence, elija 'Otro' y carguelo manualmente",
                options=options)
            if "Otros" in goals:
                goals2 = st.text_input(
                    label=
                    "Ingrese objetivos para agregar a la base de datos separados por comas."
                )

            st.markdown("#### Aporte práctico")
            options = list(opciones["practical_contibution_list"])
            options.append("Otro")
            practical = st.selectbox(
                label=
                "Seleccione el tipo de contribución práctica de este paper. Si alguna contribución práctica no se encuentra en la lista elija 'Otras' y carguela manualmente",
                options=options)
            if practical == "Otro":
                practical = st.text_input(
                    label=
                    "Ingrese una contribución práctica para agregar a la base de datos."
                )

            st.markdown("#### Aspectos Vitícolas")
            options = list(opciones["viticultural_aspects_list"])
            options.append("Otro")
            aspects = st.selectbox(
                label=
                "Seleccione los aspectos vitícolas que intenta resolver este paper. Si algun aspecto no se encuentra en la lista elija 'Otros' y carguela manualmente",
                options=options)
            if aspects == "Otro":
                aspects = st.text_input(
                    label=
                    "Ingrese un aspecto vitícola para agregar a la base de datos."
                )

            guardar = st.button("Guardar")
            if guardar and not "Otros" in goals:
                cargarCaracterísticas(goals, practical, aspects)
            if guardar and "Otros" in goals:
                cargarCaracterísticas(goals, practical, aspects,
                                      goals2.split(','))
def mostrarPantallaSeleccionEstudios(
        user):  #FALTAN CONDICIONES DE REFERENCIAS Y LOADBEFORE
    if user != "Seleccionar..." and user is not None:
        conectarBd()
        if st.checkbox("Ver avance"):
            mostrarAvance(True)
        if os.path.exists("inclusion"):
            try:
                with open('inclusion', 'r') as fp:
                    paper_dict = json.loads(json.load(fp))
                    paper = Paper.objects.get(doi=paper_dict["_id"])
                    if paper.inclusion1 is None: number = 1
                    else:
                        if paper.user_inclusion1 == user or paper.inclusion2 is not None:
                            os.remove("inclusion")
                            paper, number = elegirPaper(user)
                        with open('inclusion', 'w') as fp:
                            json.dump(paper.to_json(), fp)
                        number = 2
            except:  #el archivo inclusion está corrupto y se debe eliminar
                os.remove("inclusion")
                paper = None
        else:
            paper, number = elegirPaper(user)
            if paper is not None:
                with open('inclusion', 'w') as fp:
                    json.dump(paper.to_json(), fp)
        if paper is None:
            st.error(
                "No existen más papers en la base de datos que usted pueda verificar sin introducir un sesgo en el review."
            )
        else:
            show_warning = False
            if paper.on_revision is not None:
                st.success(
                    "Este paper fue recuperado de una sesión incompleta anterior."
                )  #muestra mensaje de exito
            else:
                show_warning = True
                paper.on_revision = user
                paper.save()
            st.write(
                "Lea el título y abstract del siguiente artículo y marque si cumple alguna de las siguientes condiciones."
            )
            if paper.title is not None:
                st.markdown("#### Título")
                st.write(paper.title)
            if paper.abstract is not None:
                st.markdown("#### Abstract")
                st.write(paper.abstract)
            if paper.doi is not None:
                st.markdown("#### Doi")
                st.markdown("[" + paper.doi + "](https://doi.org/" +
                            paper.doi + ")")
            if st.button("Cambiar paper"):
                del paper.on_revision
                paper.save()
                os.remove("inclusion")
            st.markdown("#### Criterios")
            col1, col2 = st.beta_columns(2)
            with col1:
                st.markdown("##### Inclusión")
                ci1 = st.checkbox(
                    "1. El estudio NO utiliza algún proceso de extracción de información automatizado sobre imágenes de cualquier región del espectro electromagnético en alguna de sus etapas."
                )
                ci2 = st.checkbox(
                    "2. El estudio NO se enfoca en la medición de variables visuales de interés vitícola. Entendemos por esto a toda información necesaria para la toma de decisiones agronómica que se manifiesta de forma visual en alguna parte de la planta de vid."
                )
            with col2:
                st.markdown("##### Exclusión")
                ce1 = st.checkbox(
                    "1.  El estudio utiliza como entrada imágenes satelitales."
                )
                ce2 = st.checkbox(
                    "2.  El algoritmo opera sobre información electromagnética que NO viene en forma de imagen (entiéndase representación visual bidimensional a partir de una matriz numérica)."
                )
                ce3 = st.checkbox(
                    "3.  El paper está orientado a automatismo de la gestión, NO a medición de variables."
                )
                ce4 = st.checkbox("4.  El estudio NO está escrito en Inglés.")
                ce5 = st.checkbox(
                    "5.  La publicación del estudio NO se sometió a un proceso de revisión por pares."
                )
            st.markdown("#### Comentarios")
            comments = st.text_area(
                "En el caso de que tenga alguna duda con la decisión qué tomó, vuelquela en el siguiente apartado para que sea tenida en cuenta en la próxima reunión. (Si no hay texto se asume que se ha tomado la decision con plena confidencia)"
            )  #text area para colocar el comentario
            guardar = st.button("Guardar")
            if show_warning:
                st.warning(
                    "El paper a revisar ha cambiado. \n" +
                    "Desplácese hacia arriba para analizar su contenido. \n" +
                    "Asegúrese de no presionar el botón 'Guardar' hasta modificar los checkboxes de acuerdo a su revisión."
                )
            if guardar:
                del paper.on_revision
                if ci1 or ci2 or ce1 or ce2 or ce3 or ce4 or ce5:
                    criteria = []
                    if ci1: criteria.append("CI1")
                    if ci2: criteria.append("CI2")
                    if ce1: criteria.append("CE1")
                    if ce2: criteria.append("CE2")
                    if ce3: criteria.append("CE3")
                    if ce4: criteria.append("CE4")
                    if ce5: criteria.append("CE5")
                    if number == 1:
                        paper.inclusion1 = False
                        paper.user_inclusion1 = user
                        paper.criteria_inclusion1 = criteria
                        if comments is not None: paper.comments1 = comments
                    if number == 2:
                        paper.inclusion2 = False
                        paper.user_inclusion2 = user
                        paper.criteria_inclusion2 = criteria
                        if comments is not None: paper.comments2 = comments
                    mess = "Se ha guardado su decisión de excluir el artículo " + paper.title + " ya que hay conflictos con los siguientes criterios: "
                    for cr in criteria:
                        mess = mess + "\n " + cr
                    st.success(mess)
                else:
                    if number == 1:
                        paper.inclusion1 = True
                        paper.user_inclusion1 = user
                        if comments is not None: paper.comments1 = comments
                    if number == 2:
                        paper.inclusion2 = True
                        paper.user_inclusion2 = user
                        if comments is not None: paper.comments2 = comments
                    st.success(
                        "Se ha guardado su decisión de incluir el artículo " +
                        paper.title)
                paper.save()
                if st.button("Revisar otro paper"):
                    del paper.on_revision
                    paper.save()
                    os.remove("inclusion")
                st.json(paper.to_json())