#!/bin/bash #SBATCH --job-name="run_unpack" #SBATCH --comment="CBM TOF" #SBATCH --open-mode=truncate if [ -z "$SLURM_SUBMIT_DIR" ]; then echo 'script needs to be invoked by sbatch' exit 1 fi WorkingDir=`pwd` if [ -z "$ConfigFile" ]; then if [ -z "$1" ]; then echo 'no CbmRoot config file specified' exit 1 else ConfigFile=$1 fi fi if [ -z "$ListDir" ]; then if [ -z "$2" ]; then echo 'no analysis list directory specified' exit 1 else ListDir=$2 fi fi if [ -z "$SimulationDir" ]; then if [ -z "$3" ]; then echo 'no simulation directory specified' exit 1 else SimulationDir=$3 fi fi if [ -z "$MacroDir" ]; then if [ -z "$4" ]; then echo 'no macro directory specified' exit 1 else MacroDir=$4 fi fi if [ -z "$cGeometry" ]; then if [ -z "$5" ]; then echo 'no geometry tag specified' exit 1 else cGeometry=$5 fi fi if [ -z "$bUnpackHits" ]; then if [ -z "$6" ]; then echo 'no unpack flag specified' exit 1 else bUnpackHits=$6 fi fi if [ -z "$bSimData" ]; then if [ -z "$7" ]; then echo 'no data type specified' exit 1 else bSimData=$7 fi fi if [ -z "$bEventBuilding" ]; then if [ -z "$8" ]; then echo 'no event building flag specified' exit 1 else bEventBuilding=$8 fi fi if [ -z "$bConcatUnpacking" ]; then if [ -z "$9" ]; then echo 'no concat unpacking flag specified' exit 1 else bConcatUnpacking=$9 fi fi if [ -z "$bCalibRawData" ]; then if [ -z "${10}" ]; then echo 'no raw-data calibration flag specified' exit 1 else bCalibRawData=${10} fi fi source ${ConfigFile} if [ -z "$VMCWORKDIR" ]; then echo 'no ROOT environment available' exit 1 fi if [ ! -f "${ListDir}/unpack_list.sh" ]; then echo 'missing the unpack list file' exit 1 fi unset UnpackList source "${ListDir}/unpack_list.sh" if [ -z "${UnpackList}" ]; then echo 'unpack list is empty' exit 1 fi UnpackParameters=${UnpackList[$((SLURM_ARRAY_TASK_ID-1))]} UnpackParameters=($UnpackParameters) if [ "${#UnpackParameters[@]}" != "6" ]; then echo 'more/less than 6 unpack parameters given' exit 1 fi RunID=${UnpackParameters[0]} iEventWindow=${UnpackParameters[1]} iTriggerSet=${UnpackParameters[2]} iMultiplicity=${UnpackParameters[3]} dDigiTimeOffset=${UnpackParameters[4]} iNEvents=${UnpackParameters[5]} if [ "${bSimData}" == "1" ]; then SimulationDir=`find ${SimulationDir} -type d -name ${RunID}` if [ ! -d "${SimulationDir}" ]; then echo 'simulation directory does not exist' exit 1 fi cRunMode=`echo ${SimulationDir} | grep -E -o 'rm_.{0,3}' | cut -d "_" -f 2` if [ "${cRunMode}" != "haf" -a "${cRunMode}" != "hic" ]; then echo "run mode \"${cRunMode}\" of simulated data cannot be processed" exit 1 fi iProdMode=`echo ${SimulationDir} | grep -E -o 'pm_.{0,1}' | cut -d "_" -f 2` if ! [ "${iProdMode}" -ge "0" -a "${iProdMode}" -le "3" ]; then echo "production mode \"${iProdMode}\" of simulated data cannot be processed" exit 1 fi iNDigiDirs=`find ${SimulationDir} -maxdepth 1 -name '[0-9][0-9][0-9]' | wc -l` if [ "${iNDigiDirs}" == "0" ]; then echo 'no simulated data directories found' exit 1 fi iNDigiFiles=0 for Item in ${SimulationDir}/* ; do if [ -d "$Item" ] && [[ ! ${Item: -3} =~ [^[:digit:]] ]]; then FileName=`ls ${Item}/data/*.raw.root` if [ -f "${FileName}" ]; then if [ "${iNDigiFiles}" == "0" ]; then cDigiFileName=`basename ${FileName}` fi ((iNDigiFiles += 1)) fi fi done if [ "${iNDigiDirs}" != "${iNDigiFiles}" ]; then echo 'some simulated digi files missing' exit 1 fi if [ "${iProdMode}" == "0" ]; then iNHitFiles=0 for Item in ${SimulationDir}/* ; do if [ -d "$Item" ] && [[ ! ${Item: -3} =~ [^[:digit:]] ]]; then FileName=`ls ${Item}/data/*test.reco.root` if [ -f "${FileName}" ]; then if [ "${iNHitFiles}" == "0" ]; then cHitFileName=`basename ${FileName}` fi ((iNHitFiles += 1)) fi fi done if [ "${iNDigiDirs}" != "${iNHitFiles}" ]; then echo 'some simulated hit files missing' exit 1 fi elif [ "${iProdMode}" == "1" ]; then cHitFileName=\"\" fi if [ "${cRunMode}" == "haf" ]; then iNMCFiles=0 for Item in ${SimulationDir}/* ; do if [ -d "$Item" ] && [[ ! ${Item: -3} =~ [^[:digit:]] ]]; then FileName=`ls ${Item}/data/*.mc.root | grep -v FairRunInfo` if [ -f "${FileName}" ]; then if [ "${iNMCFiles}" == "0" ]; then cMCFileName=`basename ${FileName}` fi ((iNMCFiles += 1)) fi fi done if [ "${iNDigiDirs}" != "${iNMCFiles}" ]; then echo 'some simulated MC link files missing' exit 1 fi iNMCFiles=1 bHeavyIonCollisions=0 elif [ "${cRunMode}" == "hic" ]; then iNMCFiles=0 iNMCDirs=`find ${SimulationDir}/001/data/mc -maxdepth 1 -name '[0-9][0-9][0-9][0-9][0-9]' | wc -l` if [ "${iNMCDirs}" == "0" ]; then echo 'no simulated MC link directories found' exit 1 fi iTotalNMCDirs=$((iNDigiDirs*iNMCDirs)) for Item in ${SimulationDir}/*/data/mc/* ; do if [ -d "$Item" ] && [[ ! ${Item: -5} =~ [^[:digit:]] ]]; then FileName=`ls ${Item}/data/*.mc.root | grep -v FairRunInfo` if [ -f "${FileName}" ]; then if [ "${iNMCFiles}" == "0" ]; then cMCFileName=`basename ${FileName}` fi ((iNMCFiles += 1)) fi fi done if [ "${iTotalNMCDirs}" != "${iNMCFiles}" ]; then echo 'some simulated MC link files missing' exit 1 fi iNMCFiles=${iNMCDirs} bHeavyIonCollisions=1 fi RunID=${RunID//-/} RunID=${RunID//[T]/_} RunID=${RunID//[Z]/} else iProdMode=1 fi bIgnoreCounterSides=0 UnpackDir=${WorkingDir}/CbmTofAna_${RunID}/Unpack if [ "${iProdMode}" == "0" ]; then if [ "${bUnpackHits}" == "1" ]; then UnpackDir=${UnpackDir}Hits else UnpackDir=${UnpackDir}Digis bIgnoreCounterSides=1 fi elif [ "${iProdMode}" == "1" ]; then UnpackDir=${UnpackDir}Digis fi UnpackDir=${UnpackDir}_EVT${iEventWindow}ns_TRG${iTriggerSet}_MUL${iMultiplicity} mkdir -p ${UnpackDir}/data cd ${UnpackDir} cp -v ${MacroDir}/.rootrc ${UnpackDir}/ cp -v ${MacroDir}/rootlogon.C ${UnpackDir}/ cp -v ${MacroDir}/analysis.sh ${UnpackDir}/ cp -v ${MacroDir}/run_unpack.sh ${UnpackDir}/ if [ "${bSimData}" == "1" ]; then # FIXME: uncomment for debugging purposes only!!! #iNDigiFiles=1 if [ "${iProdMode}" == "0" -o "${iProdMode}" == "1" ]; then cp -v ${MacroDir}/build_point_events.C ${UnpackDir}/ root -b -q ''${MacroDir}'/build_point_events.C('${iNEvents}',"'${SimulationDir}'","'${cDigiFileName}'","'${cHitFileName}'",\ '${iNDigiFiles}',"'${cMCFileName}'",'${iNMCFiles}',\ "'${cGeometry}'",\ '${iEventWindow}','${iTriggerSet}','${iMultiplicity}',\ '${bUnpackHits}','${bIgnoreCounterSides}','${bHeavyIonCollisions}')' else cp -v ${MacroDir}/build_events.C ${UnpackDir}/ root -b -q ''${MacroDir}'/build_events.C('${iNEvents}',"'${SimulationDir}'","'${cDigiFileName}'",\ '${iNDigiFiles}',"'${cMCFileName}'",'${iNMCFiles}',\ '${iEventWindow}','${iTriggerSet}','${iMultiplicity}',\ '${bIgnoreCounterSides}','${bHeavyIonCollisions}','${bSimData}')' fi else if [ "${bConcatUnpacking}" == "0" ]; then cp -v ${MacroDir}/create_calib.C ${UnpackDir}/ cp -v ${MacroDir}/apply_calib.C ${UnpackDir}/ root -b -q ''${MacroDir}'/create_calib.C('${iNEvents}',"'${RunID}'",'${bEventBuilding}')' root -b -q ''${MacroDir}'/apply_calib.C('${iNEvents}',"'${RunID}'",'${bEventBuilding}','${dDigiTimeOffset}')' if [ "${bEventBuilding}" == "1" ]; then cp -v ${MacroDir}/build_events.C ${UnpackDir}/ root -b -q ''${MacroDir}'/build_events.C('${iNEvents}',"","",0,"",0,\ '${iEventWindow}','${iTriggerSet}','${iMultiplicity}',\ '${bIgnoreCounterSides}',0,'${bSimData}')' fi rm -v ${UnpackDir}/all_* rm -v ${UnpackDir}/data/*.buffer.root mkdir -p ${UnpackDir}/hst mv -v ${UnpackDir}/tofMbsUnp.hst.root ${UnpackDir}/hst/ mv -v ${UnpackDir}/tofTrbUnp.hst.root ${UnpackDir}/hst/ mv -v ${UnpackDir}/tofMbsMap.hst.root ${UnpackDir}/hst/ else if [ "${bCalibRawData}" == "1" ]; then cp -v ${MacroDir}/create_calib.C ${UnpackDir}/ root -b -q ''${MacroDir}'/create_calib.C('${iNEvents}',"'${RunID}'",'${bEventBuilding}')' rm -v ${UnpackDir}/all_* rm -v ${UnpackDir}/data/*.buffer.root mkdir -p ${UnpackDir}/hst mv -v ${UnpackDir}/tofMbsUnp.hst.root ${UnpackDir}/hst/ mv -v ${UnpackDir}/tofTrbUnp.hst.root ${UnpackDir}/hst/ else cp -v ${MacroDir}/apply_calib.C ${UnpackDir}/ root -b -q ''${MacroDir}'/apply_calib.C('${iNEvents}',"'${RunID}'",'${bEventBuilding}','${dDigiTimeOffset}')' if [ "${bEventBuilding}" == "1" ]; then cp -v ${MacroDir}/build_events.C ${UnpackDir}/ root -b -q ''${MacroDir}'/build_events.C('${iNEvents}',"","",0,"",0,\ '${iEventWindow}','${iTriggerSet}','${iMultiplicity}',\ '${bIgnoreCounterSides}',0,'${bSimData}')' fi rm -v ${UnpackDir}/all_* mkdir -p ${UnpackDir}/hst mv -v ${UnpackDir}/tofMbsUnp.hst.root ${UnpackDir}/hst/ mv -v ${UnpackDir}/tofTrbUnp.hst.root ${UnpackDir}/hst/ mv -v ${UnpackDir}/tofMbsMap.hst.root ${UnpackDir}/hst/ fi fi fi echo "" echo "Array job ran on ${SLURM_JOB_CPUS_PER_NODE} CPUs of node ${SLURM_JOB_NODELIST} in partition ${SLURM_JOB_PARTITION}." echo "" mv -v ${WorkingDir}/slurm-${SLURM_ARRAY_JOB_ID}_${SLURM_ARRAY_TASK_ID}.out ${UnpackDir}/