Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions UTILS/checkCorruptedAO2Ds.C
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,21 @@
#include <TTreeReader.h>
#include <TGrid.h>
#include <iostream>
#include <TError.h>
#include <cstring>

bool gWarningDetected = false; // Global flag to track the warning

void MyErrorHandler(int level, Bool_t abort, const char *location, const char *msg) {
if (strstr(msg, "repair") != nullptr) {
gWarningDetected = true;
}
DefaultErrorHandler(level, abort, location, msg); // Call ROOT’s default handler
}

int checkCorruptedAO2Ds(TString infileName = "/alice/sim/2024/LHC24h2/535545/AOD/005/AO2D.root", bool fromAlien = true) {

SetErrorHandler(MyErrorHandler);

if (fromAlien) {
TGrid::Connect("alien://");
Expand All @@ -21,7 +34,7 @@ int checkCorruptedAO2Ds(TString infileName = "/alice/sim/2024/LHC24h2/535545/AOD

// all VLA branches in the AO2Ds.root
std::map<std::string, std::vector<std::string>> branchesToCheck = {
{"O2mcparticle_001", std::vector<std::string>{"fIndexArray_Mothers"}},
{"O2mcparticle_001", std::vector<std::string>{"fIndexArray_Mothers", "fVx", "fIndexMcCollisions"}},
{"O2ft0", std::vector<std::string>{"fAmplitudeA", "fChannelA", "fAmplitudeC", "fChannelC"}},
{"O2fv0a", std::vector<std::string>{"fAmplitude", "fChannel"}},
{"O2mccalolabel_001", std::vector<std::string>{"fIndexArrayMcParticles", "fAmplitudeA"}},
Expand All @@ -42,11 +55,15 @@ int checkCorruptedAO2Ds(TString infileName = "/alice/sim/2024/LHC24h2/535545/AOD
std::cout << "Found corrupted file! DF: " << dirKey->GetName() << " Tree:" << pair.first.data() << " Branch:" << branchName.data() << std::endl;
return -1;
}
if (gWarningDetected) {
std::cout << "Found file in need of repair! DF: " << dirKey->GetName() << " Tree:" << pair.first.data() << " Branch:" << branchName.data() << std::endl;
return -2;
}
}
}
}
}
}

return 0;
}
}
22 changes: 13 additions & 9 deletions UTILS/findCorruptedAO2Ds.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,29 @@

# Simple script to find corrupted AO2Ds using the checkCorruptedAO2Ds.C macro

PRODUCTION=LHC24h2
PRODUCTION=LHC24f3c
RUN=* # use * for all runs
NJOBS=90
NJOBS=20
PRODUCTIONCYCLE=0

OUTPUTFILE=corrupted_files_$PRODUCTION.txt
if [ -e "$OUTPUTFILE" ]; then
rm $OUTPUTFILE
fi

# find all files in alien
if [ "$variable" == "*" ]; then
alien_find alien:///alice/sim/2024/${PRODUCTION} 5*/AOD/*/AO2D.root > files_to_check.txt
if [ "$RUN" == "*" ]; then
alien_find alien:///alice/sim/2024/${PRODUCTION}/${PRODUCTIONCYCLE}/5*/AOD/*/AO2D.root > files_to_check.txt
else
alien_find alien:///alice/sim/2024/${PRODUCTION} ${RUN}/AOD/*/AO2D.root > files_to_check.txt
alien_find alien:///alice/sim/2024/${PRODUCTION}/${PRODUCTIONCYCLE}/${RUN}/AOD/*/AO2D.root > files_to_check.txt
fi
mapfile -t FILESTOCHECK < files_to_check.txt

# process AO2Ds
process_file() {
IFS='/' read -a num <<< "$1"
INPUT=$1
echo '.x checkCorruptedAO2Ds.C("'${INPUT}'", true)' | root -l -b > log_${num[5]}_${num[7]}
echo '.x checkCorruptedAO2Ds.C("'${INPUT}'", true)' | root -l -b > log_${num[6]}_${num[8]}
echo '.q'
}
export -f process_file
Expand All @@ -33,12 +34,15 @@ parallel -j $NJOBS process_file ::: "${FILESTOCHECK[@]}"
# create list of corrupted files
touch $OUTPUTFILE
ERRORSTR="Found corrupted file!"
REPAIRSTR="Found file in need of repair!"
for FILE in "${FILESTOCHECK[@]}"; do
IFS='/' read -a num <<< "$FILE"
if grep -q "$ERRORSTR" log_${num[5]}_${num[7]}; then
echo $FILE >> $OUTPUTFILE
if grep -q "$ERRORSTR" log_${num[6]}_${num[8]}; then
echo $FILE " is corrupted!" >> $OUTPUTFILE
elif grep -q "$REPAIRSTR" log_${num[6]}_${num[8]}; then
echo $FILE " is broken!" >> $OUTPUTFILE
fi
done

rm files_to_check.txt
rm log*
rm log_*