Add new configuration file

This commit is contained in:
2024-08-22 04:20:40 -04:00
parent a300484ceb
commit bcc8dba3e4
8 changed files with 1824 additions and 1016 deletions

View File

@@ -0,0 +1,121 @@
#!/usr/bin/env/bash
# @description Creates, modifies, and parses the study info file
#
# TODO
#
# * Needs refactoring
# * Ended up combining a few functions into one
#
#
# @exitcode 0 If one or more studies found
# @exitcode 1 If no studies found
# @set STUDIES array contains array of "exp# sd ExpDir"
parse_study_info() {
debug "Running: ${FUNCNAME[0]}"
# Only run this once per project
# in case we run multiple modules
(( SET_STUDIES )) && return 0
declare -g SET_STUDIES=1
# Use initials from project or whoami?
# Best I can do is first two letters of username
# See TODO in markdown
initials="${USER:0:2}"
INITIALS=${initials^^}
empty_study=1
# Find an Exp directory that does not exist
while [[ -d $STUDY_RESULTS_DIR/exp$empty_study ]]; do
(( empty_study++ ))
done
next_study_entry="$empty_study,$PROJECT_NAME,NA,NA,$INITIALS"
echo "${underline}Study Info File${nounderline}"
if [[ -f $STUDY_INFO_FILE ]]; then
# Get latest entry
while IFS=',' read -r col1 _; do # split on comma, get Exp # from 1st column
studies_nums+=("$col1")
done < <(tail -n +2 "$STUDY_INFO_FILE")
largest=${studies_nums[0]}
for i in "${studies_nums[@]}"; do
if ((i > largest)); then
largest=$i
fi
done
empty_study=$((largest+1))
next_study_entry="$((empty_study)),$PROJECT_NAME,NA,NA,$INITIALS"
else # create a default study info file
echo "ExpNumb,ExpLabel,BackgroundSD,ZscoreJoinSD,AnalysisBy" > "$STUDY_INFO_FILE"
echo "$next_study_entry" >> "$STUDY_INFO_FILE"
next_study_entry="$((empty_study+1)),$PROJECT_NAME,NA,NA,$INITIALS"
fi
# Print current studies
cat <<-EOF
* Give each experiment labels to be used for the plots and specific files.
* Enter the desired experiment names in the order they should appear in the REMc heatmaps
Current study info file contents:
${underline}$STUDY_INFO_FILE${nounderline}
$(cat "$STUDY_INFO_FILE")
EOF
# Allow user to add/edit the study info file
if ! ((YES)); then
for ((i=1; i<2; i++)); do
cat <<-EOF
Next entry suggestion: "$next_study_entry"
Would you like to:
* (a)dd the suggested entry
* (e)dit the study info file manually
* (c)ontinue (default)
EOF
read -r -p "(c): " response
echo ""
[[ -z $response ]] && break
case $response in
a)
echo "Adding auto-entry suggestion to $STUDY_INFO_FILE"
echo "$next_study_entry" >> "$STUDY_INFO_FILE"
next_study_entry="$((empty_study+1)),$PROJECT_NAME,NA,NA,$INITIALS"
i=0
;;
e)
debug "$EDITOR $STUDY_INFO_FILE"
"$EDITOR" "$STUDY_INFO_FILE"
;;
c)
break
;;
*)
err "Invalid response, please try again"
i=0
;;
esac
break
done
fi
# Read study info file
declare -ga STUDIES
while IFS=',' read -r num _ sd _; do
STUDIES+=("$num $sd $STUDY_RESULTS_DIR/exp$num")
done < <(tail -n +2 "$STUDY_INFO_FILE") # skip header
# Initialize missing Exp dirs
for study in "${STUDIES[@]}"; do
read -r _ _ dir <<< "$study"
[[ -d $dir ]] || execute mkdir "$dir"
done
((DEBUG)) && declare -p STUDIES
# Return true if at least one study was found
[[ ${#STUDIES[@]} -gt 0 ]]
}