diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/processTobiiRecords.sh | 146 |
1 files changed, 71 insertions, 75 deletions
diff --git a/utils/processTobiiRecords.sh b/utils/processTobiiRecords.sh index 0cc3eb4..aca1543 100644 --- a/utils/processTobiiRecords.sh +++ b/utils/processTobiiRecords.sh @@ -1,31 +1,39 @@ #! /bin/bash # -# Load json ArGaze context file ($1) then, look for all Tobii record segments into input folder ($2). +# Look for all Tobii record segments into input folder ($1) to execute an ArGaze context file ($2) on each. # -# For each Tobii record segment found: -# - context "segment" field is modified to bind on it, -# - context "pipeline" field is modified to bind on a temporary patched pipeline \ -# resulting from the merging of the given pipeline and an optionnal "patch.json" file in Tobii record segment, -# - then, ArGaze executes the modified context from output folder ($3) to export all records into it, -# - finally, context is resetted and temporary patched pipeline is removed. +# For each Tobii record segment found a temporary context and pipeline files are created: +# - temporary context "segment" field is modified to bind on it, +# - temporary context "pipeline" field is modified to bind on a temporary pipeline file, +# - temporary pipeline "projection_cache" field is added to create or bind a "layers_projection.csv" file in segment folder, +# — if a "patch.json" file exist in the Tobii record segment, it merged to the temporary pipeline file, +# - then, ArGaze executes the temporary context from output folder ($3) to export all records into it, +# - finally, temporary context and pipeline files are deleted. # # Arguments: -# $1: ArGaze context file -# $2: folder from where to look for Tobii records -# $3: folder where to export ArGaze processing outputs +# $1: folder from where to look for Tobii records +# $2: ArGaze context file +# $3: folder where to export processing outputs +# $4+: any other arguments are passed to "argaze load" command ####################################### -# Check required arguments -if [ "$#" -ne 3 ]; then - echo "!!! Incorrect number of arguments" - exit 1 -fi +# Parse mandatory arguments +input_folder="$(realpath "$1")" +context_file="$(realpath "$2")" +output_folder="$(realpath "$3")" + +# Parse any other arguments to pass them to "argaze load" command +if [ $# -ge 4 ]; then -context_file=$1 -input_folder=$2 -output_folder=$3 + argaze_args=$4 -# Check requirements: + while shift && [ -n "$4" ]; do + argaze_args="${argaze_args},$4" + done + +fi + +# Check requirements if brew ls --versions jq > /dev/null; then : # jq installed else @@ -33,32 +41,7 @@ else brew install jq fi -# Check context ctx_folder="$(dirname "$context_file")" -ctx_class=$(jq "keys[0]" $context_file) -ctx_name=$(jq .$ctx_class.name $context_file) -ctx_segment=$(jq .$ctx_class.segment $context_file) -pipeline_file=$(jq -r .$ctx_class.pipeline $context_file) - -echo "*** Loading $ctx_class context:" -echo "- Name: $ctx_name" - -# Move to context folder -cd $ctx_folder - -# Check pipeline -if [ -f "$pipeline_file" ]; then - - ppl_class=$(jq "keys[0]" $pipeline_file) - ppl_name=$(jq .$ppl_class.name $pipeline_file) - echo "- Pipeline: $ppl_name" - -else - - echo "!!! Missing $pipeline_file pipeline file" - exit 1 - -fi ####################################### # Process Tobii segment folder @@ -78,55 +61,68 @@ function process_segment() { echo " - Lenght: $seg_length" echo " - Calibration: $ca_state" + # Move to context folder + cd $ctx_folder + + # Create temporary context file + temp_context_file=".$rec_id-$seg_id.context.json" + yes | cp -f $context_file $temp_context_file + ctx_class=$(jq "keys[0]" $temp_context_file) + ctx_name=$(jq .$ctx_class.name $temp_context_file) + ctx_pipeline=$(jq -r .$ctx_class.pipeline $temp_context_file) + + echo "- Context $(basename $temp_context_file):" + echo " - Name: $ctx_name" + + # Create temporary pipeline file + temp_pipeline_file=".$rec_id-$seg_id.pipeline.json" + yes | cp -f $ctx_pipeline $temp_pipeline_file + ppl_class=$(jq "keys[0]" $temp_pipeline_file) + ppl_name=$(jq .$ppl_class.name $temp_pipeline_file) + + echo "- Pipeline: $(basename $temp_pipeline_file)" + echo " - Name: $ppl_name" + + # Modify temporary context segment + echo "$(jq --tab ".$ctx_class.segment = \"$seg_folder\"" $temp_context_file)" > "$ctx_folder/$temp_context_file" + + # Modify temporary context pipeline + echo "$(jq --tab ".$ctx_class.pipeline = \"$temp_pipeline_file\"" $temp_context_file)" > "$ctx_folder/$temp_context_file" + + # Modify temporary pipeline projection_cache + echo "$(jq --tab ".$ppl_class.projection_cache = \"$seg_folder/layers_projection.csv\"" $temp_pipeline_file)" > "$ctx_folder/$temp_pipeline_file" + # Check patch patch_file="$seg_folder/patch.json" if [ -f "$patch_file" ]; then - echo "+ Patch:" + echo " + Patch:" echo "$(jq . $patch_file)" - # Edit temporary patched pipeline - temp_file=".$rec_id-$seg_id.patch.json" - echo "$(jq --tab -s ".[0] * .[1]" $pipeline_file $patch_file)" > "$ctx_folder/$temp_file" - - # Modify context pipeline - echo "$(jq --tab ".$ctx_class.pipeline = \"$temp_file\"" $context_file)" > $context_file - - echo "*** $ctx_folder/$temp_file file created" + # Merge patch with temporary pipeline + echo "$(jq --tab -s ".[0] * .[1]" $temp_pipeline_file $patch_file)" > "$ctx_folder/$temp_pipeline_file" fi - # Modify context segment - echo "$(jq --tab ".$ctx_class.segment = \"$seg_folder\"" $context_file)" > $context_file - - # Create segment output folder then, move into + # Create segment output folder seg_output=$output_folder/$rec_id/segments/$seg_id mkdir -p $seg_output cd $seg_output - # Launch argaze with modified context - echo "*** ArGaze processing starts" + # Launch modified context with argaze load command + echo "*** ArGaze starts context" - python -m argaze load $context_file + python -m argaze load "$ctx_folder/$temp_context_file" $argaze_args - echo "*** ArGaze processing ends" + echo "*** ArGaze ends context" # Move back to context folder cd $ctx_folder - # Reset context segment - echo "$(jq --tab ".$ctx_class.segment = $ctx_segment" $context_file)" > $context_file + # Delete temporary context file + rm "$ctx_folder/$temp_context_file" - # Check temporary pipeline - if [ -f "$temp_file" ]; then - - # Delete temporary patched pipeline - rm "$ctx_folder/$temp_file" - - # Reset context pipeline - echo "$(jq --tab ".$ctx_class.pipeline = \"$pipeline_file\"" $context_file)" > $context_file - - echo "*** $ctx_folder/$temp_file file removed" - fi + # Delete temporary pipeline file + rm "$ctx_folder/$temp_pipeline_file" } ####################################### @@ -154,7 +150,7 @@ function process_record() { done } -echo "*** Looking for Tobii records into $2 folder" +echo "*** Looking for Tobii records into $1 folder" # Check if the path is directly a path to a record segment if [ -f "$input_folder/livedata.json.gz" ]; then |