From 9d3aee0d0bae776ec18607e76d3991c37a028444 Mon Sep 17 00:00:00 2001 From: Leszek Grzanka Date: Mon, 26 Feb 2024 13:54:58 +0100 Subject: [PATCH] Squashed commit of the following: commit 35a0252a43c6ed347180dc31eafc10b3bbf9b8c0 Author: Leszek Grzanka Date: Sat Feb 24 18:27:48 2024 +0100 silencing logs in the relvals; unit test refreshed commit 5bef250dbb785eb84a2622bd143fb5598f6a03a8 Author: Leszek Grzanka Date: Sat Feb 24 15:42:54 2024 +0100 Update Calibration/PPSAlCaRecoProducer/test/test_prompt_AlCaRecoProducer.sh Co-authored-by: Marco Musich commit 58b9a76193510355bf0ee86fd60e0b5042f4fe75 Author: Leszek Grzanka Date: Sat Feb 24 14:25:30 2024 +0100 Update Calibration/PPSAlCaRecoProducer/test/test_express_AlCaRecoProducer.sh Co-authored-by: Marco Musich commit 671fafaf97528ff507a96059e765374f65368833 Author: Leszek Grzanka Date: Thu Feb 22 21:26:37 2024 +0100 renaming gtStage2Digis according to PR review; unit test refreshed commit b031e8e0aadaedec6373275d2aa9c9c2d0871787 Merge: ca93802f7a4 e15c1e3da6f Author: Leszek Grzanka Date: Tue Feb 20 15:31:37 2024 +0100 Merged CMSSW_14_1_X_feature_hltGtStage2Digis_in_ALCARECO from repository CTPPS with cms-merge-topic commit e15c1e3da6f9b6867326681b9dd35c3d3339a48c Author: abellora Date: Thu Feb 15 15:02:18 2024 +0100 Added hltGtStage2Digis to seqALCARECOPPSCalMaxTracksReco Co-authored-by: Leszek Grzanka Co-authored-by: Marco Musich Co-authored-by: abellora --- .../ALCARECOPPSCalMaxTracks_Output_cff.py | 2 +- .../python/ALCARECOPPSCalMaxTracks_cff.py | 7 ++- .../PPSAlCaRecoProducer/test/README.md | 26 +++++++++ .../test/test_express_AlCaRecoProducer.sh | 51 +++++++++-------- .../test/test_express_PPSAlCaReco_output.py | 26 ++++++--- .../test/test_express_PPSAlCaReco_output.sh | 3 +- .../test/test_prompt_AlCaRecoProducer.sh | 55 ++++++++++--------- .../test/test_prompt_PPSAlCaReco_output.py | 29 +++++++--- .../test/test_prompt_PPSAlCaReco_output.sh | 3 +- .../python/relval_steps.py | 1 + 10 files changed, 131 insertions(+), 72 deletions(-) create mode 100644 Calibration/PPSAlCaRecoProducer/test/README.md diff --git a/Calibration/PPSAlCaRecoProducer/python/ALCARECOPPSCalMaxTracks_Output_cff.py b/Calibration/PPSAlCaRecoProducer/python/ALCARECOPPSCalMaxTracks_Output_cff.py index c0a15113a9939..41899d79dbcd0 100644 --- a/Calibration/PPSAlCaRecoProducer/python/ALCARECOPPSCalMaxTracks_Output_cff.py +++ b/Calibration/PPSAlCaRecoProducer/python/ALCARECOPPSCalMaxTracks_Output_cff.py @@ -29,7 +29,7 @@ 'keep recoForwardProtons_ctppsProtonsAlCaRecoProducer_*_*', # HLT info - 'keep *_hltGtStage2ObjectMap_*_*', + 'keep *_gtStage2DigisAlCaRecoProducer_*_*', 'keep edmTriggerResults_*_*_*', 'keep triggerTriggerEvent_*_*_*' ) diff --git a/Calibration/PPSAlCaRecoProducer/python/ALCARECOPPSCalMaxTracks_cff.py b/Calibration/PPSAlCaRecoProducer/python/ALCARECOPPSCalMaxTracks_cff.py index 8aca8139fe15d..588a62ea89e86 100644 --- a/Calibration/PPSAlCaRecoProducer/python/ALCARECOPPSCalMaxTracks_cff.py +++ b/Calibration/PPSAlCaRecoProducer/python/ALCARECOPPSCalMaxTracks_cff.py @@ -13,15 +13,18 @@ from EventFilter.CTPPSRawToDigi.ctppsRawToDigi_cff import ctppsDiamondRawToDigi as _ctppsDiamondRawToDigi from EventFilter.CTPPSRawToDigi.ctppsRawToDigi_cff import totemTimingRawToDigi as _totemTimingRawToDigi from EventFilter.CTPPSRawToDigi.ctppsRawToDigi_cff import ctppsPixelDigis as _ctppsPixelDigis +from EventFilter.L1TRawToDigi.gtStage2Digis_cfi import gtStage2Digis as _gtStage2Digis ctppsDiamondRawToDigiAlCaRecoProducer = _ctppsDiamondRawToDigi.clone(rawDataTag = 'hltPPSCalibrationRaw') totemTimingRawToDigiAlCaRecoProducer = _totemTimingRawToDigi.clone(rawDataTag = 'hltPPSCalibrationRaw') ctppsPixelDigisAlCaRecoProducer = _ctppsPixelDigis.clone(inputLabel = 'hltPPSCalibrationRaw') +gtStage2DigisAlCaRecoProducer = _gtStage2Digis.clone(InputLabel="hltFEDSelectorL1") ctppsRawToDigiTaskAlCaRecoProducer = cms.Task( ctppsDiamondRawToDigiAlCaRecoProducer, totemTimingRawToDigiAlCaRecoProducer, - ctppsPixelDigisAlCaRecoProducer + ctppsPixelDigisAlCaRecoProducer, + gtStage2DigisAlCaRecoProducer ) ALCARECOPPSCalMaxTracksRaw2Digi = cms.Sequence(ctppsRawToDigiTaskAlCaRecoProducer) @@ -102,4 +105,4 @@ # 6. master sequence object #------------------------------------------------------ -seqALCARECOPPSCalMaxTracksReco = cms.Sequence( ALCARECOPPSCalMaxTracksFilter + ALCARECOPPSCalMaxTracksRaw2Digi + recoPPSSequenceAlCaRecoProducer) \ No newline at end of file +seqALCARECOPPSCalMaxTracksReco = cms.Sequence( ALCARECOPPSCalMaxTracksFilter + ALCARECOPPSCalMaxTracksRaw2Digi + recoPPSSequenceAlCaRecoProducer) diff --git a/Calibration/PPSAlCaRecoProducer/test/README.md b/Calibration/PPSAlCaRecoProducer/test/README.md new file mode 100644 index 0000000000000..186b82d16c614 --- /dev/null +++ b/Calibration/PPSAlCaRecoProducer/test/README.md @@ -0,0 +1,26 @@ +# Running tests on lxplus + + +## Using scram + +To be able to run tests locally enable re-director used internally by `cmsbuild`: + +``` +CMS_PATH="/cvmfs/cms-ib.cern.ch" SITECONFIG_PATH="/cvmfs/cms-ib.cern.ch/SITECONF/local" scram b runtests +``` + +## Manually (to inspect test output files) + +To run the tests in this directory (`Calibration/PPSAlCaRecoProducer/test/`) type: + +``` +CMS_PATH="/cvmfs/cms-ib.cern.ch" SITECONFIG_PATH="/cvmfs/cms-ib.cern.ch/SITECONF/local" ./test_express_AlCaRecoProducer.sh +``` + +and + +``` +SCRAM_TEST_PATH=. ./test_express_PPSAlCaReco_output.sh +``` + +The same can be done for prompt tests diff --git a/Calibration/PPSAlCaRecoProducer/test/test_express_AlCaRecoProducer.sh b/Calibration/PPSAlCaRecoProducer/test/test_express_AlCaRecoProducer.sh index 697565d547e5f..d71d54a405101 100755 --- a/Calibration/PPSAlCaRecoProducer/test/test_express_AlCaRecoProducer.sh +++ b/Calibration/PPSAlCaRecoProducer/test/test_express_AlCaRecoProducer.sh @@ -1,29 +1,32 @@ #!/bin/bash function die { echo $1: status $2; exit $2; } -customise_commands="process.GlobalTag.toGet = cms.VPSet()\ -\nprocess.GlobalTag.toGet.append(cms.PSet(record = cms.string(\"AlCaRecoTriggerBitsRcd\"),tag = cms.string(\"AlCaRecoHLTpaths_PPS2022_express_v1\"), connect = cms.string(\"frontier://FrontierProd/CMS_CONDITIONS\")))\ -\nprocess.GlobalTag.toGet.append(cms.PSet(record = cms.string(\"PPSTimingCalibrationLUTRcd\"),tag = cms.string(\"PPSDiamondTimingCalibrationLUT_test\"), connect = cms.string(\"frontier://FrontierProd/CMS_CONDITIONS\")))\ -\nprocess.ALCARECOPPSCalMaxTracksFilter.TriggerResultsTag = cms.InputTag(\"TriggerResults\",\"\",\"HLTX\")" +# customisation command needed for all tests cases +COMMON_CUSTOM="process.ALCARECOPPSCalMaxTracksFilter.TriggerResultsTag = cms.InputTag(\"TriggerResults\",\"\",\"HLTX\")" -INPUTFILE="/store/group/alca_global/pps_alcareco_producer_tests/outputALCAPPS_single.root" -COMMMAND=`xrdfs cms-xrd-global.cern.ch locate $INPUTFILE` -STATUS=$? -echo "xrdfs command status = "$STATUS -if [ $STATUS -eq 0 ]; then - echo "Using file ${INPUTFILE}. Running in ${SCRAM_TEST_PATH}." +# test on 2022 data +INPUTFILE_355207="/store/data/Run2022B/AlCaPPS/RAW/v1/000/355/207/00000/c23440f4-49c0-44aa-b8f6-f40598fb4705.root" + +# new test on generated data, with same structure as data expected in 2024 +INPUTFILE_367104="/store/group/alca_global/pps_alcareco_producer_tests/outputALCAPPSExpress.root" + +# all input files and customisation commands to loop through +INPUTFILES=($INPUTFILE_355207 $INPUTFILE_367104) + +# test case loop +for TEST_RUN_NO in {0..1}; do + INPUTFILE=${INPUTFILES[$TEST_RUN_NO]} + echo "Using file: ${INPUTFILE} , Running in: ${SCRAM_TEST_PATH} ." (cmsDriver.py testExpressPPSAlCaRecoProducer -s ALCAPRODUCER:PPSCalMaxTracks,ENDJOB \ - --process ALCARECO \ - --scenario pp \ - --era ctpps_2018 \ - --conditions auto:run3_data_express \ - --data \ - --datatier ALCARECO \ - --eventcontent ALCARECO \ - --nThreads 8 \ - --number 100 --filein ${INPUTFILE} \ - --fileout file:outputALCAPPS_RECO_express.root \ - --customise_commands="$customise_commands") || die 'failed running test_express_AlCaRecoProducer' $? -else - die "SKIPPING test, file ${INPUTFILE} not found" 0 -fi + --process ALCARECO \ + --scenario pp \ + --era run3_common \ + --conditions auto:run3_data_express \ + --data \ + --datatier ALCARECO \ + --eventcontent ALCARECO \ + --nThreads 8 \ + --number 100 --filein ${INPUTFILE} \ + --fileout file:outputALCAPPS_RECO_express_test${TEST_RUN_NO}.root \ + --customise_commands="$COMMON_CUSTOM") || die 'failed running test_express_AlCaRecoProducer' $? +done diff --git a/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.py b/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.py index df89229ede911..c9eec37375c1d 100644 --- a/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.py +++ b/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.py @@ -1,13 +1,25 @@ import FWCore.ParameterSet.Config as cms -# load era modifier to run on 2018 data -from Configuration.Eras.Modifier_ctpps_2018_cff import ctpps_2018 +# load era modifier to run on 2022 data +from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022 -process = cms.Process( 'TEST',ctpps_2018) +process = cms.Process( 'TEST',ctpps_2022) + +# command line options +import FWCore.ParameterSet.VarParsing as VarParsing +options = VarParsing.VarParsing('analysis') +options.register('runNo', + 1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Run number") +options.parseArguments() + +run_no = options.runNo # LHCInfo plotter process.load('Validation.CTPPS.ctppsLHCInfoPlotter_cfi') -process.ctppsLHCInfoPlotter.outputFile = "alcareco_lhc_info_express.root" +process.ctppsLHCInfoPlotter.outputFile = f"alcareco_lhc_info_express_{run_no}.root" # Load geometry from DB process.load("Geometry.VeryForwardGeometry.geometryRPFromDB_cfi") @@ -21,7 +33,7 @@ rpId_56_N = cms.uint32(103), rpId_56_F = cms.uint32(123), - outputFile = cms.string("alcareco_tracks_express.root") + outputFile = cms.string(f"alcareco_tracks_express_{run_no}.root") ) # reconstruction plotter @@ -35,7 +47,7 @@ rpId_56_N = cms.uint32(103), rpId_56_F = cms.uint32(123), - outputFile = cms.string("alcareco_protons_express.root") + outputFile = cms.string(f"alcareco_protons_express_{run_no}.root") ) process.p = cms.Path( @@ -55,7 +67,7 @@ process.source = cms.Source( 'PoolSource', fileNames = cms.untracked.vstring( - 'file:outputALCAPPS_RECO_express.root', + options.inputFiles, ), inputCommands = cms.untracked.vstring( 'keep *' diff --git a/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.sh b/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.sh index a6a0bd232c279..04e48e3d650a4 100755 --- a/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.sh +++ b/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.sh @@ -1,4 +1,5 @@ #!/bin/bash function die { echo $1: status $2; exit $2; } -(cmsRun ${SCRAM_TEST_PATH}/test_express_PPSAlCaReco_output.py) || die 'failed running test_express_PPSAlCaReco_output.py' $? +cmsRun ${SCRAM_TEST_PATH}/test_express_PPSAlCaReco_output.py inputFiles=file:outputALCAPPS_RECO_express_test0.root runNo=355207 || die 'failed running test_express_PPSAlCaReco_output.py' $? +cmsRun ${SCRAM_TEST_PATH}/test_express_PPSAlCaReco_output.py inputFiles=file:outputALCAPPS_RECO_express_test1.root runNo=367104 || die 'failed running test_express_PPSAlCaReco_output.py' $? diff --git a/Calibration/PPSAlCaRecoProducer/test/test_prompt_AlCaRecoProducer.sh b/Calibration/PPSAlCaRecoProducer/test/test_prompt_AlCaRecoProducer.sh index 6d485f1f40870..9b56b1c2ba9fb 100755 --- a/Calibration/PPSAlCaRecoProducer/test/test_prompt_AlCaRecoProducer.sh +++ b/Calibration/PPSAlCaRecoProducer/test/test_prompt_AlCaRecoProducer.sh @@ -1,31 +1,32 @@ #!/bin/bash function die { echo $1: status $2; exit $2; } -customise_commands="process.GlobalTag.toGet = cms.VPSet()\ -\nprocess.GlobalTag.toGet.append(cms.PSet(record = cms.string(\"AlCaRecoTriggerBitsRcd\"),tag = cms.string(\"AlCaRecoHLTpaths_PPS2022_prompt_v1\"), connect = cms.string(\"frontier://FrontierProd/CMS_CONDITIONS\")))\ -\nprocess.GlobalTag.toGet.append(cms.PSet(record = cms.string(\"PPSTimingCalibrationLUTRcd\"),tag = cms.string(\"PPSDiamondTimingCalibrationLUT_test\"), connect = cms.string(\"frontier://FrontierProd/CMS_CONDITIONS\")))\ -\nprocess.ALCARECOPPSCalMaxTracksFilter.TriggerResultsTag = cms.InputTag(\"TriggerResults\",\"\",\"HLTX\")" +# customisation command needed for all tests cases +COMMON_CUSTOM="process.ALCARECOPPSCalMaxTracksFilter.TriggerResultsTag = cms.InputTag(\"TriggerResults\",\"\",\"HLTX\")" -INPUTFILE="/store/group/alca_global/pps_alcareco_producer_tests/outputALCAPPS_single.root" -COMMMAND=`xrdfs cms-xrd-global.cern.ch locate $INPUTFILE` -STATUS=$? -echo "xrdfs command status = "$STATUS -if [ $STATUS -eq 0 ]; then - echo "Using file ${INPUTFILE}. Running in ${SCRAM_TEST_PATH}." - # note we currently use `auto:run3_data_express` GT - # the correct GT (auto:run3_data_prompt) doesn't have LHCInfo record for run 322022 which corresponds to our face ALCARAW file - (cmsDriver.py testPromptPPSAlCaRecoProducer -s ALCAPRODUCER:PPSCalMaxTracks,ENDJOB \ - --process ALCARECO \ - --scenario pp \ - --era ctpps_2018 \ - --conditions auto:run3_data_express \ - --data \ - --datatier ALCARECO \ - --eventcontent ALCARECO \ - --nThreads 8 \ - --number 100 --filein ${INPUTFILE} \ - --fileout file:outputALCAPPS_RECO_prompt.root \ - --customise_commands="$customise_commands") || die 'failed running test_prompt_AlCaRecoProducer' $? -else - die "SKIPPING test, file ${INPUTFILE} not found" 0 -fi +# test on 2022 data +INPUTFILE_355207="/store/data/Run2022B/AlCaPPS/RAW/v1/000/355/207/00000/c23440f4-49c0-44aa-b8f6-f40598fb4705.root" + +# new test on generated data, with same structure as data expected in 2024 +INPUTFILE_367104="/store/group/alca_global/pps_alcareco_producer_tests/outputALCAPPSPrompt.root" + +# all input files and customisation commands to loop through +INPUTFILES=($INPUTFILE_355207 $INPUTFILE_367104) + +# test case loop +for TEST_RUN_NO in {0..1}; do + INPUTFILE=${INPUTFILES[$TEST_RUN_NO]} + echo "Using file: ${INPUTFILE} , Running in: ${SCRAM_TEST_PATH} ." + (cmsDriver.py testpromptPPSAlCaRecoProducer -s ALCAPRODUCER:PPSCalMaxTracks,ENDJOB \ + --process ALCARECO \ + --scenario pp \ + --era run3_common \ + --conditions auto:run3_data_prompt \ + --data \ + --datatier ALCARECO \ + --eventcontent ALCARECO \ + --nThreads 8 \ + --number 100 --filein ${INPUTFILE} \ + --fileout file:outputALCAPPS_RECO_prompt_test${TEST_RUN_NO}.root \ + --customise_commands="$COMMON_CUSTOM") || die 'failed running test_prompt_AlCaRecoProducer' $? +done diff --git a/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.py b/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.py index 27cb8bb23aeb1..887856fe16475 100644 --- a/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.py +++ b/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.py @@ -1,13 +1,25 @@ import FWCore.ParameterSet.Config as cms -# load era modifier to run on 2018 data -from Configuration.Eras.Modifier_ctpps_2018_cff import ctpps_2018 +# load era modifier to run on 2022 data +from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022 -process = cms.Process( 'TEST',ctpps_2018) +process = cms.Process( 'TEST',ctpps_2022) + +# command line options +import FWCore.ParameterSet.VarParsing as VarParsing +options = VarParsing.VarParsing('analysis') +options.register('runNo', + 1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Run number") +options.parseArguments() + +run_no = options.runNo # LHCInfo plotter process.load('Validation.CTPPS.ctppsLHCInfoPlotter_cfi') -process.ctppsLHCInfoPlotter.outputFile = "alcareco_lhc_info_prompt.root" +process.ctppsLHCInfoPlotter.outputFile = f"alcareco_lhc_info_prompt_{run_no}.root" # Load geometry from DB process.load("Geometry.VeryForwardGeometry.geometryRPFromDB_cfi") @@ -21,7 +33,7 @@ rpId_56_N = cms.uint32(103), rpId_56_F = cms.uint32(123), - outputFile = cms.string("alcareco_tracks_prompt.root") + outputFile = cms.string(f"alcareco_tracks_prompt_{run_no}.root") ) # reconstruction plotter @@ -35,7 +47,7 @@ rpId_56_N = cms.uint32(103), rpId_56_F = cms.uint32(123), - outputFile = cms.string("alcareco_protons_prompt.root") + outputFile = cms.string(f"alcareco_protons_prompt_{run_no}.root") ) process.p = cms.Path( @@ -51,12 +63,11 @@ # load GT process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run3_data_express') -# process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run3_data_prompt') # --> No LHCInfo, temporarily using the express GT +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run3_data_prompt') process.source = cms.Source( 'PoolSource', fileNames = cms.untracked.vstring( - 'file:outputALCAPPS_RECO_prompt.root', + options.inputFiles, ), inputCommands = cms.untracked.vstring( 'keep *' diff --git a/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.sh b/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.sh index f6de023687003..343ed48b48957 100755 --- a/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.sh +++ b/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.sh @@ -1,4 +1,5 @@ #!/bin/bash function die { echo $1: status $2; exit $2; } -(cmsRun ${SCRAM_TEST_PATH}/test_prompt_PPSAlCaReco_output.py) || die 'failed running test_prompt_PPSAlCaReco_output.py' $? +cmsRun ${SCRAM_TEST_PATH}/test_prompt_PPSAlCaReco_output.py inputFiles=file:outputALCAPPS_RECO_prompt_test0.root runNo=355207 || die 'failed running test_prompt_PPSAlCaReco_output.py' $? +cmsRun ${SCRAM_TEST_PATH}/test_prompt_PPSAlCaReco_output.py inputFiles=file:outputALCAPPS_RECO_prompt_test1.root runNo=367104 || die 'failed running test_prompt_PPSAlCaReco_output.py' $? diff --git a/Configuration/PyReleaseValidation/python/relval_steps.py b/Configuration/PyReleaseValidation/python/relval_steps.py index 7dce8d60adb46..6058083de70a9 100644 --- a/Configuration/PyReleaseValidation/python/relval_steps.py +++ b/Configuration/PyReleaseValidation/python/relval_steps.py @@ -2424,6 +2424,7 @@ def lhegensim2018ml(fragment,howMuch): '--data': '', '--datatier':'ALCARECO', '--eventcontent':'ALCARECO', + '--customise_commands':'"process.ctppsRawToDigiTaskAlCaRecoProducer = cms.Task(process.ctppsDiamondRawToDigiAlCaRecoProducer, process.totemTimingRawToDigiAlCaRecoProducer, process.ctppsPixelDigisAlCaRecoProducer)"' # disable gtStage2DigisAlCaRecoProducer as 2022 data used in this workflow doesn't have necessary products } steps['TIER0EXPPPSCALALIG']={'-s':'RAW2DIGI,L1Reco,ALCAPRODUCER:PPSCalTrackBasedSel,ENDJOB',