CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
geometryComparison.py
Go to the documentation of this file.
1 import os
2 import ConfigParser # needed for exceptions in this module
3 import configTemplates
4 from genericValidation import GenericValidation
5 from helperFunctions import replaceByMap
6 from TkAlExceptions import AllInOneError
7 
8 
10  """
11  Object representing a geometry comparison job.
12  """
13  def __init__( self, valName, alignment, referenceAlignment,
14  config, copyImages = True):
15  """
16  Constructor of the GeometryComparison class.
17 
18  Arguments:
19  - `valName`: String which identifies individual validation instances
20  - `alignment`: `Alignment` instance to validate
21  - `referenceAlignment`: `Alignment` instance which is compared
22  with `alignment`
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
27  """
28  defaults = {
29  "3DSubdetector1":"1",
30  "3DSubdetector2":"2",
31  "3DTranslationalScaleFactor":"50"
32  }
33  mandatories = ["levels", "dbOutput"]
34  GenericValidation.__init__(self, valName, alignment, config,
35  "compare", addDefaults=defaults,
36  addMandatories = mandatories)
37  self.referenceAlignment = referenceAlignment
38  referenceName = "IDEAL"
39  if not self.referenceAlignment == "IDEAL":
40  referenceName = self.referenceAlignment.name
41 
42  allCompares = config.getCompares()
43  self.__compares = {}
44  if valName in allCompares:
45  self.__compares[valName] = allCompares[valName]
46  else:
47  msg = ("Could not find compare section '%s' in '%s'"
48  %(valName, allCompares))
49  raise AllInOneError(msg)
50  self.copyImages = copyImages
51 
52  def getRepMap(self, alignment = None):
53  if alignment == None:
54  alignment = self.alignmentToValidate
55  repMap = GenericValidation.getRepMap( self, alignment )
56  referenceName = "IDEAL"
57  referenceTitle = "IDEAL"
58  if not self.referenceAlignment == "IDEAL":
59  referenceName = self.referenceAlignment.name
60  referenceTitle = self.referenceAlignment.title
61 
62  repMap.update({
63  "comparedGeometry": (".oO[alignmentName]Oo."
64  "ROOTGeometry.root"),
65  "referenceGeometry": "IDEAL", # will be replaced later
66  # if not compared to IDEAL
67  "reference": referenceName,
68  "referenceTitle": referenceTitle,
69  "alignmentTitle": self.alignmentToValidate.title
70  })
71  if not referenceName == "IDEAL":
72  repMap["referenceGeometry"] = (".oO[reference]Oo."
73  "ROOTGeometry.root")
74  repMap["name"] += "_vs_.oO[reference]Oo."
75  return repMap
76 
77  def createConfiguration(self, path ):
78  # self.__compares
79  repMap = self.getRepMap()
80  cfgFileName = "TkAlCompareToNTuple.%s_cfg.py"%(
81  self.alignmentToValidate.name)
82  cfgs = {cfgFileName: configTemplates.intoNTuplesTemplate}
83  repMaps = {cfgFileName: repMap}
84  if not self.referenceAlignment == "IDEAL":
85  referenceRepMap = self.getRepMap( self.referenceAlignment )
86  cfgFileName = "TkAlCompareToNTuple.%s_cfg.py"%(
87  self.referenceAlignment.name )
88  cfgs[cfgFileName] = configTemplates.intoNTuplesTemplate
89  repMaps[cfgFileName] = referenceRepMap
90 
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]
96  })
97  if self.__compares[common][1].split()[0] == "true":
98  repMap["dbOutputService"] = configTemplates.dbOutputTemplate
99  else:
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
105 
106  cfgSchedule.append( cfgName )
107  GenericValidation.createConfiguration(self, cfgs, path, cfgSchedule, repMaps = repMaps)
108 
109  def createScript(self, path):
110  repMap = self.getRepMap()
111  repMap["runComparisonScripts"] = ""
112  scriptName = replaceByMap(("TkAlGeomCompare.%s..oO[name]Oo..sh"
113  %self.name), repMap)
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\",\""
127  "./\")'\n"
128  "rfcp "+path+"/TkAl3DVisualization_.oO[name]Oo..C .\n"
129  "root -l -b -q TkAl3DVisualization_.oO[name]Oo..C+\n")
130  if self.copyImages:
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")
143 
144 
145  ### At the moment translations are immages with suffix _1 and _2, rotations _3 and _4, and cross talk _5, _6, _7 and _8
146  ### The numeration depends on the order of the MakePlots(x, y) commands in comparisonScript.C
147  ### If comparisonScript.C is changed, check if the following lines need to be changed as well
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")
156 
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")
165 
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")
182 
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"
195  "then\n"
196  " rfmkdir -p .oO[workdir]Oo./.oO[name]Oo.."+name
197  +"_ArrowPlots\n"
198  "else\n"
199  " mkdir -p $CWD/TkAllInOneTool/.oO[name]Oo.."+name
200  +"_ArrowPlots\n"
201  "fi\n")
202  repMap["runComparisonScripts"] += \
203  ("rfcp .oO[CMSSW_BASE]Oo./src/Alignment"
204  "/OfflineValidation/scripts/makeArrowPlots.C "
205  ".\n"
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"] += \
219  ("find . "
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")
223 
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 #needs to be AFTER abspath so that it doesn't eat the //
229  repMap["runComparisonScripts"] += \
230  ("xrdcp -f OUTPUT_comparison.root %s\n"
231  %resultingFile)
232  self.filesToCompare[ name ] = resultingFile
233 
234  repMap["CommandLine"]=""
235 
236  for cfg in self.configFiles:
237  # FIXME: produce this line only for enabled dbOutput
238  # postProcess = "rfcp .oO[workdir]Oo./*.db .oO[datadir]Oo.\n"
239  # postProcess = "rfcp *.db .oO[datadir]Oo.\n"
240  postProcess = ""
241  repMap["CommandLine"]+= \
242  repMap["CommandLineTemplate"]%{"cfgFile":cfg,
243  "postProcess":postProcess}
244  repMap["CommandLine"]+= ("# overall postprocessing\n"
245  ".oO[runComparisonScripts]Oo.\n"
246  )
247 
248  #~ print configTemplates.scriptTemplate
249  scripts = {scriptName: replaceByMap( configTemplates.scriptTemplate, repMap )}
250  files = {replaceByMap("TkAl3DVisualization_.oO[name]Oo..C", repMap ): replaceByMap(configTemplates.visualizationTrackerTemplate, repMap )}
251  self.createFiles(files, path)
252  return GenericValidation.createScript(self, scripts, path)
253 
254  def createCrabCfg(self, path):
255  msg = ("Parallelization not supported for geometry comparison. Please "
256  "choose another 'jobmode'.")
257  raise AllInOneError(msg)
def replaceByMap
— Helpers —############################
double split
Definition: MVATrainer.cc:139