1 from alternateValidationTemplates
import *
2 from offlineValidationTemplates
import *
3 from geometryComparisonTemplates
import *
4 from monteCarloValidationTemplates
import *
5 from trackSplittingValidationTemplates
import *
6 from zMuMuValidationTemplates
import *
7 from TkAlExceptions
import AllInOneError
20 conditionsTemplate=
"""
21 process.conditionsIn.oO[rcdName]Oo. = CalibTracker.Configuration.Common.PoolDBESSource_cfi.poolDBESSource.clone(
22 connect = cms.string('.oO[connectString]Oo.'),
23 toGet = cms.VPSet(cms.PSet(record = cms.string('.oO[rcdName]Oo.'),
24 tag = cms.string('.oO[tagName]Oo.')
28 process.prefer_conditionsIn.oO[rcdName]Oo. = cms.ESPrefer("PoolDBESSource", "conditionsIn.oO[rcdName]Oo.")
39 #export STAGE_SVCCLASS=cmscafuser
40 #save path to the LSF batch working directory (/pool/lsf)
42 export LSFWORKDIR=`pwd -P`
43 echo LSF working directory is $LSFWORKDIR
44 source /afs/cern.ch/cms/caf/setup.sh
45 eos='/afs/cern.ch/project/eos/installation/cms/bin/eos.select'
46 cd .oO[CMSSW_BASE]Oo./src
47 export SCRAM_ARCH=.oO[SCRAM_ARCH]Oo.
49 #rfmkdir -p .oO[datadir]Oo. &>! /dev/null
51 #remove possible result file from previous runs
52 previous_results=$($eos ls /store/caf/user/$USER/.oO[eosdir]Oo.)
53 for file in ${previous_results}
55 if [ ${file} = /store/caf/user/$USER/.oO[eosdir]Oo./.oO[outputFile]Oo. ]
57 xrdcp -f root://eoscms//eos/cms${file} root://eoscms//eos/cms${file}.bak
61 if [[ $HOSTNAME = lxplus[0-9]*\.cern\.ch ]] # check for interactive mode
63 rfmkdir -p .oO[workdir]Oo.
64 rm -f .oO[workdir]Oo./*
67 mkdir -p $LSFWORKDIR/TkAllInOneTool
68 cd $LSFWORKDIR/TkAllInOneTool
71 # rm -f .oO[workdir]Oo./*
79 echo "List of files in $(pwd):"
86 rfmkdir -p .oO[logdir]Oo. >&! /dev/null
87 gzip -f LOGFILE_*_.oO[name]Oo..log
88 find . -maxdepth 1 -name "LOGFILE*.oO[alignmentName]Oo.*" -print | xargs -I {} bash -c "rfcp {} .oO[logdir]Oo."
90 #copy root files to eos
91 $eos mkdir -p /store/caf/user/$USER/.oO[eosdir]Oo.
92 if [ .oO[parallelJobs]Oo. -eq 1 ]
94 root_files=$(ls --color=never -d *.oO[alignmentName]Oo.*.root)
96 root_files=$(ls --color=never -d *.oO[alignmentName]Oo._.oO[nIndex]Oo.*.root)
100 for file in ${root_files}
102 xrdcp -f ${file} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo.
107 if [[ $HOSTNAME = lxplus[0-9]*\.cern\.ch ]] # check for interactive mode
109 rm -rf .oO[workdir]Oo.
119 eos='/afs/cern.ch/project/eos/installation/cms/bin/eos.select'
121 cd .oO[CMSSW_BASE]Oo./src
122 export SCRAM_ARCH=.oO[SCRAM_ARCH]Oo.
123 eval `scramv1 ru -sh`
125 #create results-directory and copy used configuration there
126 rfmkdir -p .oO[datadir]Oo.
127 rfcp .oO[logdir]Oo./usedConfiguration.ini .oO[datadir]Oo.
129 if [[ $HOSTNAME = lxplus[0-9]*\.cern\.ch ]] # check for interactive mode
131 mkdir -p .oO[workdir]Oo.
136 echo "Working directory: $(pwd -P)"
138 ###############################################################################
139 # download root files from eos
140 root_files=$($eos ls /store/caf/user/$USER/.oO[eosdir]Oo. \
141 | grep ".root$" | grep -v "result.root$")
142 #for file in ${root_files}
144 # xrdcp -f root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./${file} .
151 .oO[CompareAlignments]Oo.
153 .oO[RunExtendedOfflineValidation]Oo.
154 .oO[RunTrackSplitPlot]Oo.
155 .oO[MergeZmumuPlots]Oo.
161 #zip stdout and stderr from the farm jobs
163 find . -name "*.stderr" -exec gzip -f {} \;
164 find . -name "*.stdout" -exec gzip -f {} \;
170 mergeParallelResults=
"""
172 .oO[copyMergeScripts]Oo.
176 ls -al .oO[mergeParallelFilePrefixes]Oo. > .oO[datadir]Oo./log_rootfilelist.txt
178 # Remove parallel job files
185 compareAlignmentsExecution=
"""
186 #merge for .oO[validationId]Oo. if it does not exist or is not up-to-date
187 echo -e "\n\nComparing validations"
188 $eos mkdir -p /store/caf/user/$USER/.oO[eosdir]Oo./
189 cp .oO[Alignment/OfflineValidation]Oo./scripts/compareFileAges.C .
190 root -x -q -b -l "compareFileAges.C(\\\"root://eoscms.cern.ch//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./.oO[validationId]Oo._result.root\\\", \\\".oO[compareStringsPlain]Oo.\\\")"
191 comparisonNeeded=${?}
193 if [[ ${comparisonNeeded} -eq 1 ]]
195 cp .oO[Alignment/OfflineValidation]Oo./scripts/compareAlignments.cc .
196 root -x -q -b -l 'compareAlignments.cc++(\".oO[compareStrings]Oo.\", ".oO[legendheader]Oo.", ".oO[customtitle]Oo.", ".oO[customrighttitle]Oo.", .oO[bigtext]Oo.)'
197 mv result.root .oO[validationId]Oo._result.root
198 xrdcp -f .oO[validationId]Oo._result.root root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo.
200 echo ".oO[validationId]Oo._result.root is up-to-date, no need to compare again."
201 xrdcp -f root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./.oO[validationId]Oo._result.root .
208 extendedValidationExecution=
"""
209 #run extended offline validation scripts
210 echo -e "\n\nRunning extended offline validation"
212 rfcp .oO[extendedValScriptPath]Oo. .
213 root -x -b -q -l TkAlExtendedOfflineValidation.C
220 extendedValidationTemplate=
"""
221 #include "Alignment/OfflineValidation/macros/PlotAlignmentValidation.C"
222 #include "FWCore/FWLite/interface/FWLiteEnabler.h"
224 void TkAlExtendedOfflineValidation()
226 TkAlStyle::legendheader = ".oO[legendheader]Oo.";
227 TkAlStyle::legendoptions = ".oO[legendoptions]Oo.";
228 TkAlStyle::set(.oO[publicationstatus]Oo., .oO[era]Oo., ".oO[customtitle]Oo.", ".oO[customrighttitle]Oo.");
229 gStyle->SetTitleH ( 0.07 );
230 gStyle->SetTitleW ( 1.00 );
231 gStyle->SetTitleFont ( 132 );
232 // load framework lite just to find the CMSSW libs...
233 gSystem->Load("libFWCoreFWLite");
234 FWLiteEnabler::enable();
236 .oO[extendedInstantiation]Oo.
237 p.setOutputDir(".oO[datadir]Oo./ExtendedOfflineValidation_Images");
238 p.setTreeBaseDir(".oO[OfflineTreeBaseDir]Oo.");
239 p.plotDMR(".oO[DMRMethod]Oo.",.oO[DMRMinimum]Oo.,".oO[DMROptions]Oo.");
240 p.plotSurfaceShapes(".oO[SurfaceShapes]Oo.");
241 p.plotChi2("root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./.oO[resultPlotFile]Oo._result.root");
255 datasetpath = .oO[dataset]Oo.
256 pset = .oO[cfgFile]Oo.
257 total_number_of_.oO[McOrData]Oo.
258 number_of_jobs = .oO[numberOfJobs]Oo.
259 output_file = .oO[outputFile]Oo.
260 runselection = .oO[runRange]Oo.
261 lumi_mask = .oO[JSON]Oo.
266 storage_element = T2_CH_CERN
267 user_remote_dir = .oO[eosdir]Oo.
268 ui_working_dir = .oO[crabWorkingDir]Oo.
269 # script_exe = .oO[script]Oo.
273 queue = .oO[queue]Oo.
290 if not templateName
in globals().
keys():
291 msg =
"unknown template to replace %s"%templateName
293 if not alternateTemplateName
in globals().
keys():
294 msg =
"unknown template to replace %s"%alternateTemplateName
296 globals()[ templateName ] = globals()[ alternateTemplateName ]
def alternateTemplate
### Alternate Templates ###