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, randomWorkdirPart = None):
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  - `randomWorkDirPart`: If this option is ommitted a random number is
28  generated to create unique path names for the
29  individual validation instances.
30  """
31  mandatories = ["levels", "dbOutput"]
32  GenericValidation.__init__(self, valName, alignment, config, "compare", addMandatories = mandatories)
33  if not randomWorkdirPart == None:
34  self.randomWorkdirPart = randomWorkdirPart
35  self.referenceAlignment = referenceAlignment
36  referenceName = "IDEAL"
37  if not self.referenceAlignment == "IDEAL":
38  referenceName = self.referenceAlignment.name
39 
40  allCompares = config.getCompares()
41  self.__compares = {}
42  if valName in allCompares:
43  self.__compares[valName] = allCompares[valName]
44  else:
45  msg = ("Could not find compare section '%s' in '%s'"
46  %(valName, allCompares))
47  raise AllInOneError(msg)
48  self.copyImages = copyImages
49 
50  def getRepMap(self, alignment = None):
51  if alignment == None:
52  alignment = self.alignmentToValidate
53  repMap = GenericValidation.getRepMap( self, alignment )
54  referenceName = "IDEAL"
55  if not self.referenceAlignment == "IDEAL":
56  referenceName = self.referenceAlignment.name
57 
58  repMap.update({
59  "comparedGeometry": (".oO[alignmentName]Oo."
60  "ROOTGeometry.root"),
61  "referenceGeometry": "IDEAL", # will be replaced later
62  # if not compared to IDEAL
63  "reference": referenceName
64  })
65  if not referenceName == "IDEAL":
66  repMap["referenceGeometry"] = (".oO[reference]Oo."
67  "ROOTGeometry.root")
68  repMap["name"] += "_vs_.oO[reference]Oo."
69  return repMap
70 
71  def createConfiguration(self, path ):
72  # self.__compares
73  repMap = self.getRepMap()
74  cfgFileName = "TkAlCompareToNTuple.%s.%s_cfg.py"%(
75  self.alignmentToValidate.name, self.randomWorkdirPart)
76  cfgs = {cfgFileName: configTemplates.intoNTuplesTemplate}
77  repMaps = {cfgFileName: repMap}
78  if not self.referenceAlignment == "IDEAL":
79  referenceRepMap = self.getRepMap( self.referenceAlignment )
80  cfgFileName = "TkAlCompareToNTuple.%s.%s_cfg.py"%(
81  self.referenceAlignment.name, self.randomWorkdirPart )
82  cfgs[cfgFileName] = configTemplates.intoNTuplesTemplate
83  repMaps[cfgFileName] = referenceRepMap
84 
85  cfgSchedule = cfgs.keys()
86  for common in self.__compares:
87  repMap.update({"common": common,
88  "levels": self.__compares[common][0],
89  "dbOutput": self.__compares[common][1]
90  })
91  if self.__compares[common][1].split()[0] == "true":
92  repMap["dbOutputService"] = configTemplates.dbOutputTemplate
93  else:
94  repMap["dbOutputService"] = ""
95  cfgName = replaceByMap(("TkAlCompareCommon.oO[common]Oo.."
96  ".oO[name]Oo._cfg.py"),repMap)
97  cfgs[cfgName] = configTemplates.compareTemplate
98  repMaps[cfgName] = repMap
99 
100  cfgSchedule.append( cfgName )
101  GenericValidation.createConfiguration(self, cfgs, path, cfgSchedule, repMaps = repMaps)
102 
103  def createScript(self, path):
104  repMap = self.getRepMap()
105  repMap["runComparisonScripts"] = ""
106  scriptName = replaceByMap(("TkAlGeomCompare.%s..oO[name]Oo..sh"
107  %self.name), repMap)
108  for name in self.__compares:
109  if '"DetUnit"' in self.__compares[name][0].split(","):
110  repMap["runComparisonScripts"] += \
111  ("rfcp .oO[CMSSW_BASE]Oo./src/Alignment/OfflineValidation"
112  "/scripts/comparisonScript.C .\n"
113  "rfcp .oO[CMSSW_BASE]Oo./src/Alignment/OfflineValidation"
114  "/scripts/GeometryComparisonPlotter.h .\n"
115  "rfcp .oO[CMSSW_BASE]Oo./src/Alignment/OfflineValidation"
116  "/scripts/GeometryComparisonPlotter.cc .\n"
117  "root -b -q 'comparisonScript.C+(\""
118  ".oO[name]Oo..Comparison_common"+name+".root\",\""
119  "./\")'\n")
120  if self.copyImages:
121  repMap["runComparisonScripts"] += \
122  ("rfmkdir -p .oO[datadir]Oo./.oO[name]Oo."
123  ".Comparison_common"+name+"_Images\n")
124  repMap["runComparisonScripts"] += \
125  ("find . -maxdepth 1 -name \"*PXB*\" "
126  "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
127  "/.oO[name]Oo..Comparison_common"+name+"_Images/\" \n")
128  repMap["runComparisonScripts"] += \
129  ("find . -maxdepth 1 -name \"*PXF*\" "
130  "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
131  "/.oO[name]Oo..Comparison_common"+name+"_Images/\" \n")
132  repMap["runComparisonScripts"] += \
133  ("find . -maxdepth 1 -name \"*TIB*\" "
134  "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
135  "/.oO[name]Oo..Comparison_common"+name+"_Images/\" \n")
136  repMap["runComparisonScripts"] += \
137  ("find . -maxdepth 1 -name \"*TID*\" "
138  "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
139  "/.oO[name]Oo..Comparison_common"+name+"_Images/\" \n")
140  repMap["runComparisonScripts"] += \
141  ("find . -maxdepth 1 -name \"*TEC*\" "
142  "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
143  "/.oO[name]Oo..Comparison_common"+name+"_Images/\" \n")
144  repMap["runComparisonScripts"] += \
145  ("find . -maxdepth 1 -name \"*TOB*\" "
146  "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
147  "/.oO[name]Oo..Comparison_common"+name+"_Images/\" \n")
148  repMap["runComparisonScripts"] += \
149  ("find . -maxdepth 1 -name \"*tracker*\" "
150  "-print | xargs -I {} bash -c \"rfcp {} .oO[datadir]Oo."
151  "/.oO[name]Oo..Comparison_common"+name+"_Images/\" \n")
152  repMap["runComparisonScripts"] += \
153  ("find . -maxdepth 1 -name "
154  "\"TkMap_SurfDeform*.pdf\" -print | xargs -I {} bash -c"
155  " \"rfcp {} .oO[datadir]Oo./.oO[name]Oo."
156  ".Comparison_common"+name+"_Images/\" \n")
157  repMap["runComparisonScripts"] += \
158  ("find . -maxdepth 1 -name "
159  "\"TkMap_SurfDeform*.png\" -print | xargs -I {} bash -c"
160  " \"rfcp {} .oO[datadir]Oo./.oO[name]Oo."
161  ".Comparison_common"+name+"_Images/\" \n")
162  repMap["runComparisonScripts"] += \
163  ("if [[ $HOSTNAME = lxplus[0-9]*\.cern\.ch ]]\n"
164  "then\n"
165  " rfmkdir -p .oO[workdir]Oo./.oO[name]Oo.."+name
166  +"_ArrowPlots\n"
167  "else\n"
168  " mkdir -p $CWD/TkAllInOneTool/.oO[name]Oo.."+name
169  +"_ArrowPlots\n"
170  "fi\n")
171  repMap["runComparisonScripts"] += \
172  ("rfcp .oO[CMSSW_BASE]Oo./src/Alignment"
173  "/OfflineValidation/scripts/makeArrowPlots.C "
174  "$CWD/TkAllInOneTool\n"
175  "root -b -q 'makeArrowPlots.C(\""
176  ".oO[name]Oo..Comparison_common"+name
177  +".root\",\".oO[name]Oo.."
178  +name+"_ArrowPlots\")'\n")
179  repMap["runComparisonScripts"] += \
180  ("rfmkdir -p .oO[datadir]Oo./.oO[name]Oo."
181  ".Comparison_common"+name+"_Images/ArrowPlots\n")
182  repMap["runComparisonScripts"] += \
183  ("find .oO[name]Oo.."+name+"_ArrowPlots "
184  "-maxdepth 1 -name \"*.png\" -print | xargs -I {} bash "
185  "-c \"rfcp {} .oO[datadir]Oo./.oO[name]Oo."
186  ".Comparison_common"+name+"_Images/ArrowPlots\"\n")
187 
188  resultingFile = replaceByMap(("/store/caf/user/$USER/.oO[eosdir]Oo./compared%s_"
189  ".oO[name]Oo..root"%name), repMap)
190  resultingFile = os.path.expandvars( resultingFile )
191  resultingFile = os.path.abspath( resultingFile )
192  repMap["runComparisonScripts"] += \
193  ("cmsStage -f OUTPUT_comparison.root %s\n"
194  %resultingFile)
195  self.filesToCompare[ name ] = resultingFile
196 
197  repMap["CommandLine"]=""
198 
199  for cfg in self.configFiles:
200  # FIXME: produce this line only for enabled dbOutput
201  # postProcess = "rfcp .oO[workdir]Oo./*.db .oO[datadir]Oo.\n"
202  postProcess = "rfcp *.db .oO[datadir]Oo.\n"
203  repMap["CommandLine"]+= \
204  repMap["CommandLineTemplate"]%{"cfgFile":cfg,
205  "postProcess":postProcess}
206  repMap["CommandLine"]+= ("# overall postprocessing\n"
207  ".oO[runComparisonScripts]Oo.\n"
208  )
209 
210  scripts = {scriptName: replaceByMap( configTemplates.scriptTemplate, repMap ) }
211  return GenericValidation.createScript(self, scripts, path)
212 
213  def createCrabCfg(self, path):
214  msg = ("Parallelization not supported for geometry comparison. Please "
215  "choose another 'jobmode'.")
216  raise AllInOneError(msg)
def replaceByMap
— Helpers —############################
double split
Definition: MVATrainer.cc:139