#!/bin/bash #SBATCH --job-name="run_track" #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 "$bIdealClustering" ]; then if [ -z "$7" ]; then echo 'no clustering flag specified' exit 1 else bIdealClustering=$7 fi fi if [ -z "$bAnalysisMCQA" ]; then if [ -z "$8" ]; then echo 'no analysis MC QA flag specified' exit 1 else bAnalysisMCQA=$8 fi fi if [ -z "$bSimData" ]; then if [ -z "$9" ]; then echo 'no data type specified' exit 1 else bSimData=$9 fi fi source ${ConfigFile} if [ -z "$VMCWORKDIR" ]; then echo 'no ROOT environment available' exit 1 fi if [ ! -f "${ListDir}/unpack_list.sh" ] || [ ! -f "${ListDir}/calib_list.sh" ] || [ ! -f "${ListDir}/track_list.sh" ]; then echo 'missing the unpack/calib/track list file' exit 1 fi if [ ! -f "${ListDir}/calib_input.sh" ]; then echo 'missing the calib input script' return 1 fi unset UnpackList unset CalibList unset TrackList unset CalibInput source "${ListDir}/unpack_list.sh" source "${ListDir}/calib_list.sh" source "${ListDir}/track_list.sh" source "${ListDir}/calib_input.sh" if [ -z "${UnpackList}" ] || [ -z "${CalibList}" ] || [ -z "${TrackList}" ]; then echo 'unpack/calib/track list is empty' exit 1 fi iNUnpackRuns=${#UnpackList[@]} iNCalibRuns=${#CalibList[@]} iNTrackRuns=${#TrackList[@]} UnpackParameters=${UnpackList[$(((SLURM_ARRAY_TASK_ID-1)/(iNCalibRuns*iNTrackRuns)))]} 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]} if [ "${bSimData}" == "1" ]; then cSetupName=`basename ${SimulationDir}` 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 RunID=${RunID//-/} RunID=${RunID//[T]/_} RunID=${RunID//[Z]/} iNDigiFiles=`find ${SimulationDir} -maxdepth 1 -name '[0-9][0-9][0-9]' | wc -l` if [ "${cRunMode}" == "haf" ]; then iNMCFiles=1 MCFileName=`basename $(ls ${SimulationDir}/001/data/*.mc.root | grep -v FairRunInfo)` bHeavyIonCollisions=0 elif [ "${cRunMode}" == "hic" ]; then iNMCFiles=`find ${SimulationDir}/001/data/mc -maxdepth 1 -name '[0-9][0-9][0-9][0-9][0-9]' | wc -l` MCFileName=`basename $(ls ${SimulationDir}/001/data/mc/00001/data/*.mc.root | grep -v FairRunInfo)` bHeavyIonCollisions=1 fi else iProdMode=1 SimulationDir=experiment MCFileName=experiment iNMCFiles=0 bHeavyIonCollisions=0 iNDigiFiles=0 cSetupName=experiment fi bIdealCalibration=0 UnpackDir=${WorkingDir}/CbmTofAna_${RunID}/Unpack if [ "${iProdMode}" == "0" ]; then if [ "${bUnpackHits}" == "1" ]; then UnpackDir=${UnpackDir}Hits else UnpackDir=${UnpackDir}Digis fi bIdealCalibration=1 elif [ "${iProdMode}" == "1" ]; then UnpackDir=${UnpackDir}Digis fi UnpackDir=${UnpackDir}_EVT${iEventWindow}ns_TRG${iTriggerSet}_MUL${iMultiplicity} CalibParameters=${CalibList[$((((SLURM_ARRAY_TASK_ID-1)/iNTrackRuns)%iNCalibRuns))]} CalibParameters=($CalibParameters) if [ "${#CalibParameters[@]}" != "5" ]; then echo 'more/less than 5 calib parameters given' exit 1 fi iCalDut=${CalibParameters[0]} iCalMRef=${CalibParameters[1]} iBRef=${CalibParameters[2]} iCalSel2=${CalibParameters[3]} iDeadTime=${CalibParameters[4]} CalibDir=${UnpackDir}/Calib_${iCalDut}${iCalMRef}${iBRef}_${iCalSel2}_DT${iDeadTime}ns CalibInputFile=`calib_input_path ${CalibInput[@]}` iResult=$? if [ "${iResult}" == "0" ]; then RunID=${CalibInput[0]} if [ "${bSimData}" == "1" ]; then RunID=${RunID//-/} RunID=${RunID//[T]/_} RunID=${RunID//[Z]/} fi iEventWindow=${CalibInput[1]} iTriggerSet=${CalibInput[2]} iMultiplicity=${CalibInput[3]} iCalDut=${CalibInput[4]} iCalMRef=${CalibInput[5]} iBRef=${CalibInput[6]} iCalSel2=${CalibInput[7]} iDeadTime=${CalibInput[8]} CalibDir=${UnpackDir}/CalibExt_CbmTofAna_${RunID}_Unpack_EVT${iEventWindow}ns_TRG${iTriggerSet}_MUL${iMultiplicity}_${iCalDut}${iCalMRef}${iBRef}_${iCalSel2}_DT${iDeadTime}ns fi if [ "${iProdMode}" == "0" ]; then CalibDir=${UnpackDir}/CalibNone fi if [ "${iProdMode}" == "0" -a "${bUnpackHits}" == "1" ]; then CluDir=${CalibDir}/CluNone bSeparateHitFile=0 else CluDir=${CalibDir}/Clu if [ "${bIdealClustering}" == "0" ]; then CluDir=${CluDir}Real_${iCalDut}${iCalMRef}${iBRef}_${iCalSel2}_DT${iDeadTime}ns else CluDir=${CluDir}Ideal fi bSeparateHitFile=1 fi if [ ! -d "${UnpackDir}" ] || [ ! -d "${CalibDir}" ] || [ ! -d "${CluDir}" ]; then echo 'unpack/calib/clu directory does not exist' exit 1 fi TrackParameters=${TrackList[$(((SLURM_ARRAY_TASK_ID-1)%iNTrackRuns))]} TrackParameters=($TrackParameters) if [ "${#TrackParameters[@]}" != "5" ]; then echo 'more/less than 5 track parameters given' exit 1 fi iSetup=${TrackParameters[0]} iDut=${TrackParameters[1]} iMRef=${TrackParameters[2]} iSel2=${TrackParameters[3]} dScaleFactor=${TrackParameters[4]} TrackDir=${CluDir}/Track_STP${iSetup}_${iDut}_${iMRef}_${iSel2}_SF${dScaleFactor} mkdir -p ${TrackDir}/data mkdir -p ${TrackDir}/hst cd ${TrackDir} cp -v ${MacroDir}/analysis.sh ${TrackDir}/ cp -v ${MacroDir}/run_track.sh ${TrackDir}/ cp -v ${MacroDir}/iter_tracks.sh ${TrackDir}/ cp -v ${MacroDir}/ana_trks.C ${TrackDir}/ ${MacroDir}/iter_tracks.sh ${MacroDir} ${UnpackDir} ${CluDir} ${TrackDir} ${SimulationDir} ${iNDigiFiles} \ ${MCFileName} ${iNMCFiles} ${cGeometry} \ ${iSetup} ${iDut} ${iMRef} ${iBRef} ${iSel2} ${dScaleFactor} \ ${bIdealCalibration} ${bHeavyIonCollisions} ${bSeparateHitFile} \ ${bIdealClustering} ${bAnalysisMCQA} ${cSetupName} ${bSimData} 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 ${TrackDir}/