#!/bin/bash ################################################################################ # General settings for simulation/experiment data analysis # ################################################################################ cPartition=long # Kronos partitions (long, main, debug) iMemoryPerCore=4096 # requested memory per physical core [MB] iNCores=2 # requested number of cores per array job # (here > 1 to reserve additional job memory) iUnpackTimeLimit=0-05:00:00 # expected unpacking job completion time iCalibTimeLimit=0-05:00:00 # expected calibration job completion time iAnaTimeLimit=0-05:00:00 # expected analysis job completion time iExtAnaTimeLimit=0-15:00:00 # expected extended analysis job completion time iTrackTimeLimit=1-12:00:00 # expected tracking job completion time bRunUnpack=1 # run unpacking stage bRunCalib=1 # run calibration stage bRunAna=1 # run analysis stage bRunTrack=0 # run tracking stage bSimData=1 # 1: simulation data analysis # 0: experiment data analysis ################################################################################ # User-specific settings # ################################################################################ ConfigFile=/lustre/nyx/cbm/users/csimon/cbmroot/development/csimon/bld/v1805_may18_new/config.sh MacroDir=/lustre/nyx/cbm/users/csimon/cbmroot/development/csimon/src/macro/tof/beamtime/sim/nov15 SimulationDir=/lustre/nyx/cbm/users/csimon/simulation/production/sps_nov15_sim ################################################################################ # simulation-specific settings # ################################################################################ if [ "${bSimData}" == "1" ]; then bConcatUnpacking=0 # NOTE: takes no effect in this run mode bCalibRawData=0 # NOTE: takes no effect in this run mode bEventBuilding=1 # NOTE: takes no effect in this run mode bUnpackHits=0 # assign ideal hits to point events (PM 0 only!) iCalibrationMode=1 # 2: combined counter calibration # 1: cluster-based counter calibration # 0: cell-based counter calibration bIdealClustering=0 bClusteringQA=1 bAnalysisMCQA=1 bExtendedAnalysis=1 bDifferentialTISAnalysis=1 AnalysisDir=/lustre/nyx/cbm/users/csimon/analysis/sps_nov15_sim cGeometry=v15e ################################################################################ # experiment-specific settings # ################################################################################ else bConcatUnpacking=1 # 1: prepare concatenation of unpacked runs # 0: unpack runs regularly bCalibRawData=0 # NOTE: in effect only in conjunction with # 'bConcatUnpacking == 1' # 1: create raw-data calibration # 0: apply raw-data calibration bEventBuilding=1 # 1: (renewed) event building from unpacked digis # 0: treat input branch entries as events bUnpackHits=0 iCalibrationMode=2 # 2: combined counter calibration # 1: cluster-based counter calibration # 0: cell-based counter calibration bIdealClustering=0 bClusteringQA=0 bAnalysisMCQA=0 bExtendedAnalysis=1 bDifferentialTISAnalysis=0 # bDifferentialTISAnalysis=1 AnalysisDir=/lustre/nyx/cbm/users/csimon/analysis/sps_nov15 cGeometry=v15g fi ################################################################################ # Debug settings (overwrite parts of the above) # ################################################################################ #cPartition=long #iUnpackTimeLimit=0-10:00:00 #iCalibTimeLimit=0-10:00:00 #iTrackTimeLimit=0-10:00:00 #iUnpackTimeLimit=0-12:00:00 #iCalibTimeLimit=0-10:00:00 #iAnaTimeLimit=0-10:00:00 #iTrackTimeLimit=0-00:20:00 #bRunUnpack=1 #bRunCalib=1 #bRunAna=0 #bRunTrack=1 #bUnpackHits=1 #bIdealClustering=1 #bClusteringQA=1 #bAnalysisMCQA=1 #bUnpackHits=0 #bIdealClustering=0 #bClusteringQA=1 #bAnalysisMCQA=1 ################################################################################ ################################################################################ ListDir=${AnalysisDir}/runs/`date -u +"%Y-%m-%dT%H-%M-%SZ"` if [ ! -f "${MacroDir}/unpack_list.sh" ] || \ [ ! -f "${MacroDir}/calib_list.sh" ] || \ [ ! -f "${MacroDir}/ana_list.sh" ] || \ [ ! -f "${MacroDir}/track_list.sh" ]; then echo 'missing at least one analysis list file' return 1 fi if [ ! -f "${MacroDir}/calib_input.sh" ]; then echo 'missing the calib input script' return 1 fi unset UnpackList unset CalibList unset AnaList unset TrackList unset CalibInput source "${MacroDir}/unpack_list.sh" source "${MacroDir}/calib_list.sh" source "${MacroDir}/ana_list.sh" source "${MacroDir}/track_list.sh" source "${MacroDir}/calib_input.sh" if [ -z "${UnpackList}" ] || [ -z "${CalibList}" ] || [ -z "${AnaList}" ] || [ -z "${TrackList}" ]; then echo 'at least one analysis list is empty' return 1 fi if [ -z "${dTimeInSpill}" ] || [ -z "${iNTISBins}" ]; then echo 'at least one TIS parameter missing' return 1 fi if [ "${bExtendedAnalysis}" == "1" ]; then if [ -z "${Chi2SHTList}" ] || [ -z "${Chi2SHTNNList}" ]; then echo 'at least one chi2 list for extended analysis is empty' return 1 fi fi mkdir -p ${ListDir}/hst cp ${MacroDir}/unpack_list.sh ${ListDir}/ cp ${MacroDir}/calib_list.sh ${ListDir}/ cp ${MacroDir}/ana_list.sh ${ListDir}/ cp ${MacroDir}/track_list.sh ${ListDir}/ cp ${MacroDir}/calib_input.sh ${ListDir}/ CalibInputFile=`calib_input_path ${CalibInput[@]}` iResult=$? if [ "${iResult}" == "0" ]; then CalibInputFile=${AnalysisDir}/${CalibInputFile} if [ -f "${CalibInputFile}" ]; then cat << EOF > ${ListDir}/calib_list.sh #!/bin/bash CalibList=( '0 0 0 0 0' ) EOF cp ${CalibInputFile} ${ListDir}/hst/ else echo 'calib input file does not exist' return 1 fi elif [ "${iResult}" == "2" ]; then echo "${CalibInputFile}" return 1 fi unset UnpackList unset CalibList unset AnaList unset TrackList unset dTimeInSpill unset iNTISBins if [ "${bExtendedAnalysis}" == "1" ]; then unset Chi2SHTList unset Chi2SHTNNList fi source "${ListDir}/unpack_list.sh" source "${ListDir}/calib_list.sh" source "${ListDir}/ana_list.sh" source "${ListDir}/track_list.sh" iNUnpackRuns=${#UnpackList[@]} iNCalibRuns=${#CalibList[@]} iNCalibRuns=$((iNUnpackRuns*iNCalibRuns)) iNAnaRuns=${#AnaList[@]} iNAnaRuns=$((iNCalibRuns*iNAnaRuns)) iNTrackRuns=${#TrackList[@]} iNTrackRuns=$((iNCalibRuns*iNTrackRuns)) if [ "${bExtendedAnalysis}" == "1" ]; then iNChi2SHTRuns=${#Chi2SHTList[@]} iNChi2SHTRuns=$((iNAnaRuns*iNChi2SHTRuns)) iNChi2SHTNNRuns=${#Chi2SHTNNList[@]} iNChi2SHTNNRuns=$((iNChi2SHTRuns*iNChi2SHTNNRuns)) iNExtAnaFinalRuns=${iNChi2SHTNNRuns} if [ "${bDifferentialTISAnalysis}" == "1" ]; then iNChi2SHTNNRuns=$((iNChi2SHTNNRuns*(1+iNTISBins))) fi fi if [ "${bRunUnpack}" == "1" ]; then cDepUnpack=$(sbatch --time=${iUnpackTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNUnpackRuns} \ ${MacroDir}/run_unpack.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${bSimData} ${bEventBuilding} ${bConcatUnpacking} \ ${bCalibRawData}) cDepUnpack=${cDepUnpack##* } fi if [ "${bRunCalib}" == "1" ]; then if [ "${bRunUnpack}" == "1" ]; then cDepCalib=$(sbatch --dependency=afterany:${cDepUnpack} \ --time=${iCalibTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNCalibRuns} \ ${MacroDir}/run_calib.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bClusteringQA} \ ${bSimData}) else cDepCalib=$(sbatch \ --time=${iCalibTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNCalibRuns} \ ${MacroDir}/run_calib.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bClusteringQA} \ ${bSimData}) fi cDepCalib=${cDepCalib##* } fi if [ "${bRunAna}" == "1" ]; then if [ "${bExtendedAnalysis}" == "1" ]; then iAnalysisMode=1 else iAnalysisMode=0 fi if [ "${bRunCalib}" == "1" ]; then cDepAna=$(sbatch --dependency=afterany:${cDepCalib} \ --time=${iAnaTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNAnaRuns} \ ${MacroDir}/run_ana.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bAnalysisMCQA} \ ${bSimData} ${iAnalysisMode} ${bDifferentialTISAnalysis}) else cDepAna=$(sbatch \ --time=${iAnaTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNAnaRuns} \ ${MacroDir}/run_ana.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bAnalysisMCQA} \ ${bSimData} ${iAnalysisMode} ${bDifferentialTISAnalysis}) fi cDepAna=${cDepAna##* } if [ "${bExtendedAnalysis}" == "1" ]; then iAnalysisMode=2 cDepAna=$(sbatch --dependency=afterany:${cDepAna} \ --time=${iExtAnaTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNChi2SHTRuns} \ ${MacroDir}/run_ana.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bAnalysisMCQA} \ ${bSimData} ${iAnalysisMode} ${bDifferentialTISAnalysis}) cDepAna=${cDepAna##* } iAnalysisMode=3 cDepAna=$(sbatch --dependency=afterany:${cDepAna} \ --time=${iAnaTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNChi2SHTNNRuns} \ ${MacroDir}/run_ana.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bAnalysisMCQA} \ ${bSimData} ${iAnalysisMode} ${bDifferentialTISAnalysis}) cDepAna=${cDepAna##* } iAnalysisMode=4 cDepAna=$(sbatch --dependency=afterany:${cDepAna} \ --time=${iAnaTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNExtAnaFinalRuns} \ ${MacroDir}/run_ana.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bAnalysisMCQA} \ ${bSimData} ${iAnalysisMode} ${bDifferentialTISAnalysis}) cDepAna=${cDepAna##* } fi fi if [ "${bRunTrack}" == "1" ]; then if [ "${bRunCalib}" == "1" ]; then cDepTrack=$(sbatch --dependency=afterany:${cDepCalib} \ --time=${iTrackTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNTrackRuns} \ ${MacroDir}/run_track.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bAnalysisMCQA} \ ${bSimData}) else cDepTrack=$(sbatch \ --time=${iTrackTimeLimit} --cpus-per-task=${iNCores} --mem-per-cpu=${iMemoryPerCore} \ --partition=${cPartition} --workdir=${AnalysisDir} --array=1-${iNTrackRuns} \ ${MacroDir}/run_track.sh ${ConfigFile} ${ListDir} ${SimulationDir} ${MacroDir} \ ${cGeometry} ${bUnpackHits} ${iCalibrationMode} ${bIdealClustering} ${bAnalysisMCQA} \ ${bSimData}) fi cDepTrack=${cDepTrack##* } fi