diff --git a/Jenkinsfile b/Jenkinsfile index 6d63ea5485a3925135d366fd8c28c72faf35e5f3..60f54510341fa4f0eda8140625e03451d49b18cf 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,25 +1,125 @@ -def datasets = ['RunA', 'RunB'] -def dataset_stages = [:] +pipeline { + agent none + environment { + SCRAM_ARCH = 'slc7_amd64_gcc900' + CMSSW_RELEASE = 'CMSSW_11_3_0_pre3' + CAMPAIGN = '113X_dataRun2_v5_automation_test_merge_v8' + ERA = 'Run2018A' + DATASET = '/AlCaPhiSym/dpg_ecal-crab_PHISYM-CMSSW_10_6_1-multifit-106X_dataRun2_v27-Run2018A_UL-Rereco_v1-3f999f7fce8f227619c0286be37d924d/USER' + LUMIMASK = '/afs/cern.ch/cms/CAF/CMSCOMM/COMM_DQM/certification/Collisions18/13TeV/Legacy_2018/Cert_314472-325175_13TeV_Legacy2018_Collisions18_JSON.txt' + } + stages { + stage('ComputeIOV') { + agent { + label 'lxplus' + } + steps { + sh """ + scram project -n CMSSW_wdir CMSSW ${CMSSW_RELEASE} + cd CMSSW_wdir/src + eval `scramv1 runtime -sh` + mkdir ExternalTools + git clone -b CMSSW https://github.com/simonepigazzini/DynamicTTree.git ExternalTools/DynamicTTree + git clone -b automation_dev https://gitlab.cern.ch/fcetorel/PhiSym.git + scram b -j + eval `scramv1 runtime -sh` + cd - + export PATH=$HOME/.local/bin:/cvmfs/cms-bril.cern.ch/brilconda/bin:$PATH + pip install --user brilws + export X509_USER_PROXY=/afs/cern.ch/user/e/ecalgit/grid_proxy.x509 + python CMSSW_wdir/src/PhiSym/EcalCalibAlgos/scripts/merge-ls-info-json.py -d ${DATASET} + cd - + eval `scramv1 runtime -sh` + cd - + python CMSSW_wdir/src/PhiSym/EcalCalibAlgos/scripts/make-iovs.py -i ls_info.json --save-isolated-intervals -o IOVmap.root + """ + stash name: 'iov', includes: 'IOVmap.root' + } + } -for(d in datasets) { - def dset = d - - dataset_stages[dset] = { - node('lxplus') { - stage(dset+': submit') { + + stage('Check config') { + agent { + label 'lxplus' + } + steps { sh """ - sleep 30 - echo submit ${dset} - """ + scram project ${CMSSW_RELEASE} + cd ${CMSSW_RELEASE}/src + eval `scramv1 runtime -sh` + mkdir ExternalTools + git clone -b CMSSW https://github.com/simonepigazzini/DynamicTTree.git ExternalTools/DynamicTTree + git clone -b automation_dev https://gitlab.cern.ch/fcetorel/PhiSym.git + scram b -j + cd - + cmsRun PhiSymMerger_cfg.py + """ + } + } + stage('SubmitMerger') { + when { + not { + environment name: 'GITLAB_OA_ACTION', value: 'approved' + } + beforeAgent true } - stage(dset+': monitor') { + agent { + label 'lxplus' + } + + steps { + + unstash 'iov' + withCredentials([usernamePassword(credentialsId: 'ecalgit-lxplus', passwordVariable: 'ECALPWD', usernameVariable: 'ECALUSER')]) { + sh """ + echo ${ECALPWD} | voms-proxy-init -voms cms --out ~/grid_proxy.x509 --valid 192:00 + scram project -n CMSSW_wdir CMSSW ${CMSSW_RELEASE} + cd CMSSW_wdir/src + eval `scramv1 runtime -sh` + mkdir ExternalTools + git clone -b CMSSW https://github.com/simonepigazzini/DynamicTTree.git ExternalTools/DynamicTTree + git clone -b automation_dev https://gitlab.cern.ch/fcetorel/PhiSym.git + scram b -j + cd - + source /cvmfs/cms.cern.ch/common/crab-setup.sh + pip3 install --prefix \$CMSSW_BASE/external/\$SCRAM_ARCH/ -I 'git+https://gitlab.cern.ch/cms-ecal-dpg/ECALELFS/automation-control.git' + export PYTHON3PATH=\$PYTHON3PATH:\$CMSSW_BASE/external/\$SCRAM_ARCH/lib/python3.8/site-packages/ + python CMSSW_wdir/src/PhiSym/EcalCalibAlgos/scripts/phisym_crab_submit.py -m submit -c ${CAMPAIGN} -d ${DATASET} -e ${ERA} -l ${LUMIMASK} -s phisym_merge -t phisymMerger_crab_config.py -o '--proxy=/afs/cern.ch/user/e/ecalgit/grid_proxy.x509' + """ + } + sh 'mv `ls -d crab_*` crab_wdir' + stash name: 'CMSSW', includes: 'CMSSW_wdir/' + stash name: 'crab', includes: 'crab_wdir/' + } + } + stage('Monitor') { + when { + not { + environment name: 'GITLAB_OA_ACTION', value: 'approved' + } + beforeAgent true + } + agent { + label 'lxplus' + } + steps { + unstash 'CMSSW' + unstash 'crab' sh """ - sleep 30 - echo monitor ${dset} - """ + cd CMSSW_wdir/ + eval `scramv1 runtime -sh` + export PYTHON3PATH=\$PYTHON3PATH:\$CMSSW_BASE/external/\$SCRAM_ARCH/lib/python3.8/site-packages/ + cd - + crab status --proxy=/afs/cern.ch/user/e/ecalgit/grid_proxy.x509 crab_wdir + ecalautomation.py -c ${CAMPAIGN} -e ${ERA} -w phisym_merge wait --resubcmd "crab resubmit --proxy=/afs/cern.ch/user/e/ecalgit/grid_proxy.x509 crab_wdir" + """ + } + } + stage('Wrap up') { + steps { + updateGitlabCommitStatus name: 'build', state: 'success' } } } } -parallel dataset_stages diff --git a/PhiSymMerger_cfg.py b/PhiSymMerger_cfg.py new file mode 100644 index 0000000000000000000000000000000000000000..2fac6bb2af15b1d3b172b615a709bee8391a3df9 --- /dev/null +++ b/PhiSymMerger_cfg.py @@ -0,0 +1,29 @@ +import FWCore.ParameterSet.Config as cms + +# The actual workflow +from PhiSym.EcalCalibAlgos.PhiSymRecoSequence_cff import phisym_reco_sequence + +process = cms.Process("PHISYM") + +# Max events is overwritten by crab +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1000) +) + +phisym_reco_sequence(process) + +# Conditions +from CondCore.CondDB.CondDB_cfi import * +process.GlobalTag = cms.ESSource("PoolDBESSource", + connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'), + globaltag = cms.string('113X_dataRun2_v5'), + toGet = cms.VPSet( + cms.PSet(record = cms.string("EcalIntercalibConstantsRcd"), + tag = cms.string("EcalIntercalibConstants_UL2017_SingleIOV_run297056_v1"), + connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS") + ) + ) +) + +# Test file +process.source.fileNames = ['/store/data/Run2018D/AlCaPhiSym/RAW/v1/000/325/170/00000/E5C9C65A-5A63-D24F-BAB0-9D80936BC31D.root'] diff --git a/env.sh b/env.sh new file mode 100644 index 0000000000000000000000000000000000000000..4f951ab6728d75b265d5d0554fde37835b1a0f39 --- /dev/null +++ b/env.sh @@ -0,0 +1,2 @@ +export CMSSW_RELEASE='CMSSW_11_3_0_pre3' + diff --git a/phisymMerger_crab_config.py b/phisymMerger_crab_config.py new file mode 100644 index 0000000000000000000000000000000000000000..781a7d1e32d0cd128d0cb9a76f28530580823529 --- /dev/null +++ b/phisymMerger_crab_config.py @@ -0,0 +1,30 @@ +import os +from CRABClient.UserUtilities import config + +config = config() + +config.General.transferLogs = True +config.General.transferOutputs = True + +config.JobType.pluginName = 'Analysis' +config.JobType.psetName = 'PhiSymMerger_cfg.py' +config.JobType.inputFiles = ['IOVmap.root'] +config.JobType.scriptExe = os.environ['CMSSW_BASE']+'/src/PhiSym/EcalCalibAlgos/production/ecalautoctrl_wrapper.sh' +config.JobType.outputFiles = ['phisym_lumi_info_json.root'] +config.JobType.priority = 30 + + +config.Data.inputDataset = '' +config.Data.inputDBS = 'phys03' +config.Data.splitting = 'LumiBased' +config.Data.unitsPerJob = 100 +config.Data.totalUnits = -1 +config.Data.publication = False +config.Data.ignoreLocality = True +config.Data.publishWithGroupName = False +#config.Data.outLFNDirBase = '/store/user/spigazzi/phiSymmetry/' +config.Data.outLFNDirBase = '/store/group/dpg_ecal/alca_ecalcalib/phiSymmetry' + +config.Site.storageSite = 'T2_CH_CERN' +#config.Site.blacklist = ['T2_US_Nebraska','T3_US_*'] +config.Site.whitelist = ['T2_CH_CERN','T2_CH_CSCS', 'T1_US_FNAL', 'T1_IT_CNAF']