X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGPP%2Fbenchmark%2Fbenchmark.sh;h=52017b3a2ca96471b0d57604e9154ecc789e3778;hb=ef15db959d0b0b7cc73e04bdd763e3dbda9955a2;hp=8a374093c9e0c6125ca2352915d9e0f9c8e86af9;hpb=675cf138f6ad8f580292c4d6d2a32f15837eb7af;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGPP/benchmark/benchmark.sh b/PWGPP/benchmark/benchmark.sh index 8a374093c9e..52017b3a2ca 100755 --- a/PWGPP/benchmark/benchmark.sh +++ b/PWGPP/benchmark/benchmark.sh @@ -155,7 +155,11 @@ goCPass0() #runCPassX/C expects the raw chunk to be linked in the run dir #despite it being accessed by the full path - ln -s ${infile} ${runpath}/${chunkName} + if [[ $copyInputData == 0 ]]; then + ln -s ${infile} ${runpath}/${chunkName} + else + copyFileToLocal ${infile} ${runpath}/${chunkName} + fi #####MC if [[ -n ${generateMC} ]]; then @@ -191,7 +195,7 @@ goCPass0() fi ###### - if [[ ! -f ${inputList} && -z ${pretend} ]]; then + if [[ "${inputList}" == "${inputList%%://*}" && ! -f "${inputList}" && -z ${pretend} ]]; then touch ${doneFileTmp} echo "input file ${inputList} not found, exiting..." >> ${doneFileTmp} cp "$doneFileTmp" "$doneFile" || rm -f "$doneFileTmp" "$doneFile" @@ -256,7 +260,7 @@ goCPass0() fi #run CPass0 - echo "${runpath}/runCPass0.sh ${infile} ${nEvents} ${runNumber} ${ocdbPath} ${recoTriggerOptions}" + echo "${runpath}/runCPass0.sh /${infile} ${nEvents} ${runNumber} ${ocdbPath} ${recoTriggerOptions}" if [[ -n ${pretend} ]]; then sleep ${pretendDelay} touch AliESDs.root @@ -265,8 +269,8 @@ goCPass0() touch rec.log touch calib.log else - echo ./runCPass0.sh "${infile}" "${nEvents}" "${runNumber}" "${ocdbPath}" "${recoTriggerOptions}" - ./runCPass0.sh "${infile}" "${nEvents}" "${runNumber}" "${ocdbPath}" "${recoTriggerOptions}" + #caveat: in the local case, first arg must start with a slash + ./runCPass0.sh "/${infile}" "${nEvents}" "${runNumber}" "${ocdbPath}" "${recoTriggerOptions}" fi #move stuff to final destination @@ -347,7 +351,7 @@ goCPass1() #Packages= ;OutputDir= ;LPMPass= ;TriggerAlias= ;LPMRunNumber= ;LPMProductionType= ;LPMInteractionType= ;LPMProductionTag= ;LPMAnchorRun= ;LPMAnchorProduction= ;LPMAnchorYear= export PRODUCTION_METADATA="OutputDir=cpass1" - if [[ ! -f ${inputList} && -z ${pretend} ]]; then + if [[ "${inputList}" == "${inputList%%://*}" && ! -f "${inputList}" && -z ${pretend} ]]; then touch ${doneFileTmp} echo "input file ${inputList} not found, exiting..." >> ${doneFileTmp} cp "$doneFileTmp" "$doneFile" || rm -f "$doneFileTmp" "$doneFile" @@ -399,7 +403,11 @@ goCPass1() fi #this is needed for runCPass1.sh - ln -s ${infile} ${runpath}/${chunkName} + if [[ $copyInputData == 0 ]]; then + ln -s ${infile} ${runpath}/${chunkName} + else + copyFileToLocal ${infile} ${runpath}/${chunkName} + fi logOutputDir=${runpath} [[ -n ${logToFinalDestination} ]] && logOutputDir=${outputDir} @@ -503,7 +511,7 @@ goCPass1() #run CPass1 chmod u+x runCPass1.sh - echo "${runpath}/runCPass1.sh ${infile} ${nEvents} ${runNumber} ${ocdbPath} ${recoTriggerOptions}" + echo "${runpath}/runCPass1.sh /${infile} ${nEvents} ${runNumber} ${ocdbPath} ${recoTriggerOptions}" if [[ -n ${pretend} ]]; then sleep ${pretendDelay} touch AliESDs_Barrel.root @@ -521,7 +529,8 @@ goCPass1() touch qa.log touch filtering.log FilterEvents_Trees.root else - ./runCPass1.sh "${infile}" "${nEvents}" "${runNumber}" "${ocdbPath}" "${recoTriggerOptions}" + #caveat: in the local case, first arg must start with a slash + ./runCPass1.sh "/${infile}" "${nEvents}" "${runNumber}" "${ocdbPath}" "${recoTriggerOptions}" [[ ! -f AliESDs_Barrel.root && -f Barrel/AliESDs.root ]] && mv Barrel/AliESDs.root AliESDs_Barrel.root [[ ! -f AliESDfriends_Barrel.root && -f Barrel/AliESDfriends.root ]] && mv Barrel/AliESDfriends.root AliESDfriends_Barrel.root @@ -707,7 +716,7 @@ goMergeCPass0() /bin/ls -1 ${outputDir}/*/AliESDfriends_v1.root 2>/dev/null > ${calibrationFilesToMerge} fi - echo "${mergingScript} ${calibrationFilesToMerge} ${runNumber} local://./OCDB ${ocdbStorage}" + echo "${mergingScript} ${calibrationFilesToMerge} ${runNumber} local://./OCDB defaultOCDB=${ocdbStorage} fileAccessMethod=nocopy" if [[ -n ${pretend} ]]; then sleep ${pretendDelay} touch CalibObjects.root @@ -719,7 +728,7 @@ goMergeCPass0() echo "some calibration" >> ./OCDB/TPC/Calib/TimeGain/someCalibObject_0-999999_cpass0.root echo "some calibration" >> ./OCDB/TPC/Calib/TimeDrift/otherCalibObject_0-999999_cpass0.root else - ./${mergingScript} ${calibrationFilesToMerge} ${runNumber} "local://./OCDB" ${ocdbStorage} >> "mergeMakeOCDB.log" + ./${mergingScript} ${calibrationFilesToMerge} ${runNumber} "local://./OCDB" defaultOCDB=${ocdbStorage} fileAccessMethod=nocopy >> "mergeMakeOCDB.log" #produce the calib trees for expert QA (dcsTime.root) goMakeLocalOCDBaccessConfig ./OCDB @@ -895,8 +904,8 @@ goMergeCPass1() echo "/bin/ls -1 ${outputDir}/*/QAresults*.root | while read x; do echo ${x%/*}; done | sort | uniq > ${qaFilesToMerge}" /bin/ls -1 ${outputDir}/*/QAresults*.root | while read x; do echo ${x%/*}; done | sort | uniq > ${qaFilesToMerge} fi - - echo "${mergingScript} ${calibrationFilesToMerge} ${runNumber} local://./OCDB ${ocdbStorage}" + + echo "${mergingScript} ${calibrationFilesToMerge} ${runNumber} local://./OCDB defaultOCDB=${ocdbStorage} fileAccessMethod=nocopy" if [[ -n ${pretend} ]]; then sleep ${pretendDelay} touch ocdb.log @@ -910,7 +919,7 @@ goMergeCPass1() touch ${qaMergedOutputFileName} mkdir -p OCDB else - ./${mergingScript} ${calibrationFilesToMerge} ${runNumber} "local://./OCDB" ${ocdbStorage} + ./${mergingScript} ${calibrationFilesToMerge} ${runNumber} "local://./OCDB" defaultOCDB=${ocdbStorage} fileAccessMethod=nocopy #merge QA (and filtered trees) [[ -n ${AliAnalysisTaskFilteredTree_fLowPtTrackDownscaligF} ]] && export AliAnalysisTaskFilteredTree_fLowPtTrackDownscaligF @@ -1025,9 +1034,9 @@ goSubmitMakeflow() #if which greadlink; then self=$(greadlink -f "${0}"); fi #for reference copy the setup to the output dir - cp ${self} ${commonOutputPath} - cp ${configFile} ${commonOutputPath} - cp ${inputFileList} ${commonOutputPath} + paranoidCp ${self} ${commonOutputPath} + paranoidCp ${configFile} ${commonOutputPath} + paranoidCp ${inputFileList} ${commonOutputPath} #submit - use makeflow if available, fall back to old stuff when makeflow not there if which makeflow; then @@ -2556,6 +2565,7 @@ parseConfig() logToFinalDestination=1 ALIROOT_FORCE_COREDUMP=1 pretendDelay=0 + copyInputData=0 #first, source the config file if [ -f ${configFile} ]; then @@ -2612,6 +2622,31 @@ aliroot() return 0 } +copyFileToLocal() +( + #copies a file from either a remote or local location to a local destination + src="$1" + dst="$2" + + proto="${src%%://*}" + if [[ "$proto" == "$src" ]]; then + cp "$src" "$dst" + else + case "$proto" in + root) + xrdcp -f "$src" "$dst" + ;; + http) + curl -L "$src" -O "$dst" + ;; + *) + echo "protocol not supported: $proto" + return 1 + ;; + esac + fi +) + paranoidCp() ( #recursively copy files and directories