1 from CalibMuon.DTCalibration.Workflow.DTTTrigProd
import DTTTrigProd
2 from CalibMuon.DTCalibration.Workflow.DTTTrigTimeBoxesWriter
import DTTTrigTimeBoxesWriter
3 from CalibMuon.DTCalibration.Workflow.DTResidualCalibration
import DTResidualCalibration
4 from CalibMuon.DTCalibration.Workflow.DTTTrigResidualCorr
import DTTTrigResidualCorr
5 from CalibMuon.DTCalibration.Workflow.DTTTrigValid
import DTTTrigValid
6 from CalibMuon.DTCalibration.Workflow.DTValidSummary
import DTValidSummary
7 from CalibMuon.DTCalibration.Workflow.DTVDriftSegmentCalibration
import DTVDriftSegmentCalibration
8 from CalibMuon.DTCalibration.Workflow.DTVDriftSegmentWriter
import DTVDriftSegmentWriter
9 from CalibMuon.DTCalibration.Workflow.DTVDriftMeanTimerCalibration
import DTVDriftMeanTimerCalibration
10 from CalibMuon.DTCalibration.Workflow.DTVDriftMeanTimerWriter
import DTVDriftMeanTimerWriter
11 from CalibMuon.DTCalibration.Workflow.DTNoiseCalibration
import DTNoiseCalibration
12 from CalibMuon.DTCalibration.Workflow.DTDQMValidation
import DTDQMValidation
13 from CalibMuon.DTCalibration.Workflow.DTDQMMerge
import DTDQMMerge
14 from CalibMuon.DTCalibration.Workflow.DTDQMHarvesting
import DTDQMHarvesting
15 from CalibMuon.DTCalibration.Workflow.DTDqm
import DTDqm
16 from CalibMuon.DTCalibration.Workflow.DTT0DBValidation
import DTT0DBValidation
17 from CalibMuon.DTCalibration.Workflow.CrabWatch
import CrabWatch
18 from CalibMuon.DTCalibration.Workflow.tools
import listFilesInCastor,haddInCastor,listFilesLocal,haddLocal,copyFilesFromCastor,copyFilesLocal,parseInput,getDatasetStr
19 import sys,os,time,optparse
26 def run(self,type,mode,execute):
35 elif type ==
't0': self.
runT0Workflow(mode,refRun,config,execute)
37 elif type ==
'dbvalidation':
39 if config.dbFiles: inputFiles = config.dbFiles
46 if config.stageOutLocal:
47 from crab_util
import findLastWorkDir
49 crab_task_dir = config.base_dir +
'/' + dirLabel
50 os.chdir(crab_task_dir)
51 crabdir = findLastWorkDir(
'crab_0_')
52 if not crabdir:
raise RuntimeError,
'Could not find CRAB dir in %s' % crab_task_dir
54 dqm_output_dir = crabdir +
"/res"
55 elif config.stageOutCAF:
57 dqm_output_dir = config.castorpath +
'/DTCalibration/' + datasetstr +
'/Run' + str(run) +
'/' + type +
'/' + dirLabel +
'/' +
'v' + str(trial)
63 print "Processing tTrig production"
66 config.userdircaf =
'DTCalibration/' + datasetstr +
'/Run' + str(run) +
'/TTrigCalibration/' +
'TimeBoxes' +
'/' +
'v' + str(trial)
68 task_dir = config.base_dir +
'/TimeBoxes'
70 dtTtrigProd.writeCfg()
73 project_prod = dtTtrigProd.run()
75 print "Sent calibration jobs with project",project_prod
76 print "%.0f%% of jobs are required to finish" % config.jobsFinishedThreshold
79 crabProd.setThreshold(config.jobsFinishedThreshold)
83 result_file = config.result_dir +
'/DTTimeBoxes_%s.root'%run
84 if config.stageOutLocal:
85 output_dir = project_prod +
"/res"
87 elif config.stageOutCAF:
88 castor_dir = config.castorpath +
"/" + config.userdircaf
89 haddInCastor(castor_dir,result_file,
'DTTimeBoxes',
'rfio://castorcms/',
'?svcClass=cmscafuser')
97 print "Processing tTrig correction"
99 dtTtrigWriter.writeCfg()
104 print "Finished processing:"
105 for pset
in dtTtrigWriter.configs:
print "--->",pset
107 def runResidualCalib(self,run,runselection,trial,input_db,label,result_file,config,runStep=True):
109 print "Processing tTrig calibration"
112 config.userdircaf =
'DTCalibration/' + datasetstr +
'/Run' + str(run) +
'/TTrigCalibration/' + label +
'/' +
'v' + str(trial)
114 task_dir = config.base_dir +
'/' + label
119 dtResidualCalib.writeCfg()
122 project_residualCalib = dtResidualCalib.run()
124 print "Sent calibration jobs with project",project_residualCalib
125 print "%.0f%% of jobs are required to finish" % config.jobsFinishedThreshold
128 crabResidualCalib.setThreshold(config.jobsFinishedThreshold)
129 crabResidualCalib.start()
130 crabResidualCalib.join()
132 if config.stageOutLocal:
133 output_dir = project_residualCalib +
"/res"
134 haddLocal(output_dir,result_file,
'residuals')
135 elif config.stageOutCAF:
136 castor_dir = config.castorpath +
"/" + config.userdircaf
137 haddInCastor(castor_dir,result_file,
'residuals',
'rfio://castorcms/',
'?svcClass=cmscafuser')
139 return project_residualCalib
145 print "Processing tTrig residual correction"
150 result_dir=config.result_dir,
152 dtTtrigResidualCorr.writeCfg()
155 dtTtrigResidualCorr.run()
157 print "Finished processing:"
158 for pset
in dtTtrigResidualCorr.configs:
print "--->",pset
160 def runTtrigValid(self,run,runselection,trial,input_db,label,config,runStep=True):
162 print "Processing tTrig validation"
165 config.userdircaf =
'DTCalibration/' + datasetstr +
'/Run' + str(run) +
'/TTrigValidation/' + label +
'/' +
'v' + str(trial)
167 task_dir = config.base_dir +
'/' + label
172 dtTtrigValid.writeCfg()
175 project_valid = dtTtrigValid.run()
177 print "Sent validation jobs with project",project_valid
178 print "%.0f%% of jobs are required to finish" % config.jobsFinishedThreshold
181 crabValid.setThreshold(config.jobsFinishedThreshold)
186 if config.stageOutLocal:
187 output_dir = project_valid + "/res"
188 haddLocal(output_dir,result_file,'residuals')
189 elif config.stageOutCAF:
190 castor_dir = config.castorpath + "/" + config.userdircaf
191 haddInCastor(castor_dir,result_file,'residuals','rfio://castorcms/','?svcClass=cmscafuser')
200 print "Processing Validation Summary"
201 dtTtrigValidSummary =
DTValidSummary(run,config.run_dir,input_file,output_file,config)
202 dtTtrigValidSummary.writeCfg()
205 dtTtrigValidSummary.run()
207 print "...Validation Summary finished"
211 print "Processing vDrift calibration"
214 config.userdircaf =
'DTCalibration/' + datasetstr +
'/Run' + str(run) +
'/VDriftCalibration/' + label +
'/' +
'v' + str(trial)
216 task_dir = config.base_dir +
'/' + label
220 dtVDriftSegment.writeCfg()
223 project_segment = dtVDriftSegment.run()
225 print "Sent validation jobs with project",project_segment
226 print "%.0f%% of jobs are required to finish" % config.jobsFinishedThreshold
229 crabVDriftSegment.setThreshold(config.jobsFinishedThreshold)
230 crabVDriftSegment.start()
231 crabVDriftSegment.join()
233 if config.stageOutLocal:
234 output_dir = project_segment +
"/res"
235 haddLocal(output_dir,result_file,
'DTVDriftHistos')
236 elif config.stageOutCAF:
237 castor_dir = config.castorpath +
"/" + config.userdircaf
238 haddInCastor(castor_dir,result_file,
'DTVDriftHistos',
'rfio://castorcms/',
'?svcClass=cmscafuser')
240 return project_segment
246 print "Processing vDrift writer"
249 input_file=root_file,
250 output_dir=config.result_dir,
252 dtVDriftSegmentWriter.writeCfg()
255 dtVDriftSegmentWriter.run()
257 print "Finished processing:"
258 for pset
in dtVDriftSegmentWriter.configs:
print "--->",pset
262 print "Processing vDrift calibration"
265 config.userdircaf =
'DTCalibration/' + datasetstr +
'/Run' + str(run) +
'/VDriftCalibration/' + label +
'/' +
'v' + str(trial)
267 task_dir = config.base_dir +
'/' + label
271 dtVDriftMeanTimer.writeCfg()
274 project_meantimer = dtVDriftMeanTimer.run()
276 print "Sent validation jobs with project",project_meantimer
277 print "%.0f%% of jobs are required to finish" % config.jobsFinishedThreshold
280 crabVDriftMeanTimer.setThreshold(config.jobsFinishedThreshold)
281 crabVDriftMeanTimer.start()
282 crabVDriftMeanTimer.join()
284 if config.stageOutLocal:
285 output_dir = project_meantimer +
"/res"
286 haddLocal(output_dir,result_file,
'DTTMaxHistos')
287 elif config.stageOutCAF:
288 castor_dir = config.castorpath +
"/" + config.userdircaf
289 haddInCastor(castor_dir,result_file,
'DTTMaxHistos',
'rfio://castorcms/',
'?svcClass=cmscafuser')
291 return project_meantimer
297 print "Processing vDrift writer"
300 input_file=root_file,
301 output_dir=config.result_dir,
303 dtVDriftMeanTimerWriter.writeCfg()
306 dtVDriftMeanTimerWriter.run()
308 print "Finished processing:"
309 for pset
in dtVDriftMeanTimerWriter.configs:
print "--->",pset
313 print "Processing DQM Merge"
317 if config.stageOutLocal:
319 dqm_files = [
'file:%s' % item
for item
in dqm_files]
320 dtDqmFinal =
DTDqm(run,config.run_dir,dqm_files,config.result_dir,config)
321 dtDqmFinal.writeCfg()
323 elif config.stageOutCAF:
325 dqm_files = [file.replace(
'/castor/cern.ch/cms',
'')
for file
in dqm_files]
326 dtDqmFinal =
DTDqm(run,config.run_dir,dqm_files,config.result_dir,config)
327 dtDqmFinal.writeCfg()
330 print "...DQM Merge finished"
333 dtDqmFinal =
DTDqm(run,config.run_dir,dqm_files,config.result_dir,config)
334 dtDqmFinal.writeCfg()
338 print "Processing DQM harvesting"
342 if config.stageOutLocal:
344 dqm_files = [
'file:%s' % item
for item
in dqm_files]
345 dtDqmFinal =
DTDQMHarvesting(run,config.run_dir,dqm_files,config.result_dir,config)
346 dtDqmFinal.writeCfg()
348 elif config.stageOutCAF:
350 dqm_files = [file.replace(
'/castor/cern.ch/cms',
'')
for file
in dqm_files]
351 dtDqmFinal =
DTDQMHarvesting(run,config.run_dir,dqm_files,config.result_dir,config)
352 dtDqmFinal.writeCfg()
355 print "...DQM harvesting finished"
358 dtDqmFinal =
DTDQMHarvesting(run,config.run_dir,dqm_files,config.result_dir,config)
359 dtDqmFinal.writeCfg()
363 print "Processing DQM merge"
367 if config.stageOutLocal:
369 dqm_files = [
'file:%s' % item
for item
in dqm_files]
370 dtDQMMerge =
DTDQMMerge(run,config.run_dir,dqm_files,config.result_dir,config)
371 dtDQMMerge.writeCfg()
373 elif config.stageOutCAF:
375 dqm_files = [file.replace(
'/castor/cern.ch/cms',
'')
for file
in dqm_files]
376 dtDQMMerge =
DTDQMMerge(run,config.run_dir,dqm_files,config.result_dir,config)
377 dtDQMMerge.writeCfg()
380 print "...DQM merge finished"
383 dtDQMMerge =
DTDQMMerge(run,config.run_dir,dqm_files,config.result_dir,config)
384 dtDQMMerge.writeCfg()
391 runselection = config.runselection
392 ttrig_input_db =
None
393 if hasattr(config,
'inputTTrigDB')
and config.inputTTrigDB: ttrig_input_db = os.path.abspath(config.inputTTrigDB)
394 result_dir = config.result_dir
395 if mode ==
'timeboxes':
396 timeBoxes = os.path.abspath(result_dir +
'/' +
'DTTimeBoxes_' + run +
'.root')
397 ttrig_timeboxes_db = os.path.abspath(result_dir +
'/' +
'ttrig_timeboxes_' + run +
'.db')
398 residualsFirst = os.path.abspath(result_dir +
'/' +
'DTResidualValidation_' + run +
'.root')
399 ttrig_residuals_db = os.path.abspath(result_dir +
'/' +
'ttrig_residuals_' + run +
'.db')
400 residualsResidCorr = os.path.abspath(result_dir +
'/' +
'DTResidualValidation_ResidCorr_' + run +
'.root')
401 summaryResiduals = os.path.abspath(result_dir +
'/' +
'SummaryResiduals_' + run +
'.root')
404 print "Writing configuration files.."
407 self.
runResidualCalib(run,runselection,trial,ttrig_timeboxes_db,
'Residuals',residualsFirst,config,
False)
409 self.
runTtrigValid(run,runselection,trial,ttrig_residuals_db,
'ResidualsResidCorr',config,
False)
416 if not os.path.exists(timeBoxes): self.
runTtrigProd(run,runselection,trial,config)
417 if not os.path.exists(timeBoxes):
raise RuntimeError,
'Could not produce %s' % timeBoxes
420 if not os.path.exists(ttrig_timeboxes_db): self.
runTtrigWriter(run,config)
421 if not os.path.exists(ttrig_timeboxes_db):
raise RuntimeError,
'Could not produce %s' % ttrig_timeboxes_db
424 if not os.path.exists(residualsFirst):
425 self.
runResidualCalib(run,runselection,trial,ttrig_timeboxes_db,
'Residuals',residualsFirst,config)
426 if not os.path.exists(residualsFirst):
raise RuntimeError,
'Could not produce %s' % residualsFirst
429 if not os.path.exists(ttrig_residuals_db): self.
runTtrigResidualCorr(run,ttrig_timeboxes_db,residualsFirst,config)
430 if not os.path.exists(ttrig_residuals_db):
raise RuntimeError,
'Could not produce %s' % ttrig_residuals_db
433 self.
runTtrigValid(run,runselection,trial,ttrig_residuals_db,
'ResidualsResidCorr',config)
436 # Summary of validation
437 if not os.path.exists(summaryResiduals): self.runTtrigValidSummary(run,residualsResidCorr,summaryResiduals,config)
438 if not os.path.exists(summaryResiduals): raise RuntimeError,'Could not produce %s' % summaryResiduals
441 dqm_output_dir = self.
dqmOutputDir(
'TTrigValidation',
'ResidualsResidCorr',config)
444 elif mode ==
'residuals':
445 residualsFirst = os.path.abspath(result_dir +
'/' +
'DTResidualValidation_' + run +
'.root')
446 ttrig_residuals_db = os.path.abspath(result_dir +
'/' +
'ttrig_residuals_' + run +
'.db')
447 residualsResidCorr = os.path.abspath(result_dir +
'/' +
'DTResidualValidation_ResidCorr_' + run +
'.root')
448 summaryResiduals = os.path.abspath(result_dir +
'/' +
'SummaryResiduals_' + run +
'.root')
451 print "Writing configuration files.."
453 self.
runResidualCalib(run,runselection,trial,ttrig_input_db,
'Residuals',residualsFirst,config,
False)
456 self.
runResidualCalib(run,runselection,trial,
None,
'Residuals',residualsFirst,config,
False)
459 self.
runTtrigValid(run,runselection,trial,ttrig_residuals_db,
'ResidualsResidCorr',config,
False)
466 if not os.path.exists(residualsFirst):
468 self.
runResidualCalib(run,runselection,trial,ttrig_input_db,
'Residuals',residualsFirst,config)
470 self.
runResidualCalib(run,runselection,trial,
None,
'Residuals',residualsFirst,config)
471 if not os.path.exists(residualsFirst):
raise RuntimeError,
'Could not produce %s' % residualsFirst
474 if not os.path.exists(ttrig_residuals_db):
477 if not os.path.exists(ttrig_residuals_db):
raise RuntimeError,
'Could not produce %s' % ttrig_residuals_db
480 self.
runTtrigValid(run,runselection,trial,ttrig_residuals_db,
'ResidualsResidCorr',config)
483 # Summary of validation
484 if not os.path.exists(summaryResiduals):
485 self.runTtrigValidSummary(run,residualsResidCorr,summaryResiduals,config)
486 if not os.path.exists(summaryResiduals): raise RuntimeError,'Could not produce %s' % summaryResiduals
489 dqm_output_dir = self.
dqmOutputDir(
'TTrigValidation',
'ResidualsResidCorr',config)
492 elif mode ==
'validation':
493 residualsValid = os.path.abspath(result_dir +
'/' +
'DTResidualValidation_' + run +
'.root')
494 summaryResiduals = os.path.abspath(result_dir +
'/' +
'SummaryResiduals_' + run +
'.root')
497 print "Writing configuration files.."
499 self.
runTtrigValid(run,runselection,trial,ttrig_input_db,
'Residuals',config,
False)
501 self.
runTtrigValid(run,runselection,trial,
None,
'Residuals',config,
False)
510 self.
runTtrigValid(run,runselection,trial,ttrig_input_db,
'Residuals',config)
512 self.
runTtrigValid(run,runselection,trial,
None,
'Residuals',config)
515 # Summary of validation
516 if not os.path.exists(summaryResiduals):
517 self.runTtrigValidSummary(run,residualsValid,summaryResiduals,config)
518 if not os.path.exists(summaryResiduals): raise RuntimeError,'Could not produce %s' % summaryResiduals
522 dqm_output_dir = self.
dqmOutputDir(
'TTrigValidation',
'Residuals',config)
532 runselection = config.runselection
533 result_dir = config.result_dir
534 if mode ==
'segment':
535 vDriftHistos = os.path.abspath(result_dir +
'/' +
'DTVDriftHistos_' + run +
'.root')
536 vDrift_segment_db = os.path.abspath(result_dir +
'/' +
'vDrift_segment_' + run +
'.db')
539 print "Writing configuration files.."
546 if not os.path.exists(vDriftHistos):
548 if not os.path.exists(vDriftHistos):
raise RuntimeError,
'Could not produce %s' % vDriftHistos
552 if not os.path.exists(vDrift_segment_db):
raise RuntimeError,
'Could not produce %s' % vDrift_segment_db
554 elif mode ==
'meantimer':
555 vDriftTMaxHistos = os.path.abspath(result_dir +
'/' +
'DTTMaxHistos_' + run +
'.root')
556 vDrift_meantimer_db = os.path.abspath(result_dir +
'/' +
'vDrift_meantimer_' + run +
'.db')
559 print "Writing configuration files.."
566 if not os.path.exists(vDriftTMaxHistos):
568 if not os.path.exists(vDriftTMaxHistos):
raise RuntimeError,
'Could not produce %s' % vDriftTMaxHistos
572 if not os.path.exists(vDrift_meantimer_db):
raise RuntimeError,
'Could not produce %s' % vDrift_meantimer_db
580 print "Processing noise calibration"
583 runselection = config.runselection
584 result_dir = config.result_dir
585 result_file = os.path.abspath(result_dir +
'/' +
'dtNoiseCalib_' + run +
'.root')
586 noise_db = os.path.abspath(result_dir +
'/' +
'noise_' + run +
'.db')
587 noise_txt = os.path.abspath(result_dir +
'/' +
'noise_' + run +
'.txt')
590 config.userdircaf =
'DTCalibration/' + datasetstr +
'/Run' + str(run) +
'/NoiseCalibration/' + label +
'/' +
'v' + str(trial)
592 task_dir = config.base_dir +
'/NoiseCalib'
597 dtNoiseCalibration.writeCfg()
600 dtNoiseCalibration.writeCfg()
601 project_noise = dtNoiseCalibration.run()
603 print "Sent calibration jobs with project",project_noise
604 print "%.0f%% of jobs are required to finish" % config.jobsFinishedThreshold
607 crabNoiseCalibration.setThreshold(config.jobsFinishedThreshold)
608 crabNoiseCalibration.start()
609 crabNoiseCalibration.join()
611 if config.stageOutLocal:
612 crab_output_dir = project_noise +
"/res"
615 elif config.stageOutCAF:
616 castor_dir = config.castorpath +
"/" + config.userdircaf
633 print "Processing DQM validation"
635 runselection = config.runselection
636 result_dir = config.result_dir
639 config.userdircaf =
'DTCalibration/' + datasetstr +
'/Run' + str(run) +
'/DQMValidation/' + dirLabel +
'/' +
'v' + str(trial)
641 task_dir = config.base_dir +
'/' + dirLabel
646 dtDQMValid.writeCfg()
652 dtDQMValid.writeCfg()
653 project_valid = dtDQMValid.run()
655 print "Sent validation jobs with project",project_valid
656 print "%.0f%% of jobs are required to finish" % config.jobsFinishedThreshold
659 crabValid.setThreshold(config.jobsFinishedThreshold)
664 dqm_output_dir = self.
dqmOutputDir(
'DQMValidation',dirLabel,config)
667 dqm_merge_dir = os.path.abspath(result_dir)
676 print "Processing DB validation"
678 dtDBValidation =
None
682 input_files=inputFiles,
683 output_dir=config.result_dir,
690 print "Finished processing:"
691 for pset
in dtDBValidation.configs:
print "--->",pset
def runDBValidationWorkflow
DB Validation workflow.
def runVDriftSegmentWriter
def runNoiseWorkflow
noise workflow
def runVDriftMeanTimerCalib
def runVDriftWorkflow
vDrift workflow
def runTtrigWorkflow
tTrig workflow
def runT0Workflow
t0 workflow
def runValidationWorkflow
Validation workflow.
def runVDriftMeanTimerWriter
def runVDriftSegmentCalib