CycIF / Step1_Setup.py
KashyapiNagaHarshitha's picture
Rename Setup.py to Step1_Setup.py
402744b verified
raw
history blame contribute delete
No virus
7.22 kB
#!/usr/bin/env python
# coding: utf-8
import panel as pn
import os
import pandas as pd
import json
pn.extension()
# Global variables to store the input values
input_path = ""
set_path = ""
ls_samples = []
metadata_files = []
selected_metadata_files = []
# Define a callback to store values when the button is clicked
def store_values(event):
global input_path, set_path, ls_samples, metadata_files
input_path = file_input.value
set_path = set_name.value
# Update the global variables
global base_dir, input_data_dir, output_data_dir, output_images_dir, metadata_dir, metadata_images_dir
present_dir = os.path.dirname(os.path.realpath(__file__))
input_path = os.path.join(present_dir, input_path)
base_dir = input_path
project_name = set_path
step_suffix = 'qc_eda'
previous_step_suffix_long = ""
input_data_dir = os.path.join(base_dir, project_name + "_data")
output_data_dir = os.path.join(base_dir, project_name + "_" + step_suffix)
output_images_dir = os.path.join(output_data_dir, "images")
metadata_dir = os.path.join(base_dir, project_name + "_metadata")
metadata_images_dir = os.path.join(metadata_dir, "images")
# Create directories if they don't already exist
for d in [base_dir, input_data_dir, output_data_dir, output_images_dir, metadata_dir, metadata_images_dir]:
if not os.path.exists(d):
print(f"Creation of the {d} directory...")
os.makedirs(d)
else:
print(f"The {d} directory already exists!")
# os.chdir(input_data_dir) # Avoid changing the working directory
# Update JSON with directory settings
with open('stored_variables.json', 'r') as file:
data = json.load(file)
data.update({'base_dir': base_dir, 'set_path': set_path})
with open('stored_variables.json', 'w') as file:
json.dump(data, file, indent=4)
# Create a DataFrame with the directory paths
data = {
'Directory': ['Base Directory', 'Input Data Directory', 'Output Data Directory', 'Output Images Directory', 'Metadata Directory', 'Metadata Images Directory'],
'Path': [base_dir, input_data_dir, output_data_dir, output_images_dir, metadata_dir, metadata_images_dir]
}
df = pd.DataFrame(data)
# List CSV files in the input_data_dir
ls_samples = [sample for sample in os.listdir(input_data_dir) if sample.endswith(".csv")]
print(f"The following CSV files were detected:\n\n{ls_samples}\n\nin {input_data_dir} directory.")
# List CSV files in the metadata_dir
metadata_files = [file for file in os.listdir(metadata_dir) if file.endswith(".tif.csv")]
print(f"The following metadata CSV files were detected:\n\n{metadata_files}\n\nin {metadata_dir} directory.")
# Update the CheckBoxGroup options
checkbox_group.options = ls_samples
metadata_checkbox_group.options = metadata_files
# Assuming csv_files should be a DataFrame constructed from ls_samples
csv_files = pd.DataFrame({'CSV Files': ls_samples})
md_files = [file for file in os.listdir(metadata_dir) if file.endswith(".tif.csv")]
print(md_files)
metadata_files_df = pd.DataFrame({'Selected_Metadata_files' : [file for file in os.listdir(metadata_dir) if file.endswith(".tif.csv")]})
print(metadata_files_df)
# Update the output panes
output_pane_1.object = f"**File Path:** {input_path}\n\n**Set Name:** {set_path}"
output_pane_2.object = df.to_html(index=False)
output_pane_3.object = csv_files.to_html(index=False)
output_pane_4.object = metadata_files_df.to_html(index=False)
# Define a callback to save the selected CSV files when the button is clicked
def save_selected_files(event):
with open('stored_variables.json', 'r') as file:
data = json.load(file)
data['ls_samples'] = ls_samples
with open('stored_variables.json', 'w') as file:
json.dump(data, file, indent=4)
print("ls_samples updated in JSON file.")
# Define a callback to update the ls_samples list based on the selected options
def update_ls_samples(event):
global ls_samples
ls_samples = event.new
# Define a callback to update the metadata_files list based on the selected options
def update_metadata_files(event):
global metadata_files, selected_metadata_files
metadata_files = event.new
selected_metadata_files = event.new
# Define a callback to save the selected metadata files when the button is clicked
def save_selected_metadata_files(event):
with open('stored_variables.json', 'r') as file:
data = json.load(file)
data['selected_metadata_files'] = selected_metadata_files
with open('stored_variables.json', 'w') as file:
json.dump(data, file, indent=4)
print("selected_metadata_files updated in JSON file.")
# Define the widgets
file_input = pn.widgets.TextInput(
name="File Path",
placeholder="Enter the path to your directory"
)
set_name = pn.widgets.TextInput(
name="Set Name",
placeholder="Enter the Set"
)
store_button = pn.widgets.Button(name='Store Values')
store_button.on_click(store_values)
checkbox_group = pn.widgets.CheckBoxGroup(name='Select CSV Files', options=[], value=[])
checkbox_group.param.watch(update_ls_samples, 'value')
metadata_checkbox_group = pn.widgets.CheckBoxGroup(name='Select Metadata Files', options=[], value=[])
metadata_checkbox_group.param.watch(update_metadata_files, 'value')
save_button = pn.widgets.Button(name='Save Files')
save_button.on_click(save_selected_files)
save_metadata_button = pn.widgets.Button(name='Save Metadata Files')
save_metadata_button.on_click(save_selected_metadata_files)
output_pane_1 = pn.pane.Markdown("")
output_pane_2 = pn.pane.HTML("")
output_pane_3 = pn.pane.HTML("")
output_pane_4 = pn.pane.HTML("")
# Create the cards
card_1 = pn.Card(
pn.Column(
pn.pane.Markdown("### Input Form"),
file_input,
set_name,
store_button,
output_pane_1,
sizing_mode="stretch_width"
),
title="Input Form",
sizing_mode="stretch_width"
)
card_2 = pn.Card(
pn.Column(
pn.pane.Markdown("### Directory Paths"),
output_pane_2,
sizing_mode="stretch_width"
),
title="Directory Paths",
sizing_mode="stretch_width"
)
card_3 = pn.Card(
pn.Column(
pn.pane.Markdown("### CSV Files"),
output_pane_3,
pn.pane.Markdown("### Selection of CSV files for the further analysis"),
checkbox_group,
save_button,
sizing_mode="stretch_width"
),
title="CSV Files",
sizing_mode="stretch_width"
)
card_4 = pn.Card(
pn.Column(
pn.pane.Markdown("### Metadata Files"),
output_pane_4,
pn.pane.Markdown("### Selection of Metadata Files"),
metadata_checkbox_group,
save_metadata_button,
sizing_mode="stretch_width"
),
title="Metadata Files",
sizing_mode="stretch_width"
)
# Create the main column with the cards
main_column = pn.Column(card_1, card_2, card_3, card_4)
# Create the GoldenTemplate with the main column
app = pn.template.GoldenTemplate(
site="Cyc-IF",
title="Setup",
main=[main_column],
header_color="black",
)
app.servable()