File indexing completed on 2023-03-17 10:39:47
0001
0002
0003 from __future__ import print_function
0004 from builtins import range
0005 import os, sys, optparse, math
0006
0007 copyargs = sys.argv[:]
0008 for i in range(len(copyargs)):
0009 if copyargs[i] == "":
0010 copyargs[i] = "\"\""
0011 if copyargs[i].find(" ") != -1:
0012 copyargs[i] = "\"%s\"" % copyargs[i]
0013 commandline = " ".join(copyargs)
0014
0015 prog = sys.argv[0]
0016
0017 usage = """./%(prog)s DIRNAME ITERATIONS INITIALGEOM INPUTFILES [options]
0018
0019 Creates (overwrites) a directory for each of the iterations and creates (overwrites)
0020 submitJobs.sh with the submission sequence and dependencies.
0021
0022 DIRNAME directories will be named DIRNAME01, DIRNAME02...
0023 ITERATIONS number of iterations
0024 INITIALGEOM SQLite file containing muon geometry with tag names
0025 DTAlignmentRcd, DTAlignmentErrorExtendedRcd, CSCAlignmentRcd, CSCAlignmentErrorExtendedRcd
0026 INPUTFILES Python file defining 'fileNames', a list of input files as
0027 strings (create with findQualityFiles.py)""" % vars()
0028
0029 parser = optparse.OptionParser(usage)
0030 parser.add_option("--validationLabel",
0031 help="[REQUIRED] the label to be used to mark a run; the results will be put into a LABEL_DATESTAMP.tgz tarball",
0032 type="string",
0033 default="",
0034 dest="validationLabel")
0035 parser.add_option("-j", "--jobs",
0036 help="approximate number of \"gather\" subjobs",
0037 type="int",
0038 default=50,
0039 dest="subjobs")
0040 parser.add_option("-s", "--submitJobs",
0041 help="alternate name of submitJobs.sh script (please include .sh extension); a file with this name will be OVERWRITTEN",
0042 type="string",
0043 default="submitJobs.sh",
0044 dest="submitJobs")
0045 parser.add_option("-b", "--big",
0046 help="if invoked, subjobs will also be run on cmscaf1nd",
0047 action="store_true",
0048 dest="big")
0049 parser.add_option("--globalTag",
0050 help="GlobalTag for alignment/calibration conditions (typically all conditions except muon and tracker alignment)",
0051 type="string",
0052 default="CRAFT0831X_V1::All",
0053 dest="globaltag")
0054 parser.add_option("--trackerconnect",
0055 help="connect string for tracker alignment (frontier://... or sqlite_file:...)",
0056 type="string",
0057 default="",
0058 dest="trackerconnect")
0059 parser.add_option("--trackeralignment",
0060 help="name of TrackerAlignmentRcd tag",
0061 type="string",
0062 default="Alignments",
0063 dest="trackeralignment")
0064 parser.add_option("--trackerAPEconnect",
0065 help="connect string for tracker APEs (frontier://... or sqlite_file:...)",
0066 type="string",
0067 default="",
0068 dest="trackerAPEconnect")
0069 parser.add_option("--trackerAPE",
0070 help="name of TrackerAlignmentErrorExtendedRcd tag (tracker APEs)",
0071 type="string",
0072 default="AlignmentErrorsExtended",
0073 dest="trackerAPE")
0074 parser.add_option("--gprcdconnect",
0075 help="connect string for GlobalPositionRcd (frontier://... or sqlite_file:...)",
0076 type="string",
0077 default="",
0078 dest="gprcdconnect")
0079 parser.add_option("--gprcd",
0080 help="name of GlobalPositionRcd tag",
0081 type="string",
0082 default="GlobalPosition",
0083 dest="gprcd")
0084 parser.add_option("--iscosmics",
0085 help="if invoked, use cosmic track refitter instead of the standard one",
0086 action="store_true",
0087 dest="iscosmics")
0088 parser.add_option("--station123params",
0089 help="alignable parameters for DT stations 1, 2, 3 (see SWGuideAlignmentAlgorithms#Selection_of_what_to_align)",
0090 type="string",
0091 default="111111",
0092 dest="station123params")
0093 parser.add_option("--station4params",
0094 help="alignable parameters for DT station 4",
0095 type="string",
0096 default="100011",
0097 dest="station4params")
0098 parser.add_option("--cscparams",
0099 help="alignable parameters for CSC chambers",
0100 type="string",
0101 default="100011",
0102 dest="cscparams")
0103 parser.add_option("--minTrackPt",
0104 help="minimum allowed track transverse momentum (in GeV)",
0105 type="string",
0106 default="0",
0107 dest="minTrackPt")
0108 parser.add_option("--maxTrackPt",
0109 help="maximum allowed track transverse momentum (in GeV)",
0110 type="string",
0111 default="1000",
0112 dest="maxTrackPt")
0113 parser.add_option("--minTrackP",
0114 help="minimum allowed track momentum (in GeV)",
0115 type="string",
0116 default="0",
0117 dest="minTrackP")
0118 parser.add_option("--maxTrackP",
0119 help="maximum allowed track momentum (in GeV)",
0120 type="string",
0121 default="10000",
0122 dest="maxTrackP")
0123 parser.add_option("--minTrackerHits",
0124 help="minimum number of tracker hits",
0125 type="int",
0126 default=15,
0127 dest="minTrackerHits")
0128 parser.add_option("--maxTrackerRedChi2",
0129 help="maximum tracker chi^2 per degrees of freedom",
0130 type="string",
0131 default="10",
0132 dest="maxTrackerRedChi2")
0133 parser.add_option("--notAllowTIDTEC",
0134 help="if invoked, do not allow tracks that pass through the tracker's TID||TEC region (not recommended)",
0135 action="store_true",
0136 dest="notAllowTIDTEC")
0137 parser.add_option("--twoBin",
0138 help="if invoked, apply the \"two-bin method\" to control charge-antisymmetric errors",
0139 action="store_true",
0140 dest="twoBin")
0141 parser.add_option("--weightAlignment",
0142 help="if invoked, segments will be weighted by ndf/chi^2 in the alignment",
0143 action="store_true",
0144 dest="weightAlignment")
0145 parser.add_option("--minAlignmentSegments",
0146 help="minimum number of segments required to align a chamber",
0147 type="int",
0148 default=5,
0149 dest="minAlignmentHits")
0150 parser.add_option("--notCombineME11",
0151 help="if invoked, treat ME1/1a and ME1/1b as separate objects",
0152 action="store_true",
0153 dest="notCombineME11")
0154 parser.add_option("--maxEvents",
0155 help="maximum number of events",
0156 type="string",
0157 default="-1",
0158 dest="maxEvents")
0159 parser.add_option("--skipEvents",
0160 help="number of events to be skipped",
0161 type="string",
0162 default="0",
0163 dest="skipEvents")
0164 parser.add_option("--maxResSlopeY",
0165 help="maximum residual slope y component",
0166 type="string",
0167 default="10",
0168 dest="maxResSlopeY")
0169 parser.add_option("--ring2only",
0170 help="if invoked, use only ring 2 results to align all rings in corresponding disks",
0171 action="store_true",
0172 dest="ring2only")
0173 parser.add_option("--createMapNtuple",
0174 help="if invoked while mapplots are switched on, a special ntuple would be created",
0175 action="store_true",
0176 dest="createMapNtuple")
0177 parser.add_option("--inputInBlocks",
0178 help="if invoked, assume that INPUTFILES provides a list of files already groupped into job blocks, -j has no effect in that case",
0179 action="store_true",
0180 dest="inputInBlocks")
0181 parser.add_option("--json",
0182 help="If present with JSON file as argument, use JSON file for good lumi mask. "+\
0183 "The latest JSON file is available at /afs/cern.ch/cms/CAF/CMSCOMM/COMM_DQM/certification/Collisions11/7TeV/Prompt/",
0184 type="string",
0185 default="",
0186 dest="json")
0187 parser.add_option("--preFilter",
0188 help="if invoked, MuonAlignmentPreFilter module would be invoked in the Path's beginning. Can significantly speed up gather jobs.",
0189 action="store_true",
0190 dest="preFilter")
0191 parser.add_option("--useTrackerMuons",
0192 help="use tracker muons approach instead of the default global muons tracks based one",
0193 action="store_true",
0194 dest="useTrackerMuons")
0195 parser.add_option("--muonCollectionTag",
0196 help="InputTag of muons collection to use in tracker muons based approach",
0197 type="string",
0198 default="newmuons",
0199 dest="muonCollectionTag")
0200 parser.add_option("--maxDxy",
0201 help="maximum track impact parameter with relation to beamline",
0202 type="string",
0203 default="1000.",
0204 dest="maxDxy")
0205 parser.add_option("--minNCrossedChambers",
0206 help="minimum number of muon chambers that a track is required to cross",
0207 type="string",
0208 default="2",
0209 dest="minNCrossedChambers")
0210
0211 if len(sys.argv) < 5:
0212 raise SystemError("Too few arguments.\n\n"+parser.format_help())
0213
0214 DIRNAME = sys.argv[1]
0215 ITERATIONS = int(sys.argv[2])
0216 INITIALGEOM = sys.argv[3]
0217 INPUTFILES = sys.argv[4]
0218
0219 options, args = parser.parse_args(sys.argv[5:])
0220 globaltag = options.globaltag
0221 trackerconnect = options.trackerconnect
0222 trackeralignment = options.trackeralignment
0223 trackerAPEconnect = options.trackerAPEconnect
0224 trackerAPE = options.trackerAPE
0225 gprcdconnect = options.gprcdconnect
0226 gprcd = options.gprcd
0227 iscosmics = str(options.iscosmics)
0228 station123params = options.station123params
0229 station4params = options.station4params
0230 cscparams = options.cscparams
0231 muonCollectionTag = options.muonCollectionTag
0232 minTrackPt = options.minTrackPt
0233 maxTrackPt = options.maxTrackPt
0234 minTrackP = options.minTrackP
0235 maxTrackP = options.maxTrackP
0236 maxDxy = options.maxDxy
0237 minTrackerHits = str(options.minTrackerHits)
0238 maxTrackerRedChi2 = options.maxTrackerRedChi2
0239 minNCrossedChambers = options.minNCrossedChambers
0240 allowTIDTEC = str(not options.notAllowTIDTEC)
0241 twoBin = str(options.twoBin)
0242 weightAlignment = str(options.weightAlignment)
0243 minAlignmentHits = str(options.minAlignmentHits)
0244 combineME11 = str(not options.notCombineME11)
0245 maxEvents = options.maxEvents
0246 skipEvents = options.skipEvents
0247 validationLabel = options.validationLabel
0248 maxResSlopeY = options.maxResSlopeY
0249 preFilter = not not options.preFilter
0250 useTrackerMuons = options.useTrackerMuons
0251
0252 createMapNtuple=False
0253 if options.createMapNtuple: createMapNtuple=True
0254
0255 ring2only = ""
0256 if options.ring2only: ring2only = "--ring2only"
0257 inputInBlocks = ""
0258 if options.inputInBlocks: inputInBlocks = "--inputInBlocks"
0259
0260 json_file = options.json
0261
0262 if validationLabel == '':
0263 print("\nOne or more of REQUIRED options is missing!\n")
0264 parser.print_help()
0265 sys.exit()
0266
0267 fileNames=[]
0268 fileNamesBlocks=[]
0269 execfile(INPUTFILES)
0270 njobs = options.subjobs
0271 if (options.inputInBlocks):
0272 njobs = len(fileNamesBlocks)
0273 if njobs==0:
0274 print("while --inputInBlocks is specified, the INPUTFILES has no blocks!")
0275 sys.exit()
0276
0277 stepsize = int(math.ceil(1.*len(fileNames)/njobs))
0278
0279 pwd = str(os.getcwd())
0280
0281 bsubfile = ["#!/bin/sh", ""]
0282 bsubnames = []
0283 last_align = None
0284
0285
0286
0287 INITIALXML = INITIALGEOM + '.xml'
0288 if INITIALGEOM[-3:]=='.db':
0289 INITIALXML = INITIALGEOM[:-3] + '.xml'
0290 print("Converting",INITIALGEOM,"to",INITIALXML," ...will be done in several seconds...")
0291 exit_code = os.system("./Alignment/MuonAlignmentAlgorithms/scripts/convertSQLiteXML.py %s %s" % (INITIALGEOM,INITIALXML))
0292 if exit_code>0:
0293 print("problem: conversion exited with code:", exit_code)
0294 sys.exit()
0295
0296
0297
0298
0299 directory = ""
0300 for iteration in range(1, ITERATIONS+1):
0301 if iteration == 1:
0302 inputdb = INITIALGEOM
0303 inputdbdir = directory[:]
0304 inputxml = INITIALXML
0305 else:
0306 inputdb = director + ".db"
0307 inputdbdir = directory[:]
0308 inputxml = director + ".xml"
0309
0310 directory = "%s%02d/" % (DIRNAME, iteration)
0311 director = directory[:-1]
0312 directory1 = "%s01/" % DIRNAME
0313 director1 = directory1[:-1]
0314 os.system("rm -rf %s; mkdir %s" % (directory, directory))
0315 os.system("cp gather_cfg.py %s" % directory)
0316
0317
0318 bsubfile.append("cd %s" % directory)
0319
0320 for jobnumber in range(njobs):
0321 gather_fileName = "%sgather%03d.sh" % (directory, jobnumber)
0322 if not options.inputInBlocks:
0323 inputfiles = " ".join(fileNames[jobnumber*stepsize:(jobnumber+1)*stepsize])
0324 else:
0325 inputfiles = " ".join(fileNamesBlocks[jobnumber])
0326
0327 copyplots = "plotting*.root"
0328
0329 copytrackerdb = ""
0330 if trackerconnect[0:12] == "sqlite_file:": copytrackerdb += "%s " % trackerconnect[12:]
0331 if trackerAPEconnect[0:12] == "sqlite_file:": copytrackerdb += "%s " % trackerAPEconnect[12:]
0332 if gprcdconnect[0:12] == "sqlite_file:": copytrackerdb += "%s " % gprcdconnect[12:]
0333
0334 if len(inputfiles) > 0:
0335 file(gather_fileName, "w").write("""#/bin/sh
0336 # %(commandline)s
0337
0338 export ALIGNMENT_CAFDIR=`pwd`
0339
0340 cd %(pwd)s
0341 eval `scramv1 run -sh`
0342 export ALIGNMENT_AFSDIR=`pwd`
0343
0344 export ALIGNMENT_INPUTFILES='%(inputfiles)s'
0345 export ALIGNMENT_ITERATION=%(iteration)d
0346 export ALIGNMENT_JOBNUMBER=%(jobnumber)d
0347 export ALIGNMENT_MAPPLOTS=True
0348 export ALIGNMENT_SEGDIFFPLOTS=True
0349 export ALIGNMENT_CURVATUREPLOTS=False
0350 export ALIGNMENT_GLOBALTAG=%(globaltag)s
0351 export ALIGNMENT_INPUTDB=%(inputdb)s
0352 export ALIGNMENT_TRACKERCONNECT=%(trackerconnect)s
0353 export ALIGNMENT_TRACKERALIGNMENT=%(trackeralignment)s
0354 export ALIGNMENT_TRACKERAPECONNECT=%(trackerAPEconnect)s
0355 export ALIGNMENT_TRACKERAPE=%(trackerAPE)s
0356 export ALIGNMENT_GPRCDCONNECT=%(gprcdconnect)s
0357 export ALIGNMENT_GPRCD=%(gprcd)s
0358 export ALIGNMENT_ISCOSMICS=%(iscosmics)s
0359 export ALIGNMENT_STATION123PARAMS=%(station123params)s
0360 export ALIGNMENT_STATION4PARAMS=%(station4params)s
0361 export ALIGNMENT_CSCPARAMS=%(cscparams)s
0362 export ALIGNMENT_MUONCOLLECTIONTAG=%(muonCollectionTag)s
0363 export ALIGNMENT_MINTRACKPT=%(minTrackPt)s
0364 export ALIGNMENT_MAXTRACKPT=%(maxTrackPt)s
0365 export ALIGNMENT_MINTRACKP=%(minTrackP)s
0366 export ALIGNMENT_MAXTRACKP=%(maxTrackP)s
0367 export ALIGNMENT_MAXDXY=%(maxDxy)s
0368 export ALIGNMENT_MINTRACKERHITS=%(minTrackerHits)s
0369 export ALIGNMENT_MAXTRACKERREDCHI2=%(maxTrackerRedChi2)s
0370 export ALIGNMENT_MINNCROSSEDCHAMBERS=%(minNCrossedChambers)s
0371 export ALIGNMENT_ALLOWTIDTEC=%(allowTIDTEC)s
0372 export ALIGNMENT_TWOBIN=%(twoBin)s
0373 export ALIGNMENT_WEIGHTALIGNMENT=%(weightAlignment)s
0374 export ALIGNMENT_MINALIGNMENTHITS=%(minAlignmentHits)s
0375 export ALIGNMENT_COMBINEME11=%(combineME11)s
0376 export ALIGNMENT_MAXEVENTS=%(maxEvents)s
0377 export ALIGNMENT_SKIPEVENTS=%(skipEvents)s
0378 export ALIGNMENT_MAXRESSLOPEY=%(maxResSlopeY)s
0379 export ALIGNMENT_DO_DT='False'
0380 export ALIGNMENT_DO_CSC='True'
0381 export ALIGNMENT_JSON=%(json_file)s
0382 export ALIGNMENT_CREATEMAPNTUPLE=%(createMapNtuple)s
0383 export ALIGNMENT_PREFILTER=%(preFilter)s
0384 export ALIGNMENT_USETRACKERMUONS=%(useTrackerMuons)s
0385
0386 if [ \"zzz$ALIGNMENT_JSON\" != \"zzz\" ]; then
0387 cp -f $ALIGNMENT_JSON $ALIGNMENT_CAFDIR/
0388 fi
0389
0390 cp -f %(directory)sgather_cfg.py %(inputdbdir)s%(inputdb)s %(copytrackerdb)s $ALIGNMENT_CAFDIR/
0391 cd $ALIGNMENT_CAFDIR/
0392 ls -l
0393 cmsRun gather_cfg.py
0394 ls -l
0395 cp -f %(copyplots)s $ALIGNMENT_AFSDIR/%(directory)s
0396 """ % vars())
0397 os.system("chmod +x %s" % gather_fileName)
0398 bsubfile.append("echo %sgather%03d.sh" % (directory, jobnumber))
0399
0400 if last_align is None: waiter = ""
0401 else: waiter = "-w \"ended(%s)\"" % last_align
0402 if options.big: queue = "cmscaf1nd"
0403 else: queue = "cmscaf1nh"
0404
0405 bsubfile.append("bsub -R \"type==SLC5_64\" -q %s -J \"%s_gather%03d\" %s gather%03d.sh" % (queue, director, jobnumber, waiter, jobnumber))
0406
0407 bsubnames.append("ended(%s_gather%03d)" % (director, jobnumber))
0408
0409 copytrackerdb = ""
0410 if trackerconnect[0:12] == "sqlite_file:": copytrackerdb += "%s " % trackerconnect[12:]
0411 if trackerAPEconnect[0:12] == "sqlite_file:": copytrackerdb += "%s " % trackerAPEconnect[12:]
0412 if gprcdconnect[0:12] == "sqlite_file:": copytrackerdb += "%s " % gprcdconnect[12:]
0413
0414 file("%salign.sh" % directory, "w").write("""#!/bin/sh
0415 # %(commandline)s
0416
0417 export ALIGNMENT_CAFDIR=`pwd`
0418 mkdir files
0419 mkdir out
0420
0421 cd %(pwd)s
0422 eval `scramv1 run -sh`
0423 export ALIGNMENT_AFSDIR=`pwd`
0424
0425 # combine _plotting.root files into one:
0426 nfiles=$(ls %(directory)splotting0*.root 2> /dev/null | wc -l)
0427 if [ \"$nfiles\" != \"0\" ]; then
0428 flist=""
0429 for fn in %(directory)splotting0*.root
0430 do
0431 FILESIZE=$(stat -c%%s "$fn")
0432 if [ $FILESIZE -gt 1000 ]; then
0433 echo $fn, $FILESIZE
0434 flist="$flist $fn"
0435 fi
0436 done
0437 echo $flist
0438 #hadd -f1 %(directory)s%(director)s_plotting.root %(directory)splotting0*.root
0439 hadd -f1 %(directory)s%(director)s_plotting.root $flist
0440 #if [ $? == 0 ]; then rm %(directory)splotting0*.root; fi
0441 fi
0442
0443 # copy plotting and db files to CAFDIR
0444 cp -f %(directory)s%(director)s_plotting.root $ALIGNMENT_CAFDIR/files
0445 cp -f inertGlobalPositionRcd.db %(inputdbdir)s%(inputdb)s %(inputdbdir)s%(inputxml)s %(copytrackerdb)s $ALIGNMENT_CAFDIR/
0446
0447 # copy the scripts to CAFDIR
0448 cd Alignment/MuonAlignmentAlgorithms/scripts/
0449 cp -f plotscripts.py $ALIGNMENT_CAFDIR/
0450 cp -f mutypes.py $ALIGNMENT_CAFDIR/
0451 cp -f alignmentValidation.py $ALIGNMENT_CAFDIR/
0452 cp -f phiedges_fitfunctions.C $ALIGNMENT_CAFDIR/
0453 cp -f convertSQLiteXML.py $ALIGNMENT_CAFDIR/
0454 cp -f alignCSCRings.py $ALIGNMENT_CAFDIR/
0455 cp -f signConventions.py $ALIGNMENT_CAFDIR/
0456 cd -
0457
0458 cd $ALIGNMENT_CAFDIR/
0459 ls -l
0460
0461 # run alignment validation to produce map plots and sin fit results
0462 ./alignmentValidation.py -l %(validationLabel)s -i $ALIGNMENT_CAFDIR --i1 files --iN files --i1prefix %(director)s --iNprefix %(director)s -o $ALIGNMENT_CAFDIR/out --csc --map --segdiff --createDirSructure
0463
0464 # align CSC rings using the fit results from the previous step
0465 ./alignCSCRings.py -d $ALIGNMENT_CAFDIR/out -l %(validationLabel)s -x %(inputxml)s %(ring2only)s
0466
0467 # convert ring-aligned xml geometry into sqlite
0468 ./convertSQLiteXML.py %(inputxml)s.ring.xml %(director)s.db
0469
0470 # convert the new sqlite into proper chambers and layers xml
0471 ./convertSQLiteXML.py %(director)s.db %(director)s.xml
0472
0473 #copy all good stuff to $ALIGNMENT_AFSDIR/%(directory)s
0474 tar czf %(director)s_%(validationLabel)s.tgz out
0475 cp -f %(director)s_%(validationLabel)s.tgz $ALIGNMENT_AFSDIR/%(directory)s
0476 cp -f out/tmp_test_results_map__%(validationLabel)s.pkl $ALIGNMENT_AFSDIR/%(directory)s%(director)s.pkl
0477 cp -f %(inputxml)s.ring.xml $ALIGNMENT_AFSDIR/%(directory)s
0478 cp -f %(director)s.xml $ALIGNMENT_AFSDIR/%(directory)s
0479 cp -f %(director)s.db $ALIGNMENT_AFSDIR/%(directory)s
0480
0481 # if it's last iteration, apply chamber motion policy
0482 #if [ \"$ALIGNMENT_ITERATION\" == 2 ]; then
0483 # #nfiles=$(ls %(directory)splotting0*.root 2> /dev/null | wc -l)
0484 #fi
0485
0486 """ % vars())
0487 os.system("chmod +x %salign.sh" % directory)
0488
0489 bsubfile.append("echo %salign.sh" % directory)
0490 if options.big: queue = "cmscaf1nd"
0491 else: queue = "cmscaf1nh"
0492 bsubfile.append("bsub -R \"type==SLC5_64\" -q %s -J \"%s_align\" -w \"%s\" align.sh" % (queue, director, " && ".join(bsubnames)))
0493 bsubnames = []
0494 last_align = "%s_align" % director
0495
0496
0497 if iteration == ITERATIONS:
0498
0499 directory1 = "%s01/" % DIRNAME
0500 director1 = directory1[:-1]
0501
0502 file("%svalidation.sh" % directory, "w").write("""#!/bin/sh
0503 # %(commandline)s
0504
0505 export ALIGNMENT_CAFDIR=`pwd`
0506 #mkdir files
0507 mkdir out
0508 mkdir tmp
0509
0510 cd %(pwd)s
0511 eval `scramv1 run -sh`
0512 ALIGNMENT_AFSDIR=`pwd`
0513
0514 # copy the scripts to CAFDIR
0515 cd Alignment/MuonAlignmentAlgorithms/scripts/
0516 cp -f plotscripts.py $ALIGNMENT_CAFDIR/
0517 cp -f mutypes.py $ALIGNMENT_CAFDIR/
0518 cp -f alignmentValidation.py $ALIGNMENT_CAFDIR/
0519 cp -f phiedges_fitfunctions.C $ALIGNMENT_CAFDIR/
0520 cp -f createTree.py $ALIGNMENT_CAFDIR/
0521 cp -f signConventions.py $ALIGNMENT_CAFDIR/
0522 cd -
0523 cp Alignment/MuonAlignmentAlgorithms/test/browser/tree* $ALIGNMENT_CAFDIR/out/
0524
0525 # copy the results to CAFDIR
0526 cp -f %(directory1)s%(director1)s_%(validationLabel)s.tgz $ALIGNMENT_CAFDIR/tmp/
0527 cp -f %(directory)s%(director)s_%(validationLabel)s.tgz $ALIGNMENT_CAFDIR/tmp/
0528
0529 cd $ALIGNMENT_CAFDIR/
0530 tar xzvf tmp/%(director1)s_%(validationLabel)s.tgz
0531 mv tmp/out/* out/
0532 mv out/iterN out/iter1
0533 mv out/tmp_test_results_map__%(validationLabel)s.pkl out/tmp_test_results_map__%(validationLabel)s_1.pkl
0534 tar xzvf tmp/%(director)s_%(validationLabel)s.tgz
0535 mv tmp/out/* out/
0536
0537 echo \" ### Start running ###\"
0538 date
0539
0540 # run simple diagnostic
0541 ./alignmentValidation.py -l %(validationLabel)s -i $ALIGNMENT_CAFDIR --i1 files --iN files --i1prefix %(director1)s --iNprefix %(director)s -o $ALIGNMENT_CAFDIR/out --csc --diagnostic
0542
0543 # fill the tree browser structure:
0544 ./createTree.py -i $ALIGNMENT_CAFDIR/out
0545
0546 timestamp=`date \"+%%y-%%m-%%d %%H:%%M:%%S\"`
0547 echo \"%(validationLabel)s.plots (${timestamp})\" > out/label.txt
0548
0549 ls -l out/
0550 timestamp=`date +%%Y%%m%%d%%H%%M%%S`
0551 tar czf %(validationLabel)s_${timestamp}.tgz out
0552 cp -f %(validationLabel)s_${timestamp}.tgz $ALIGNMENT_AFSDIR/
0553
0554 """ % vars())
0555 os.system("chmod +x %svalidation.sh" % directory)
0556
0557 bsubfile.append("echo %svalidation.sh" % directory)
0558 bsubfile.append("bsub -R \"type==SLC5_64\" -q cmscaf1nd -J \"%s_validation\" -w \"ended(%s)\" validation.sh" % (director, last_align))
0559
0560 bsubfile.append("cd ..")
0561 bsubfile.append("")
0562
0563
0564 file(options.submitJobs, "w").write("\n".join(bsubfile))
0565 os.system("chmod +x %s" % options.submitJobs)
0566