CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
createBeamHaloJobs.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import os, sys, re, optparse, math
4 
5 copyargs = sys.argv[:]
6 for i in range(len(copyargs)):
7  if copyargs[i] == "":
8  copyargs[i] = "\"\""
9  if copyargs[i].find(" ") != -1:
10  copyargs[i] = "\"%s\"" % copyargs[i]
11 commandline = " ".join(copyargs)
12 
13 usage = """./%prog DIRNAME PATTERN INITIALGEOM INPUTFILES [options]
14 
15 Creates (overwrites) a directory for each word in PATTERN and creates
16 (overwrites) submitJobs.sh with the submission sequence and
17 dependencies.
18 
19 DIRNAME directories will be named DIRNAME01, DIRNAME02, etc.
20 PATTERN a quoted combination of "phiy", "phipos", "phiz"
21 INITIALGEOM SQLite file containing muon geometry with tag names
22  CSCAlignmentRcd, CSCAlignmentErrorRcd
23 INPUTFILES Python file defining 'fileNames', a list of input files as
24  strings"""
25 
26 parser = optparse.OptionParser(usage)
27 parser.add_option("-j", "--jobs",
28  help="approximate number of \"gather\" subjobs",
29  type="int",
30  default=50,
31  dest="subjobs")
32 parser.add_option("-s", "--submitJobs",
33  help="alternate name of submitJobs.sh script (please include .sh extension); a file with this name will be OVERWRITTEN",
34  type="string",
35  default="submitJobs.sh",
36  dest="submitJobs")
37 parser.add_option("-b", "--big",
38  help="if invoked, subjobs will also be run on cmscaf1nd",
39  action="store_true",
40  dest="big")
41 parser.add_option("--globalTag",
42  help="GlobalTag for calibration conditions",
43  type="string",
44  default="GR_R_35X_V8A::All",
45  dest="globaltag")
46 parser.add_option("--photogrammetry",
47  help="if invoked, alignment will be constrained to photogrammetry",
48  action="store_true",
49  dest="photogrammetry")
50 parser.add_option("--photogrammetryScale",
51  help="scale factor for photogrammetry constraint: 1 is default and 10 *weakens* the constraint by a factor of 10",
52  type="string",
53  default="1.",
54  dest="photogrammetryScale")
55 parser.add_option("--disks",
56  help="align whole disks, rather than individual rings",
57  action="store_true",
58  dest="disks")
59 
60 parser.add_option("--minP",
61  help="minimum track momentum (measured via radial component of fringe fields)",
62  type="string",
63  default="5",
64  dest="minP")
65 parser.add_option("--minHitsPerChamber",
66  help="minimum number of hits per chamber",
67  type="string",
68  default="5",
69  dest="minHitsPerChamber")
70 parser.add_option("--maxdrdz",
71  help="maximum dr/dz of tracklets (anti-cosmic cut)",
72  type="string",
73  default="0.2",
74  dest="maxdrdz")
75 parser.add_option("--maxRedChi2",
76  help="maximum reduced chi^2 of tracks",
77  type="string",
78  default="10",
79  dest="maxRedChi2")
80 parser.add_option("--fiducial",
81  help="if invoked, select only segments within the good region of the chamber (for all 6 layers)",
82  action="store_true",
83  dest="fiducial")
84 parser.add_option("--useHitWeights",
85  help="if invoked, use hit weights in tracklet fits",
86  action="store_true",
87  dest="useHitWeights")
88 parser.add_option("--truncateSlopeResid",
89  help="maximum allowed slope residual in mrad (like the histograms in a phiy job)",
90  type="string",
91  default="30.",
92  dest="truncateSlopeResid")
93 parser.add_option("--truncateOffsetResid",
94  help="maximum allowed offset residual in mm (like the histograms in a phipos or phiz job)",
95  type="string",
96  default="15.",
97  dest="truncateOffsetResid")
98 parser.add_option("--combineME11",
99  help="if invoked, combine ME1/1a and ME1/1b chambers",
100  action="store_true",
101  dest="combineME11")
102 parser.add_option("--useTrackWeights",
103  help="if invoked, weight residuals by track uncertainties",
104  action="store_true",
105  dest="useTrackWeights")
106 parser.add_option("--errorFromRMS",
107  help="if invoked, determine residuals uncertainties from the RMS of the residuals distribution",
108  action="store_true",
109  dest="errorFromRMS")
110 parser.add_option("--minTracksPerOverlap",
111  help="minimum number of tracks needed for an overlap constraint to be valid",
112  type="string",
113  default="10",
114  dest="minTracksPerOverlap")
115 parser.add_option("--slopeFromTrackRefit",
116  help="if invoked, determine direction of tracklets by refitting track to all other stations",
117  action="store_true",
118  dest="slopeFromTrackRefit")
119 parser.add_option("--minStationsInTrackRefits",
120  help="minimum number of stations in a full track refit (slopeFromTrackRefit)",
121  type="string",
122  default="2",
123  dest="minStationsInTrackRefits")
124 
125 if len(sys.argv) < 5:
126  raise SystemError, "Too few arguments.\n\n"+parser.format_help()
127 
128 DIRNAME = sys.argv[1]
129 PATTERN = re.split("\s+", sys.argv[2])
130 INITIALGEOM = sys.argv[3]
131 INPUTFILES = sys.argv[4]
132 
133 options, args = parser.parse_args(sys.argv[5:])
134 globaltag = options.globaltag
135 photogrammetry = options.photogrammetry
136 photogrammetryScale = options.photogrammetryScale
137 disks = options.disks
138 minP = options.minP
139 minHitsPerChamber = options.minHitsPerChamber
140 maxdrdz = options.maxdrdz
141 maxRedChi2 = options.maxRedChi2
142 fiducial = options.fiducial
143 useHitWeights = options.useHitWeights
144 truncateSlopeResid = options.truncateSlopeResid
145 truncateOffsetResid = options.truncateOffsetResid
146 combineME11 = options.combineME11
147 useTrackWeights = options.useTrackWeights
148 errorFromRMS = options.errorFromRMS
149 minTracksPerOverlap = options.minTracksPerOverlap
150 slopeFromTrackRefit = options.slopeFromTrackRefit
151 minStationsInTrackRefits = options.minStationsInTrackRefits
152 
153 execfile(INPUTFILES)
154 stepsize = int(math.ceil(1.*len(fileNames)/options.subjobs))
155 pwd = str(os.getcwdu())
156 
157 bsubfile = ["#!/bin/sh", ""]
158 bsubnames = []
159 last_align = None
160 
161 directory = ""
162 for i, mode in enumerate(PATTERN):
163  iteration = i+1
164  if iteration == 1:
165  inputdb = INITIALGEOM
166  inputdbdir = directory[:]
167  else:
168  inputdb = director + ".db"
169  inputdbdir = directory[:]
170 
171  directory = "%s%02d/" % (DIRNAME, iteration)
172  director = directory[:-1]
173  os.system("rm -rf %s; mkdir %s" % (directory, directory))
174  os.system("cp gatherBH_cfg.py %s" % directory)
175  os.system("cp alignBH_cfg.py %s" % directory)
176 
177  bsubfile.append("cd %s" % directory)
178 
179  constraints = ""
180  if photogrammetry and (mode == "phipos" or mode == "phiz"):
181  diskswitch = ""
182  if disks: diskswitch = "--disks "
183 
184  constraints += """export ALIGNMENT_CONVERTXML=%(inputdb)s
185 cmsRun $ALIGNMENT_AFSDIR/Alignment/MuonAlignmentAlgorithms/python/convertToXML_global_cfg.py
186 python $ALIGNMENT_AFSDIR/Alignment/MuonAlignmentAlgorithms/scripts/relativeConstraints.py %(inputdb)s_global.xml $ALIGNMENT_AFSDIR/Alignment/MuonAlignmentAlgorithms/data/Photogrammetry2007.%(mode)s PGFrame --scaleErrors %(photogrammetryScale)s %(diskswitch)s> constraints_cff.py""" % vars()
187  else:
188  constraints += """echo \"\" > constraints_cff.py"""
189 
190  for jobnumber in range(options.subjobs):
191  gather_fileName = "%sgather%03d.sh" % (directory, jobnumber)
192  inputfiles = " ".join(fileNames[jobnumber*stepsize:(jobnumber+1)*stepsize])
193 
194  if len(inputfiles) > 0:
195  file(gather_fileName, "w").write("""#/bin/sh
196 # %(commandline)s
197 
198 export ALIGNMENT_CAFDIR=`pwd`
199 
200 cd %(pwd)s
201 eval `scramv1 run -sh`
202 export ALIGNMENT_AFSDIR=`pwd`
203 
204 export ALIGNMENT_INPUTFILES='%(inputfiles)s'
205 export ALIGNMENT_ITERATION=%(iteration)d
206 export ALIGNMENT_MODE=%(mode)s
207 export ALIGNMENT_JOBNUMBER=%(jobnumber)d
208 export ALIGNMENT_INPUTDB=%(inputdb)s
209 export ALIGNMENT_GLOBALTAG=%(globaltag)s
210 export ALIGNMENT_PHOTOGRAMMETRY=%(photogrammetry)s
211 export ALIGNMENT_DISKS=%(disks)s
212 export ALIGNMENT_minP=%(minP)s
213 export ALIGNMENT_minHitsPerChamber=%(minHitsPerChamber)s
214 export ALIGNMENT_maxdrdz=%(maxdrdz)s
215 export ALIGNMENT_maxRedChi2=%(maxRedChi2)s
216 export ALIGNMENT_fiducial=%(fiducial)s
217 export ALIGNMENT_useHitWeights=%(useHitWeights)s
218 export ALIGNMENT_truncateSlopeResid=%(truncateSlopeResid)s
219 export ALIGNMENT_truncateOffsetResid=%(truncateOffsetResid)s
220 export ALIGNMENT_combineME11=%(combineME11)s
221 export ALIGNMENT_useTrackWeights=%(useTrackWeights)s
222 export ALIGNMENT_errorFromRMS=%(errorFromRMS)s
223 export ALIGNMENT_minTracksPerOverlap=%(minTracksPerOverlap)s
224 export ALIGNMENT_slopeFromTrackRefit=%(slopeFromTrackRefit)s
225 export ALIGNMENT_minStationsInTrackRefits=%(minStationsInTrackRefits)s
226 
227 cp -f %(directory)sgatherBH_cfg.py %(inputdbdir)s%(inputdb)s inertGlobalPositionRcd.db $ALIGNMENT_CAFDIR/
228 cd $ALIGNMENT_CAFDIR/
229 
230 %(constraints)s
231 
232 ls -l
233 cmsRun gatherBH_cfg.py
234 ls -l
235 cp -f *.tmp *.root $ALIGNMENT_AFSDIR/%(directory)s
236 """ % vars())
237  os.system("chmod +x %s" % gather_fileName)
238  bsubfile.append("echo %sgather%03d.sh" % (directory, jobnumber))
239 
240  if last_align is None: waiter = ""
241  else: waiter = "-w \"ended(%s)\"" % last_align
242  if options.big: queue = "cmscaf1nd"
243  else: queue = "cmscaf1nh"
244 
245  bsubfile.append("bsub -R \"type==SLC5_64\" -q %s -J \"%s_gather%03d\" %s gather%03d.sh" % (queue, director, jobnumber, waiter, jobnumber))
246 
247  bsubnames.append("ended(%s_gather%03d)" % (director, jobnumber))
248 
249  file("%sconvert-db-to-xml_cfg.py" % directory, "w").write("""from Alignment.MuonAlignment.convertSQLitetoXML_cfg import *
250 process.PoolDBESSource.connect = \"sqlite_file:%(directory)s%(director)s.db\"
251 process.MuonGeometryDBConverter.outputXML.fileName = \"%(directory)s%(director)s.xml\"
252 process.MuonGeometryDBConverter.outputXML.relativeto = \"ideal\"
253 process.MuonGeometryDBConverter.outputXML.suppressDTChambers = True
254 process.MuonGeometryDBConverter.outputXML.suppressDTSuperLayers = True
255 process.MuonGeometryDBConverter.outputXML.suppressDTLayers = True
256 process.MuonGeometryDBConverter.outputXML.suppressCSCChambers = False
257 process.MuonGeometryDBConverter.outputXML.suppressCSCLayers = True
258 
259 process.MuonGeometryDBConverter.getAPEs = True
260 process.PoolDBESSource.toGet = cms.VPSet(
261  cms.PSet(record = cms.string(\"DTAlignmentRcd\"), tag = cms.string(\"DTAlignmentRcd\")),
262  cms.PSet(record = cms.string(\"DTAlignmentErrorRcd\"), tag = cms.string(\"DTAlignmentErrorRcd\")),
263  cms.PSet(record = cms.string(\"CSCAlignmentRcd\"), tag = cms.string(\"CSCAlignmentRcd\")),
264  cms.PSet(record = cms.string(\"CSCAlignmentErrorRcd\"), tag = cms.string(\"CSCAlignmentErrorRcd\")),
265  )
266 """ % vars())
267 
268  constraints += """\ncp -f constraints_cff.py $ALIGNMENT_AFSDIR/%(directory)sconstraints_cff.py""" % vars()
269 
270  file("%salign.sh" % directory, "w").write("""#!/bin/sh
271 # %(commandline)s
272 
273 export ALIGNMENT_CAFDIR=`pwd`
274 
275 cd %(pwd)s
276 eval `scramv1 run -sh`
277 export ALIGNMENT_AFSDIR=`pwd`
278 
279 export ALIGNMENT_ITERATION=%(iteration)d
280 export ALIGNMENT_MODE=%(mode)s
281 export ALIGNMENT_INPUTDB=%(inputdb)s
282 export ALIGNMENT_GLOBALTAG=%(globaltag)s
283 export ALIGNMENT_PHOTOGRAMMETRY=%(photogrammetry)s
284 export ALIGNMENT_DISKS=%(disks)s
285 export ALIGNMENT_minP=%(minP)s
286 export ALIGNMENT_minHitsPerChamber=%(minHitsPerChamber)s
287 export ALIGNMENT_maxdrdz=%(maxdrdz)s
288 export ALIGNMENT_maxRedChi2=%(maxRedChi2)s
289 export ALIGNMENT_fiducial=%(fiducial)s
290 export ALIGNMENT_useHitWeights=%(useHitWeights)s
291 export ALIGNMENT_truncateSlopeResid=%(truncateSlopeResid)s
292 export ALIGNMENT_truncateOffsetResid=%(truncateOffsetResid)s
293 export ALIGNMENT_combineME11=%(combineME11)s
294 export ALIGNMENT_useTrackWeights=%(useTrackWeights)s
295 export ALIGNMENT_errorFromRMS=%(errorFromRMS)s
296 export ALIGNMENT_minTracksPerOverlap=%(minTracksPerOverlap)s
297 export ALIGNMENT_slopeFromTrackRefit=%(slopeFromTrackRefit)s
298 export ALIGNMENT_minStationsInTrackRefits=%(minStationsInTrackRefits)s
299 
300 cp -f %(directory)salignBH_cfg.py %(directory)sconvert-db-to-xml_cfg.py %(inputdbdir)s%(inputdb)s %(directory)s*.tmp inertGlobalPositionRcd.db $ALIGNMENT_CAFDIR/
301 cd $ALIGNMENT_CAFDIR/
302 export ALIGNMENT_ALIGNMENTTMP=`ls alignment*.tmp`
303 
304 %(constraints)s
305 
306 ls -l
307 cmsRun alignBH_cfg.py
308 cp -f report.py $ALIGNMENT_AFSDIR/%(directory)s%(director)s_report.py
309 cp -f outputdb.db $ALIGNMENT_AFSDIR/%(directory)s%(director)s.db
310 cp -f plotting.root $ALIGNMENT_AFSDIR/%(directory)s%(director)s.root
311 
312 cd $ALIGNMENT_AFSDIR
313 cmsRun %(directory)sconvert-db-to-xml_cfg.py
314 """ % vars())
315  os.system("chmod +x %salign.sh" % directory)
316 
317  bsubfile.append("echo %salign.sh" % directory)
318  bsubfile.append("bsub -R \"type==SLC5_64\" -q cmscaf1nd -J \"%s_align\" -w \"%s\" align.sh" % (director, " && ".join(bsubnames)))
319  bsubfile.append("cd ..")
320  bsubnames = []
321  last_align = "%s_align" % director
322 
323 bsubfile.append("")
324 file(options.submitJobs, "w").write("\n".join(bsubfile))
325 os.system("chmod +x %s" % options.submitJobs)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
static std::string join(char **cmd)
Definition: RemoteFile.cc:18