Add new configuration file
This commit is contained in:
121
workflow/.old/apps/shell/submodules/parse_study_info
Normal file
121
workflow/.old/apps/shell/submodules/parse_study_info
Normal 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 ]]
|
||||
}
|
||||
Reference in New Issue
Block a user