diff --git a/.gitignore b/.gitignore index 6bfbd68..a653e4c 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ qqq_gains_det3.dat qqq_relative_gains.dat Armory/CorrelateQQQ.h QQQStage2.C +qqqIvERun395.png diff --git a/TrackRecon.C b/TrackRecon.C index 05a812b..56e8797 100644 --- a/TrackRecon.C +++ b/TrackRecon.C @@ -324,8 +324,8 @@ Bool_t TrackRecon::Process(Long64_t entry) plotter->Fill2D("DelT_Vs_QQQRingECal", 500, -2500, 2500, 1000, 0, 10, tRing - static_cast(pc.t[k]), eRingMeV, "hTiming"); plotter->Fill2D("CalibratedQQQEvsAnodeE_R", 1000, 0, 10, 2000, 0, 30000, eRingMeV, pc.e[k], "hPCQQQ"); plotter->Fill2D("CalibratedQQQEvsAnodeE_W", 1000, 0, 10, 2000, 0, 30000, eWedgeMeV, pc.e[k], "hPCQQQ"); - // if (tRing - static_cast(pc.t[k]) < -150 && tRing - static_cast(pc.t[k]) > -450) // 27Al - if (tRing - static_cast(pc.t[k]) < -75 && tRing - static_cast(pc.t[k]) > -145) // 17F + if (tRing - static_cast(pc.t[k]) < -150 && tRing - static_cast(pc.t[k]) > -450) // 27Al + // if (tRing - static_cast(pc.t[k]) < -75 && tRing - static_cast(pc.t[k]) > -145) // 17F { PCQQQTimeCut = true; } diff --git a/batchproces_mapped_run.sh b/batchproces_mapped_run.sh deleted file mode 100644 index 01751f0..0000000 --- a/batchproces_mapped_run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#parallel -j 8 --ctag ./process_mapped_run.sh {1} ::: {01..04} -#hadd -j -instr="" -declare -i i=0 -while [[ $i -lt 10 ]]; do -echo $i -i=$i+1 -instr=" "+$i -done -echo $instr diff --git a/process_mapped_run.sh b/process_mapped_run.sh index a28c0ec..6d7b88c 100755 --- a/process_mapped_run.sh +++ b/process_mapped_run.sh @@ -1 +1,73 @@ -root -l -x -q ../2024_06_27Al/root_data/Run_0$1_mapped.root -e 'tree->Process("TrackRecon.C+");' +#!/bin/bash + +# ========================================== +# CONFIGURATION +# ========================================== +DATA_DIR="/mnt/d/Remapped_files/17F_data/root_data" +MACRO="TrackRecon.C" + +# SAFETY SETTINGS +JOBS=2 # Keep low (2-4) to prevent WSL crashes +MIN_MEM="1G" # Wait if RAM is full +# ========================================== + +# 1. CHECK ARGUMENTS +if [ "$#" -ne 2 ]; then + echo "Usage: $0 " + echo "Example: $0 10 50" + exit 1 +fi + +START_RUN=$1 +END_RUN=$2 + +# 2. COMPILE MACRO +# Compiling once is mandatory for parallel execution +echo "Compiling ${MACRO}..." +root -l -b -q -e "gROOT->ProcessLine(\".L ${MACRO}+\");" +if [ $? -ne 0 ]; then + echo "Error: Compilation failed." + exit 1 +fi + +# 3. DEFINE WORKER FUNCTION +run_job() { + file_path="$1" + macro_name="$2" + + echo "Processing: $file_path" + + # Execute ROOT + nice -n 15 root -l -x -b -q "$file_path" -e "tree->Process(\"${macro_name}+\");" > "${file_path}.log" 2>&1 +} +export -f run_job + +# 4. QUEUE BUILDER (The "Skip" Logic is here) +echo "Checking runs $START_RUN to $END_RUN..." + +for (( i=$START_RUN; i<=$END_RUN; i++ )) +do + # Construct the input filename + # Logic: Run_0 + number -> Run_0115 + file="${DATA_DIR}/Run_0${i}_mapped.root" + + # ------------------------------------------------------------ + # SKIP LOGIC + # We check if the log file exists. If so, we assume it's done. + # ------------------------------------------------------------ + log_file="${file}.log" + + if [ -f "$log_file" ]; then + # >&2 redirects to stderr so it doesn't get fed into 'parallel' + echo "Skipping Run $i: Log file already exists." >&2 + continue + fi + + # Only add to queue if the INPUT file actually exists + if [ -f "$file" ]; then + echo "$file" + else + echo "Warning: Input file for run $i not found." >&2 + fi + +done | parallel --jobs $JOBS --memfree $MIN_MEM --retries 2 run_job {} "$MACRO" \ No newline at end of file