Some header work
This commit is contained in:
@@ -30,55 +30,52 @@ if ~exist(masterPlateFile, 'file') || isempty(masterPlateFile)
|
||||
% This can be silent, not really an error
|
||||
end
|
||||
|
||||
for i=1:5 % give users 5 chances to get it right
|
||||
try
|
||||
% For standalone mode
|
||||
% GUI input for selecting a MasterPlate Excel file
|
||||
questdlg('Select MasterPlate Directory (containing DrugMedia_ & MasterPlate_ files)','Directory Selection','OK',...
|
||||
struct('Default','OK','Interpreter','tex'))
|
||||
dirToScan=uigetdir();
|
||||
files=dir(dirToScan);
|
||||
mpFiles={files(strncmp(files.name, 'MasterPlate_', 12)).name};
|
||||
if isempty(mpFiles)
|
||||
throw(MException('MATLAB:dir', 'No MasterPlate_ files in directory'))
|
||||
end
|
||||
% this sorts by date (newest first)
|
||||
[~, sortedIndices]=sort(datenum({files(strncmp(mpFiles.name, 'MasterPlate_', 12)).date}), 'descend');
|
||||
sortedFiles=mpFiles{sortedIndices};
|
||||
masterPlateFile=sortedFiles{1};
|
||||
disp('Using newest MasterPlate file: ', masterPlateFile, ', skipping directory selection');
|
||||
break
|
||||
catch ME
|
||||
h=msgbox(ME.message, 'Error', 'error');
|
||||
disp('Rerunning directory selection');
|
||||
% I don't know what else we'll need to do here
|
||||
|
||||
try
|
||||
% For standalone mode
|
||||
% GUI input for selecting a MasterPlate Excel file
|
||||
questdlg('Select MasterPlate Directory (containing DrugMedia_ & MasterPlate_ files)','Directory Selection','OK',...
|
||||
struct('Default','OK','Interpreter','tex'))
|
||||
dirToScan=uigetdir();
|
||||
files=dir(dirToScan);
|
||||
mpFiles={files(strncmp(files.name, 'MasterPlate_', 12)).name};
|
||||
if isempty(mpFiles)
|
||||
throw(MException('MATLAB:dir', 'No MasterPlate_ files in directory'))
|
||||
end
|
||||
% this sorts by date (newest first)
|
||||
[~, sortedIndices]=sort(datenum({files(strncmp(mpFiles.name, 'MasterPlate_', 12)).date}), 'descend');
|
||||
sortedFiles=mpFiles{sortedIndices};
|
||||
masterPlateFile=sortedFiles{1};
|
||||
disp('Using newest MasterPlate file: ', masterPlateFile, ', skipping directory selection');
|
||||
break
|
||||
catch ME
|
||||
h=msgbox(ME.message, 'Error', 'error');
|
||||
disp('Rerunning directory selection');
|
||||
% I don't know what else we'll need to do here
|
||||
end
|
||||
else
|
||||
for i=1:5 % give users 5 chances to get it right
|
||||
try
|
||||
% For standalone mode
|
||||
% GUI input for selecting a MasterPlate Excel file
|
||||
questdlg('Select MasterPlate Directory (containing DrugMedia_ & MasterPlate_ files)','Directory Selection','OK',...
|
||||
struct('Default','OK','Interpreter','tex'))
|
||||
dirToScan=uigetdir();
|
||||
files=dir(dirToScan);
|
||||
mpFiles={files(strncmp(files.name, 'MasterPlate_', 12)).name};
|
||||
if isempty(mpFiles)
|
||||
throw (MException('MATLAB:dir', 'No MasterPlate_ files in directory'));
|
||||
end
|
||||
% this sorts by date (newest first)
|
||||
[~, sortedIndices]=sort(datenum({files(strncmp(mpFiles.name, 'MasterPlate_', 12)).date}), 'descend');
|
||||
sortedFiles=mpFiles{sortedIndices};
|
||||
masterPlateFile=sortedFiles{1};
|
||||
disp('Using newest MasterPlate file: ', masterPlateFile, ', skipping directory selection');
|
||||
break
|
||||
catch ME
|
||||
h=msgbox(ME.message, 'Error', 'error');
|
||||
uiwait(h);
|
||||
disp('Rerunning directory selection');
|
||||
% I don't know what else we'll need to do here
|
||||
try
|
||||
% For standalone mode
|
||||
% GUI input for selecting a MasterPlate Excel file
|
||||
questdlg('Select MasterPlate Directory (containing DrugMedia_ & MasterPlate_ files)','Directory Selection','OK',...
|
||||
struct('Default','OK','Interpreter','tex'))
|
||||
dirToScan=uigetdir();
|
||||
files=dir(dirToScan);
|
||||
mpFiles={files(strncmp(files.name, 'MasterPlate_', 12)).name};
|
||||
if isempty(mpFiles)
|
||||
throw (MException('MATLAB:dir', 'No MasterPlate_ files in directory'));
|
||||
end
|
||||
% this sorts by date (newest first)
|
||||
[~, sortedIndices]=sort(datenum({files(strncmp(mpFiles.name, 'MasterPlate_', 12)).date}), 'descend');
|
||||
sortedFiles=mpFiles{sortedIndices};
|
||||
masterPlateFile=sortedFiles{1};
|
||||
disp('Using newest MasterPlate file: ', masterPlateFile, ', skipping directory selection');
|
||||
break
|
||||
catch ME
|
||||
h=msgbox(ME.message, 'Error', 'error');
|
||||
uiwait(h);
|
||||
disp('Rerunning directory selection');
|
||||
% I don't know what else we'll need to do here
|
||||
end
|
||||
end
|
||||
else
|
||||
|
||||
@@ -448,8 +448,7 @@ end
|
||||
|
||||
function runResults_DBcombo_Callback(~, ~, ~)
|
||||
try
|
||||
DgenResults %similar but semicolons removed to restore so cmdLine display info.
|
||||
%Dgen241010qhtcp %par4global -convert 1x1cell of 384cells to be like previous 1x384 cells CFparameter
|
||||
DgenResults
|
||||
catch ME
|
||||
fprintf('Error in DgenResults: %s\n', ME.message);
|
||||
EASYconsole
|
||||
|
||||
@@ -299,11 +299,46 @@ print_header() {
|
||||
|
||||
EOF
|
||||
|
||||
cat <<-EOF
|
||||
Available modules: ${ALL_MODULES[*]}
|
||||
Available submodules: ${ALL_SUBMODULES[*]}
|
||||
EOF
|
||||
|
||||
echo "Using scans directory: $SCANS_DIR"
|
||||
echo "Change the SCANS_DIR environment variable to override"
|
||||
echo "Example: SCANS_DIR=/path/to/scans ./qhtcp-workflow"
|
||||
echo ""
|
||||
echo "Using output directory: $OUT_DIR"
|
||||
echo "Change the out_DIR environment variable to override"
|
||||
echo "Example: SCANS_DIR=/path/to/scans OUT_DIR=/path/to/out ./qhtcp-workflow"
|
||||
echo ""
|
||||
|
||||
shopt -s nullglob
|
||||
projects=("$SCANS_DIR"/*/)
|
||||
shopt -u nullglob
|
||||
|
||||
echo "Available Projects:"
|
||||
for i in "${!projects[@]}"; do
|
||||
printf "%d. %s\n" "$((i+1))" "${projects[i]}"
|
||||
done
|
||||
|
||||
echo "Available Modules:"
|
||||
for i in "${!ALL_MODULES[@]}"; do
|
||||
printf "%d. %s\n" "$((i+1))" "${ALL_MODULES[i]}"
|
||||
done
|
||||
echo ""
|
||||
echo "Available Submodules:"
|
||||
for i in "${!ALL_SUBMODULES[@]}"; do
|
||||
printf "%d. %s\n" "$((i+1))" "${ALL_SUBMODULES[i]}"
|
||||
done
|
||||
|
||||
last_index=$(( ${#ALL_MODULES} - 1 ))
|
||||
read -r -p "Enter a comma deliminated list of modules to run: " response1
|
||||
IFS=',' read -ra MODULES <<< "$response1"
|
||||
|
||||
last_index=$(( ${#ALL_SUBMODULES} - 1 ))
|
||||
read -r -p "Enter the item number to select EASY results directory, default ($last_index): " response2
|
||||
IFS=',' read -ra SUBMODULES <<< "$response2"
|
||||
|
||||
# cat <<-EOF
|
||||
# Available modules: ${ALL_MODULES[*]}
|
||||
# Available submodules: ${ALL_SUBMODULES[*]}
|
||||
# EOF
|
||||
}
|
||||
|
||||
|
||||
@@ -618,13 +653,13 @@ easy() {
|
||||
script="$EASY_DIR/EASYconsole.m"
|
||||
|
||||
# Prompt user for suffix
|
||||
echo "Using default EASY results directory: $EASY_RESULTS_DIR"
|
||||
((YES)) || read -r -p "Enter a custom suffix and/or hit enter to use the default (no suffix): " EASY_SUFFIX
|
||||
echo "Using EASY results directory: $EASY_RESULTS_DIR"
|
||||
((YES)) || read -r -p "Enter a custom suffix and/or hit enter to use the default directory (no suffix): " EASY_SUFFIX
|
||||
[[ -n $EASY_SUFFIX ]] && EASY_RESULTS_DIR+="_$EASY_SUFFIX"
|
||||
|
||||
# This dirname is separate from the project's so multiple EASY results can be generated
|
||||
declare -gx EASY_PROJECT_NAME="${EASY_RESULTS_DIR##*/}"
|
||||
debug "EASY results output name: $EASY_PROJECT_NAME"
|
||||
debug "EASY results project name: $EASY_PROJECT_NAME"
|
||||
|
||||
# Backup and create EASY results dirs
|
||||
[[ -d $EASY_RESULTS_DIR ]] && backup "$EASY_RESULTS_DIR"
|
||||
@@ -1498,19 +1533,19 @@ documentation() {
|
||||
main() {
|
||||
debug "Running: ${FUNCNAME[0]}" "$@"
|
||||
|
||||
# Where are we
|
||||
# Some global vars
|
||||
SCRIPT=$(realpath -s "${BASH_SOURCE[0]}")
|
||||
SCRIPT_DIR=$(dirname "$SCRIPT")
|
||||
|
||||
print_header
|
||||
|
||||
# Global directory variables
|
||||
declare -g TEMPLATES_DIR="$SCRIPT_DIR/templates"
|
||||
APPS_DIR="$SCRIPT_DIR/apps"
|
||||
DATE="$(date +%Y%m%d)" # change in EASYconsole.m to match
|
||||
# scans_heirarchy=("./scans" "/mnt/data/scans" "/mnt/data/ExpJobs" "./scans")
|
||||
local scans_heirarchy=( "$SCANS_DIR" "./scans" "/mnt/data/scans" "./scans") # TODO change back for production, avoid actual scan dirs during testing
|
||||
TEMPLATES_DIR="$SCRIPT_DIR/templates"
|
||||
PROJECT_USER="$(whoami)"
|
||||
DATE="$(date +%Y%m%d)" # change in EASYconsole.m to match 'hardcode'
|
||||
|
||||
# Find a scans directory
|
||||
# TODO change back for production, avoid actual scan dirs during testing
|
||||
# local scans_heirarchy=("./scans" "/mnt/data/scans" "/mnt/data/ExpJobs" "./scans")
|
||||
local scans_heirarchy=( "$SCANS_DIR" "./scans" "/mnt/data/scans" "./scans")
|
||||
|
||||
[[ -z $SCANS_DIR ]] && for d in "${scans_heirarchy[@]}"; do
|
||||
if [[ -d $d ]]; then
|
||||
declare -g SCANS_DIR="$d"
|
||||
@@ -1525,10 +1560,8 @@ main() {
|
||||
exit 1;
|
||||
fi
|
||||
fi
|
||||
echo "Using scans directory: $SCANS_DIR"
|
||||
echo "Change the SCANS environment variable to override"
|
||||
echo "Example: SCANS=/path/to/scans ./qhtcp-workflow"
|
||||
|
||||
# Find an output directory
|
||||
local out_heirarchy=("$(dirname "$SCANS_DIR")/out" "$SCRIPT_DIR/out" "/mnt/data/out")
|
||||
for d in "${out_heirarchy[@]}"; do
|
||||
if [[ -d $d ]]; then
|
||||
@@ -1545,17 +1578,18 @@ main() {
|
||||
debug "mkdir $SCRIPT_DIR/out"
|
||||
mkdir "$SCRIPT_DIR/out"
|
||||
else
|
||||
err "No output directory, but attempting to continue..."
|
||||
err "No output directory, attempting to continue..."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set the automatic project directory prefix
|
||||
PROJECT_USER="$(whoami)"
|
||||
PROJECT_PREFIX="${DATE}_${PROJECT_USER}" # reversed these so easier to sort and parse date
|
||||
sanitize_pn() { [[ $1 =~ [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_.+_.+ ]]; } # sanitizer regex for prefix
|
||||
|
||||
declare -a PROJECTS=() # this array will hold all of the projects for this run
|
||||
|
||||
print_header
|
||||
|
||||
parse_input "$@" # parse arguments with getopt
|
||||
|
||||
# Prompt user for the PROJECT if we still don't have one
|
||||
|
||||
Reference in New Issue
Block a user