4 from genericValidation
import GenericValidation
5 from helperFunctions
import replaceByMap
6 from TkAlExceptions
import AllInOneError
11 Object representing a geometry comparison job.
13 def __init__( self, valName, alignment, referenceAlignment,
14 config, copyImages =
True):
16 Constructor of the GeometryComparison class.
19 - `valName`: String which identifies individual validation instances
20 - `alignment`: `Alignment` instance to validate
21 - `referenceAlignment`: `Alignment` instance which is compared
23 - `config`: `BetterConfigParser` instance which includes the
24 configuration of the validations
25 - `copyImages`: Boolean which indicates whether png- and pdf-files
26 should be copied back from the batch farm
31 "3DTranslationalScaleFactor":
"50"
33 mandatories = [
"levels",
"dbOutput"]
34 GenericValidation.__init__(self, valName, alignment, config,
35 "compare", addDefaults=defaults,
36 addMandatories = mandatories)
38 referenceName =
"IDEAL"
40 referenceName = self.referenceAlignment.name
42 allCompares = config.getCompares()
44 if valName
in allCompares:
45 self.__compares[valName] = allCompares[valName]
47 msg = (
"Could not find compare section '%s' in '%s'"
48 %(valName, allCompares))
50 self.copyImages = copyImages
55 repMap = GenericValidation.getRepMap( self, alignment )
56 referenceName =
"IDEAL"
57 referenceTitle =
"IDEAL"
59 referenceName = self.referenceAlignment.name
60 referenceTitle = self.referenceAlignment.title
63 "comparedGeometry": (
".oO[alignmentName]Oo."
65 "referenceGeometry":
"IDEAL",
67 "reference": referenceName,
68 "referenceTitle": referenceTitle,
69 "alignmentTitle": self.alignmentToValidate.title
71 if not referenceName ==
"IDEAL":
72 repMap[
"referenceGeometry"] = (
".oO[reference]Oo."
74 repMap[
"name"] +=
"_vs_.oO[reference]Oo."
80 cfgFileName =
"TkAlCompareToNTuple.%s_cfg.py"%(
81 self.alignmentToValidate.name)
82 cfgs = {cfgFileName: configTemplates.intoNTuplesTemplate}
83 repMaps = {cfgFileName: repMap}
86 cfgFileName =
"TkAlCompareToNTuple.%s_cfg.py"%(
87 self.referenceAlignment.name )
88 cfgs[cfgFileName] = configTemplates.intoNTuplesTemplate
89 repMaps[cfgFileName] = referenceRepMap
91 cfgSchedule = cfgs.keys()
92 for common
in self.__compares:
93 repMap.update({
"common": common,
94 "levels": self.__compares[common][0],
95 "dbOutput": self.__compares[common][1]
97 if self.__compares[common][1].
split()[0] ==
"true":
98 repMap[
"dbOutputService"] = configTemplates.dbOutputTemplate
100 repMap[
"dbOutputService"] =
""
101 cfgName =
replaceByMap((
"TkAlCompareCommon.oO[common]Oo.."
102 ".oO[name]Oo._cfg.py"),repMap)
103 cfgs[cfgName] = configTemplates.compareTemplate
104 repMaps[cfgName] = repMap
106 cfgSchedule.append( cfgName )
107 GenericValidation.createConfiguration(self, cfgs, path, cfgSchedule, repMaps = repMaps)
111 repMap[
"runComparisonScripts"] =
""
112 scriptName =
replaceByMap((
"TkAlGeomCompare.%s..oO[name]Oo..sh"
114 for name
in self.__compares:
115 if '"DetUnit"' in self.__compares[name][0].
split(
","):
116 repMap[
"outputFile"] = (
".oO[name]Oo..Comparison_common"+name+
".root")
117 repMap[
"nIndex"] = (
"")
118 repMap[
"runComparisonScripts"] += \
119 (
"rfcp .oO[CMSSW_BASE]Oo./src/Alignment/OfflineValidation"
120 "/scripts/comparisonScript.C .\n"
121 "rfcp .oO[CMSSW_BASE]Oo./src/Alignment/OfflineValidation"
122 "/scripts/GeometryComparisonPlotter.h .\n"
123 "rfcp .oO[CMSSW_BASE]Oo./src/Alignment/OfflineValidation"
124 "/scripts/GeometryComparisonPlotter.cc .\n"
125 "root -b -q 'comparisonScript.C+(\""
126 ".oO[name]Oo..Comparison_common"+name+
".root\",\""
128 "rfcp "+path+
"/TkAl3DVisualization_.oO[name]Oo..C .\n"
129 "root -l -b -q TkAl3DVisualization_.oO[name]Oo..C+\n")
131 repMap[
"runComparisonScripts"] += \
132 (
"rfmkdir -p .oO[datadir]Oo./.oO[name]Oo."
133 ".Comparison_common"+name+
"_Images\n")
134 repMap[
"runComparisonScripts"] += \
135 (
"rfmkdir -p .oO[datadir]Oo./.oO[name]Oo."
136 ".Comparison_common"+name+
"_Images/Translations\n")
137 repMap[
"runComparisonScripts"] += \
138 (
"rfmkdir -p .oO[datadir]Oo./.oO[name]Oo."
139 ".Comparison_common"+name+
"_Images/Rotations\n")
140 repMap[
"runComparisonScripts"] += \
141 (
"rfmkdir -p .oO[datadir]Oo./.oO[name]Oo."
142 ".Comparison_common"+name+
"_Images/CrossTalk\n")
148 repMap[
"runComparisonScripts"] += \
149 (
"find . -maxdepth 1 -name \"*_1*\" "
150 "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
151 "/.oO[name]Oo..Comparison_common"+name+
"_Images/Translations/\" \n")
152 repMap[
"runComparisonScripts"] += \
153 (
"find . -maxdepth 1 -name \"*_2*\" "
154 "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
155 "/.oO[name]Oo..Comparison_common"+name+
"_Images/Translations/\" \n")
157 repMap[
"runComparisonScripts"] += \
158 (
"find . -maxdepth 1 -name \"*_3*\" "
159 "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
160 "/.oO[name]Oo..Comparison_common"+name+
"_Images/Rotations/\" \n")
161 repMap[
"runComparisonScripts"] += \
162 (
"find . -maxdepth 1 -name \"*_4*\" "
163 "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
164 "/.oO[name]Oo..Comparison_common"+name+
"_Images/Rotations/\" \n")
166 repMap[
"runComparisonScripts"] += \
167 (
"find . -maxdepth 1 -name \"*_5*\" "
168 "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
169 "/.oO[name]Oo..Comparison_common"+name+
"_Images/CrossTalk/\" \n")
170 repMap[
"runComparisonScripts"] += \
171 (
"find . -maxdepth 1 -name \"*_6*\" "
172 "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
173 "/.oO[name]Oo..Comparison_common"+name+
"_Images/CrossTalk/\" \n")
174 repMap[
"runComparisonScripts"] += \
175 (
"find . -maxdepth 1 -name \"*_7*\" "
176 "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
177 "/.oO[name]Oo..Comparison_common"+name+
"_Images/CrossTalk/\" \n")
178 repMap[
"runComparisonScripts"] += \
179 (
"find . -maxdepth 1 -name \"*_8*\" "
180 "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
181 "/.oO[name]Oo..Comparison_common"+name+
"_Images/CrossTalk/\" \n")
183 repMap[
"runComparisonScripts"] += \
184 (
"find . -maxdepth 1 -name "
185 "\"TkMap_SurfDeform*.pdf\" -print | xargs -I {} bash -c"
186 " \"rfcp {} .oO[datadir]Oo./.oO[name]Oo."
187 ".Comparison_common"+name+
"_Images/\" \n")
188 repMap[
"runComparisonScripts"] += \
189 (
"find . -maxdepth 1 -name "
190 "\"TkMap_SurfDeform*.png\" -print | xargs -I {} bash -c"
191 " \"rfcp {} .oO[datadir]Oo./.oO[name]Oo."
192 ".Comparison_common"+name+
"_Images/\" \n")
193 repMap[
"runComparisonScripts"] += \
194 (
"if [[ $HOSTNAME = lxplus[0-9]*\.cern\.ch ]]\n"
196 " rfmkdir -p .oO[workdir]Oo./.oO[name]Oo.."+name
199 " mkdir -p $CWD/TkAllInOneTool/.oO[name]Oo.."+name
202 repMap[
"runComparisonScripts"] += \
203 (
"rfcp .oO[CMSSW_BASE]Oo./src/Alignment"
204 "/OfflineValidation/scripts/makeArrowPlots.C "
206 "root -b -q 'makeArrowPlots.C(\""
207 ".oO[name]Oo..Comparison_common"+name
208 +
".root\",\".oO[name]Oo.."
209 +name+
"_ArrowPlots\")'\n")
210 repMap[
"runComparisonScripts"] += \
211 (
"rfmkdir -p .oO[datadir]Oo./.oO[name]Oo."
212 ".Comparison_common"+name+
"_Images/ArrowPlots\n")
213 repMap[
"runComparisonScripts"] += \
214 (
"find .oO[name]Oo.."+name+
"_ArrowPlots "
215 "-maxdepth 1 -name \"*.png\" -print | xargs -I {} bash "
216 "-c \"rfcp {} .oO[datadir]Oo./.oO[name]Oo."
217 ".Comparison_common"+name+
"_Images/ArrowPlots\"\n")
218 repMap[
"runComparisonScripts"] += \
220 "-maxdepth 1 -name \".oO[name]Oo..Visualization_rotated.gif\" -print | xargs -I {} bash "
221 "-c \"rfcp {} .oO[datadir]Oo./.oO[name]Oo."
222 ".Comparison_common"+name+
"_Images/.oO[name]Oo..Visualization.gif\"\n")
224 resultingFile =
replaceByMap((
"/store/caf/user/$USER/.oO[eosdir]Oo./compared%s_"
225 ".oO[name]Oo..root"%name), repMap)
226 resultingFile = os.path.expandvars( resultingFile )
227 resultingFile = os.path.abspath( resultingFile )
228 resultingFile =
"root://eoscms//eos/cms" + resultingFile
229 repMap[
"runComparisonScripts"] += \
230 (
"xrdcp -f OUTPUT_comparison.root %s\n"
234 repMap[
"CommandLine"]=
""
241 repMap[
"CommandLine"]+= \
242 repMap[
"CommandLineTemplate"]%{
"cfgFile":cfg,
243 "postProcess":postProcess}
244 repMap[
"CommandLine"]+= (
"# overall postprocessing\n"
245 ".oO[runComparisonScripts]Oo.\n"
249 scripts = {scriptName:
replaceByMap( configTemplates.scriptTemplate, repMap )}
250 files = {
replaceByMap(
"TkAl3DVisualization_.oO[name]Oo..C", repMap ):
replaceByMap(configTemplates.visualizationTrackerTemplate, repMap )}
252 return GenericValidation.createScript(self, scripts, path)
255 msg = (
"Parallelization not supported for geometry comparison. Please "
256 "choose another 'jobmode'.")
def replaceByMap
— Helpers —############################