diff --git a/Rich/RichMirrorAlignmentOnline/CMakeLists.txt b/Rich/RichMirrorAlignmentOnline/CMakeLists.txt index 1eabfb300866f27fb9d7be663232474a992d6d2f..bf20c1d7152a9ed9dd863efc1169c90132b37b7f 100644 --- a/Rich/RichMirrorAlignmentOnline/CMakeLists.txt +++ b/Rich/RichMirrorAlignmentOnline/CMakeLists.txt @@ -1,7 +1,7 @@ ################################################################################ # Package: RichMirrorAlignmentOnline ################################################################################ -gaudi_subdir(RichMirrorAlignmentOnline v2r2) +gaudi_subdir(RichMirrorAlignmentOnline v2r3) gaudi_depends_on_subdirs(Online/Gaucho Event/DAQEvent diff --git a/Rich/RichMirrorAlignmentOnline/cmt/requirements b/Rich/RichMirrorAlignmentOnline/cmt/requirements index 653827e275e5e66ae2b42fcff259c12736ed5450..e8f0403884c8185c8f78a949d70c48bc8520dec4 100644 --- a/Rich/RichMirrorAlignmentOnline/cmt/requirements +++ b/Rich/RichMirrorAlignmentOnline/cmt/requirements @@ -3,7 +3,7 @@ # Maintainer : Paras Naik, Claire Prouve #============================================================================ package RichMirrorAlignmentOnline -version v2r2 +version v2r3 #============================================================================ # Structure, i.e. directories to process. diff --git a/Rich/RichMirrorAlignmentOnline/doc/release.notes b/Rich/RichMirrorAlignmentOnline/doc/release.notes index 629a57b51772735ad72c1dd5d413c56940bdc9ab..0780baddd223a68da55a36874fbff952c06cb618 100644 --- a/Rich/RichMirrorAlignmentOnline/doc/release.notes +++ b/Rich/RichMirrorAlignmentOnline/doc/release.notes @@ -10,8 +10,28 @@ Get into the habit of committing on every change (that compiles of course) ! Improvements since the previous "tagged" release of this code was tagged should be noted here, if any -! 2016-04-12 - Paras Naik (on behalf of Claire Prouve) - - Tagged (internally, since only Panoptes gets a tag now) as v2r2. +! 2017-03-16 - Paras Naik (on behalf of Claire Prouve) + - “Tagged" as v2r3 (internally, since only Panoptes gets a tag now). + - CP: Now importing TGraph, TMultiGraph, TLine from ROOT for plots + Added "lastXMLFile†which represents the most final iteration XML + Added “compareXML†which represents the current DB; changed functions accordingly + We now make plots of primary and secondary mirror tilts w.r.t. compareXML + stopTolerance and stopToleranceSec removed and replaced with quad stop tolerances (see RichMirrAlign v19r1) + Also added regularizationMode, stopToleranceMode, nominalResolutionSigma, stopSigmaFraction (see RichMirrAlign v19r1) + Changed DataType from ‘2015' to ‘2016’ (PN: we really should un-hard-code this) + Added brunel.Detectors list (PN: why?) + Added turnOffL0Decode function because (PN: why?) + Added getDBXML function, which (PN believes) converts “Online†XML to “Offline XML†by adding the right headers + Coeffcalibtilt replaces/replaced coeffCalibTilt in the configurables, but only for RICH1 (PN thinks this is strange, but currently leaves it) + - PN: Changed CkResSummary to use RiCKResLongTightMirror instead of RiCKResLongTight (requires newest RichRecQC being delivered from Rec) + Edited RichAlignmentHelper.py so that it waits for all the tilt processes to finish, not just one at a time (PN thought this must have been a typo) + For all files that are read with open(), print an ERROR message if the file does not exist + Print timestamps when each command is sent from the FSM to the Iterator + Write elapsed time of the the mirror alignment (for a particular RICH) into summary.txt + Now we copy the files from the workDir to the MirrorAlignments directory in a way that preserves the original timestamps of the files + +! 2016-06-07 - Paras Naik (on behalf of Claire Prouve) + - Tagged as v2r2 (internally, since only Panoptes gets a tag now). - CP: added INFO, Warning, and ERROR to printouts for more clarity - CP: added python/PyMirrAlignOnline/CkResSummary.py which produces additional, summary plots for the alignment diff --git a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/CkResSummary.py b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/CkResSummary.py index 4354344c60ab0808007abaffe4c47e1ae8016e8e..8a018ed940a5270626ad1289f2fdae6f3b375990 100644 --- a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/CkResSummary.py +++ b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/CkResSummary.py @@ -1,41 +1,54 @@ -from ROOT import TH1D, TCanvas, TFile, TF1, gStyle +from ROOT import TH1D, TCanvas, TFile, TF1, gStyle, TGraph, TMultiGraph, TLine class CkResSummary: - def __init__(self, alignConf, _maxIt): - self.whichRich = alignConf.getProp('Rich') - self.workdir = alignConf.getProp('WorkDir') + def __init__(self, _alignConf, _maxIt, ): + self.alignConf = _alignConf + self.whichRich = self.alignConf.getProp('Rich') + self.workdir = self.alignConf.getProp('WorkDir') self.maxIt = _maxIt - self.prename = "RichRecQCHistos_rich" + str(self.whichRich) + "_" + alignConf.getProp('nameStr') + "_" + self.lastXMLFile = self.workdir + '/Rich' + str(self.whichRich) + 'CondDBUpdate_' + self.alignConf.getProp('nameStr') + '_i' + str(_maxIt + 1) + '.xml' + self.prename = "RichRecQCHistos_rich" + str(self.whichRich) + "_" + self.alignConf.getProp('nameStr') + "_" if( 1 == self.whichRich ): self.fitMin = -0.007 self.fitMax = 0.007 else: self.fitMin = -0.0039 self.fitMax = 0.0035 - - - - def makeSummaryPlot(self): + if(self.whichRich == 1): + self.maxpri = 3 + self.maxsec = 15 + if(self.whichRich == 2): + self.maxpri = 55 + self.maxsec = 39 + + + + def makeSummaryPlot(self, compareXML): import os gStyle.SetOptFit(1111) gStyle.SetOptStat(000000000) + + from tiltObj import tiltObj + mirrtilts = tiltObj(self.alignConf) + mgraphs = mirrtilts.getChange([compareXML, self.lastXMLFile]) + histograms = {} resHisto = TH1D('hres', 'RICH' + str(self.whichRich) + ' Cherenkov angle resolution per It. ', self.maxIt + 1, -0.5, self.maxIt + 0.5) - + saveName = self.workdir + '/Rich' + str(self.whichRich) + '_ckResSummary.pdf' cPlot = TCanvas('cPlot', 'ckRes') cPlot.SaveAs(saveName + '[') polbkg = TF1("polBKG","pol3(0)", self.fitMin, self.fitMax) help = None - - + + fitRes = [] for j in range(0, self.maxIt + 1): filename = self.workdir + '/' + self.prename +'i' + str(j) + '.root' if os.path.exists(filename) : thisFile = TFile(filename, 'read') - hist = thisFile.Get('RICH/RiCKResLongTight/Rich' + str(self.whichRich) + 'Gas/ckResAll') + hist = thisFile.Get('RICH/RiCKResLongTightMirror/Rich' + str(self.whichRich) + 'Gas/ckResAll') title = 'RICH ' + str(self.whichRich) + ' Cherenkov angle resolution It. ' + str(j) fitRes = self.fitCherenkovAngle(hist) histograms[j] = fitRes[0] @@ -63,7 +76,50 @@ class CkResSummary: resHisto.SetYTitle('Cherenkov angle resolution / rad') resHisto.Draw() cPlot.SaveAs(saveName) + + #maxPriY = TLine(0, self.alignConf.getProp('stopTolerancePriY'), self.maxpri, self.alignConf.getProp('stopTolerancePriY')) + #minPriY = TLine(0, -self.alignConf.getProp('stopTolerancePriY'), self.maxpri, -self.alignConf.getProp('stopTolerancePriY')) + #maxPriZ = TLine(0, self.alignConf.getProp('stopTolerancePriZ'), self.maxpri, self.alignConf.getProp('stopTolerancePriZ')) + #minPriZ = TLine(0, -self.alignConf.getProp('stopTolerancePriZ'), self.maxpri, -self.alignConf.getProp('stopTolerancePriZ')) + #maxSecY = TLine(0, self.alignConf.getProp('stopToleranceSecY'), self.maxpri, self.alignConf.getProp('stopToleranceSecY')) + #minSecY = TLine(0, -self.alignConf.getProp('stopToleranceSecY'), self.maxpri, -self.alignConf.getProp('stopToleranceSecY')) + #maxSecZ = TLine(0, self.alignConf.getProp('stopToleranceSecZ'), self.maxpri, self.alignConf.getProp('stopToleranceSecZ')) + #minSecZ = TLine(0, -self.alignConf.getProp('stopToleranceSecZ'), self.maxpri, -self.alignConf.getProp('stopToleranceSecY')) + #maxPriY.SetLineColor(2) + #minPriY.SetLineColor(2) + #maxPriZ.SetLineColor(4) + #minPriZ.SetLineColor(4) + #maxSecY.SetLineColor(2) + #minSecY.SetLineColor(2) + #maxSecZ.SetLineColor(4) + #minSecZ.SetLineColor(4) + + + mgraphs[0].Draw('AP') + #maxPriY.Draw('same') + #minPriY.Draw('same') + #maxPriZ.Draw('same') + #minPriZ.Draw('same') + mgraphs[0].SetTitle("RICH" + str(self.whichRich) +" primary mirror tilts w.r.t. to current DB") + mgraphs[0].GetXaxis().SetTitle("number of primary mirror") + mgraphs[0].GetYaxis().SetTitle("change in mirror tilt / mrad") + cPlot.SaveAs(saveName) + mgraphs[1].Draw('AP') + #maxSecY.Draw('same') + #minSecY.Draw('same') + #maxSecZ.Draw('same') + #minSecZ.Draw('same') + mgraphs[1].SetTitle("RICH" + str(self.whichRich) +" secondary mirror tilts w.r.t. to current DB") + mgraphs[1].GetXaxis().SetTitle("number of secondary mirror") + mgraphs[1].GetYaxis().SetTitle("change in mirror tilt / mrad") + cPlot.SaveAs(saveName) + cPlot.SaveAs(saveName + ']') + + mirrtilts.writeChange() + mgraphs[0].Delete() + mgraphs[1].Delete() + def fitCherenkovAngle(self, hist): richStr = 'Rich' + str(self.whichRich) diff --git a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/Iterator.py b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/Iterator.py index f391f9032dce96a05e644b076348df62628080b6..bc974af3a6dcde0e64d6c88dd0868d4b673f94f6 100644 --- a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/Iterator.py +++ b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/Iterator.py @@ -20,6 +20,7 @@ from distutils import dir_util ##### Here is where the party starts! ######################################################################################################################## def run(whichRich): + start_time = time.time() ### define the communicator who will communicate with the run-control com = Communicator('ALIGNITER') state = State.NOT_READY @@ -34,10 +35,9 @@ def run(whichRich): from RichAlignmentHelper import RichAlignmentHelper alignHelper = None - + from SetupHelper import SetupHelper setupHelper = None - ######################################################################################################################## ##### reading in the seetings from the Configuration file ######################################################################################################################## @@ -60,14 +60,15 @@ def run(whichRich): ### before each new minor iteration the new xml file will be copied here currentXML = workdir + "/CondDB_Rich" + str(whichRich) + ".xml" combAndMirrSubsets = workdir + "Rich" + str(whichRich) + "CombAndMirrSubsets.txt" - + compareXML = workdir + '/Rich' + str(whichRich) + '_DBXMLFile.xml' # path in the workdirectory of the database-file that the final database will be + #compared to ######################################################################################################################## ##### iteration counters, n_it for major iteration, m_it for minor iteration ######################################################################################################################## n_it = alignConf.getProp("MajItStart") m_it = alignConf.getProp("MinItStart") print "INFO: m_it = ", m_it - + conv = False ### varibale indicates if alignment converged yet while True: command = com.get_command() @@ -75,6 +76,7 @@ def run(whichRich): ##### this code will be excecuted when you klick configure on the run-control ######################################################################################################################## if command.startswith('configure') and state == State.NOT_READY: + print "CONFIGURE command received at " + strftime("%Y-%m-%d %H:%M:%S", gmtime()) + " UTC" setupHelper = SetupHelper(alignConf) xmlHelper = XMLFileHelper(alignConf) ssretr = SaveSetRetriever("LHCbA", "AligWrk_Rich" + str(whichRich)) @@ -86,12 +88,13 @@ def run(whichRich): ##### setting up the alignment and starting the first minor iteration (this only for the very first iteration) ######################################################################################################################## elif (command.startswith('start') and state == State.READY): + print "START command received at " + strftime("%Y-%m-%d %H:%M:%S", gmtime()) + " UTC" ### write the file for the analyzers to know which iteration they are at f = open(alignConf.getProp("ItNrFile"), "w") f.write(str(m_it)) f.close() t = time() - + ### if you want to start the alignment from scratch (e.g. at the m_it = 0) if m_it == 0: #clean up the working directory @@ -107,6 +110,7 @@ def run(whichRich): currentMirrorXMLFile = workdir + "/Rich" + str(whichRich) + "CondDBUpdate_" + thisNameStr + "_i" + str(n_it) + ".xml" xmlHelper.getStartXML(currentMirrorXMLFile) ### get the starting-xml from the database + xmlHelper.getDBXML(compareXML) if not magnFactorsMode == 0: xmlHelper.create_coeff_calibration_xml_files(currentMirrorXMLFile, n_it) ### create the xml files for the tilted mirror configurations @@ -114,7 +118,7 @@ def run(whichRich): else: #this method will keep all files needed when starting at m_it > 0 setupHelper.startMinIt(m_it) - + ### now place the xml file for the current minor iteration in the place where the analyzers will pick it up if m_it % 9 == 0: pickupXML = workdir + "Rich" + str(whichRich) + "CondDBUpdate_" + thisNameStr + "_i" + str(n_it) + ".xml" @@ -138,6 +142,7 @@ def run(whichRich): ##### here the code for all the following iterations ######################################################################################################################## elif (command.startswith('pause') and state == State.RUNNING): + print "PAUSE command received at " + strftime("%Y-%m-%d %H:%M:%S", gmtime()) + " UTC" state = State.PAUSED com.set_status(state) @@ -169,7 +174,7 @@ def run(whichRich): # ## check if the alignment has converged or failed conv = alignHelper.hasConverged() print " INFO Alignment after ", n_it, " Iteration is converged is ", conv - + if(n_it >= 9 or conv): if conv and n_it >= 9: print "INFO Alignment has reached its maximum number of iteration and has converged!" @@ -177,10 +182,10 @@ def run(whichRich): print "INFO Alignment has converged after the ", n_it, "th iteration!" else: print "INFO Alignment has reached its maximum number of iterations and has not converged. :(" - setupHelper.finalize(conv, n_it) + setupHelper.finalize(conv, n_it, compareXML) state = State.READY - - + + # ## if the alignment has not converged and the maximal number of iterations has not been reached, # ## set up everything for the next major iteration if n_it < 9 and not conv: @@ -209,9 +214,12 @@ def run(whichRich): sleep(2) elif command.startswith('stop') and state in (State.RUNNING, State.READY): - setupHelper.finalize(conv, n_it) + print "STOP command received at " + strftime("%Y-%m-%d %H:%M:%S", gmtime()) + " UTC" + elapsed_time = time.time() - start_time # Elapsed time since run(whichRich) was called + setupHelper.finalize(conv, n_it, compareXML, elapsed_time) state = State.READY elif command.startswith('reset'): + print "RESET command received at " + strftime("%Y-%m-%d %H:%M:%S", gmtime()) + " UTC" state = State.NOT_READY break else: diff --git a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/RichAlignmentHelper.py b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/RichAlignmentHelper.py index 79d09ea981ef01c2eb43f3642cd1446250a2eacb..90778565ca2e097a62cad55f2b32113e6aa06114 100644 --- a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/RichAlignmentHelper.py +++ b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/RichAlignmentHelper.py @@ -9,6 +9,7 @@ from subprocess import * class RichAlignmentHelper: def __init__(self, configuration, _combAndMirrSubsets): + # print 'miezmiezmiez' self.alignConf = configuration self.combAndMirrSubsets = _combAndMirrSubsets self.thisNameStr = self.alignConf.getProp('nameStr') @@ -24,9 +25,7 @@ class RichAlignmentHelper: self.magnFactorsMode = self.alignConf.getProp('magnFactorsMode') self.solutionMethod = self.alignConf.getProp('solutionMethod') self.fixSinusoidShift = self.alignConf.getProp('fixSinusoidShift') - self.stopTolerance = self.alignConf.getProp('stopTolerance') - self.stopToleranceSec = self.alignConf.getProp('stopToleranceSec') - + def runMirrCombinFit(self, n_it): ps = [] @@ -34,6 +33,8 @@ class RichAlignmentHelper: _tiltNames = [""] else: _tiltNames = self.tiltNames + + tiltNamesLength = len(_tiltNames) for tiltName in _tiltNames : if(tiltName == ""): @@ -82,28 +83,29 @@ class RichAlignmentHelper: myStdOut.close() myStdErr.close() ps.append(p2) - - PopenCount = -1; - while True: - sleep(30) - ps_status = [q.poll() for q in ps] - if all([x is not None for x in ps_status]): - PopenTotal = 0 - for l in ps_status: - if l is not None : PopenTotal += 1 - print "INFO %d of 9 RichMirrCombinFit processes complete" % PopenTotal - print "INFO ", strftime("%Y-%m-%d %H:%M:%S", gmtime()) + + # Now wait for all subprocesses to finish + PopenCount = -1; + while True: + sleep(30) + ps_status = [q.poll() for q in ps] + if all([x is not None for x in ps_status]): + PopenTotal = 0 + for l in ps_status: + if l is not None : PopenTotal += 1 + print "INFO %d of %d RichMirrCombinFit processes complete" % PopenTotal, tiltNamesLength + print "INFO ", strftime("%Y-%m-%d %H:%M:%S", gmtime()) + print "INFO -------------------" + break + else: + PopenDone = 0 + for l in ps_status: + if l is not None : PopenDone += 1 + if PopenDone > PopenCount: + print "INFO %d of %d RichMirrCombinFit processes complete" % PopenDone, tiltNamesLength + print "INFO", strftime("%Y-%m-%d %H:%M:%S", gmtime()) print "INFO -------------------" - break - else: - PopenDone = 0 - for l in ps_status: - if l is not None : PopenDone += 1 - if PopenDone > PopenCount: - print "INFO %d of 9 RichMirrCombinFit processes complete" % PopenDone - print "INFO", strftime("%Y-%m-%d %H:%M:%S", gmtime()) - print "INFO -------------------" - PopenCount = 0 + PopenDone + PopenCount = 0 + PopenDone def runRichAlign(self, n_it): @@ -126,6 +128,8 @@ class RichAlignmentHelper: magnificationOuputFile = self.workdir + "Rich" + str(self.whichRich) + "MirrMagnFactors_" + self.thisNameStr + connectStr + tiltName + "_i" + str(n_it) + ".txt" p = [] + if not os.path.exists(combinResultsFile) : + print "ERROR no combinResultsFile." with open(combinResultsFile) as fitfile: line = fitfile.readline() while line: @@ -181,8 +185,14 @@ class RichAlignmentHelper: args += 'zerothIterationXML = ' + zeroMirrorXMLFile + '\n' args += 'currentIterationXML = ' + currentMirrorXMLFile + '\n' args += 'nextIterationXML = ' + nextIterationXMLFile + '\n' - args += 'stopTolerance = ' + str(self.stopTolerance) + '\n' - args += 'stopToleranceSec = ' + str(self.stopToleranceSec) + '\n' + args += 'regularizationMode = ' + str(self.alignConf.getProp('regularizationMode')) + '\n' + args += 'stopToleranceMode = ' + str(self.alignConf.getProp('stopToleranceMode')) + '\n' + args += 'nominalResolutionSigma = ' + str(self.alignConf.getProp('nominalResolutionSigma')) + '\n' + args += 'stopSigmaFraction = ' + str(self.alignConf.getProp('stopSigmaFraction')) + '\n' + args += 'stopTolerancePriY = ' + str(self.alignConf.getProp('stopTolerancePriY')) + '\n' + args += 'stopTolerancePriZ = ' + str(self.alignConf.getProp('stopTolerancePriZ')) + '\n' + args += 'stopToleranceSecY = ' + str(self.alignConf.getProp('stopToleranceSecY')) + '\n' + args += 'stopToleranceSecZ = ' + str(self.alignConf.getProp('stopToleranceSecZ')) + '\n' f.write(args) f.close() @@ -214,6 +224,8 @@ class RichAlignmentHelper: fitNGEFile = combinFitDir + "Rich" + str(self.whichRich) + "MirrCombinFitNGEOut_" + self.thisNameStr + connectStr + tiltName + "_i" + str(n_it) + ".txt" os.system('cat ' + fitOutputFile + ' | grep " not_good_enough " > ' + fitNGEFile) + if not os.path.exists(fitNGEFile) : + print "ERROR no fitNGEFile." num_lines = sum(1 for line in open(fitNGEFile)) if (num_lines != 0): print "WARNING Not enough events in all histograms for fitting. Will perform all fits anyway." @@ -221,6 +233,8 @@ class RichAlignmentHelper: def hasConverged(self): + if not os.path.exists(self.workdir + "/Rich" + str(self.whichRich) + "_stop_or_continue.txt") : + print "ERROR no Rich_stop_or_continue_txt file." Rich_stop_or_continue_txt = open(self.workdir + "/Rich" + str(self.whichRich) + "_stop_or_continue.txt") verdict = Rich_stop_or_continue_txt.readline().strip().upper() Rich_stop_or_continue_txt.close() diff --git a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/RichAnalyzer.py b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/RichAnalyzer.py index 55b5a722b0ec1039eb1177b3ff678ad0b4f43c67..e564d7f32187815e85b6cc3626697cfb4f09a583 100644 --- a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/RichAnalyzer.py +++ b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/RichAnalyzer.py @@ -101,15 +101,17 @@ def patchBrunel(true_online_version, alignConf, n): #brunel.Hlt1FilterCode = "HLT_PASS('Hlt1CalibTrackingKPiDetachedDecision')" from Configurables import RecMoniConf - brunel.RecoSequence = ['Decoding', "VELO", "TT", "IT", "OT", "TrHLT1", "Vertex", "TrHLT2", 'RICH'] + brunel.RecoSequence = ['Decoding', "VELO", "TT", "IT", "OT", "TrHLT1","Vertex", "TrHLT2", 'RICH'] RecMoniConf ().MoniSequence = ["RICH"] + brunel.Detectors = ['Velo', 'PuVeto', 'Rich1', 'Rich2', 'TT', 'IT', 'OT', 'Magnet', 'Tr'] + import ConditionsMap brunel.OnlineMode = True brunel.DDDBtag = ConditionsMap.DDDBTag brunel.CondDBtag = ConditionsMap.CondDBTag brunel.Histograms = "Expert" - brunel.DataType = "2015" + brunel.DataType = "2016" brunel.UseDBSnapshot = True brunel.OutputType='NONE' @@ -174,6 +176,13 @@ def patchBrunel(true_online_version, alignConf, n): from Gaudi.Configuration import appendPostConfigAction appendPostConfigAction(applyConds) + def turnOffL0Decode(): + from Configurables import GaudiSequencer + GaudiSequencer("DecodeTriggerSeq").Members = [] + appendPostConfigAction(turnOffL0Decode) + + + from Configurables import MagneticFieldSvc MagneticFieldSvc().UseSetCurrent = True diff --git a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/SetupHelper.py b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/SetupHelper.py index b5326cba2cbb8a64b507fdadd20d8a11fde8532e..31fcaec742dee7ccb1fe87d50a03ee31c01c5da3 100644 --- a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/SetupHelper.py +++ b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/SetupHelper.py @@ -24,8 +24,7 @@ class SetupHelper: self.coeffCalibTilt = self.alignConf.getProp('coeffCalibTilt') self.magnifDir = self.alignConf.getProp('magnifDir') self.fixSinusoidShift = self.alignConf.getProp('fixSinusoidShift') - self.stopTolerance = self.alignConf.getProp('stopTolerance') - self.stopToleranceSec = self.alignConf.getProp('stopToleranceSec') + def setupMagnifFiles(self): @@ -57,13 +56,9 @@ class SetupHelper: os.remove(self.workdir + "/" + rootFile) - def finalize(self, conv, n_it): - self.writeSummary(conv, n_it) + def finalize(self, conv, n_it, compareXML, elapsed_time): + self.writeSummary(conv, n_it, elapsed_time) - from CkResSummary import CkResSummary - ckressum = CkResSummary(self.alignConf, n_it) - ckressum.makeSummaryPlot() - savedir = self.alignConf.getProp('SaveDir') + '/Rich' + str(self.whichRich) + '/' + strftime("%Y%m%d_%H%M%S", gmtime()) if not os.path.exists(savedir): os.makedirs(savedir) @@ -71,9 +66,15 @@ class SetupHelper: if os.path.isdir(self.workdir + "/" + f): shutil.copytree(self.workdir + "/" + f, savedir + '/' + f) else: - shutil.copy(self.workdir + "/" + f, savedir) - - def writeSummary(self, conv, n_it): + shutil.copy2(self.workdir + "/" + f, savedir) + + from CkResSummary import CkResSummary + ckressum = CkResSummary(self.alignConf, n_it) + ckressum.makeSummaryPlot(compareXML) + shutil.copy2(self.workdir + "/Rich" + str(self.whichRich) + '_ChangeWRTDB.txt', savedir) + shutil.copy2(self.workdir + "/Rich" + str(self.whichRich) + '_ckResSummary.pdf', savedir) + + def writeSummary(self, conv, n_it, elapsed_time): summaryFile = self.workdir + "/summary.txt" import OnlineEnv as Online @@ -98,8 +99,15 @@ class SetupHelper: args += 'coeffCalibTilt = ' + str(self.coeffCalibTilt) + '\n' args += 'magnifDir = ' + str(self.magnifDir) + '\n' args += 'fixSinusoidShift = ' + str(self.fixSinusoidShift) + '\n' - args += 'stopTolerance = ' + str(self.stopTolerance) + '\n' - args += 'stopToleranceSec = ' + str(self.stopToleranceSec) + '\n' - + args += 'regularizationMode = ' + str(self.alignConf.getProp('regularizationMode')) + '\n' + args += 'stopToleranceMode = ' + str(self.alignConf.getProp('stopToleranceMode')) + '\n' + args += 'nominalResolutionSigma = ' + str(self.alignConf.getProp('nominalResolutionSigma')) + '\n' + args += 'stopSigmaFraction = ' + str(self.alignConf.getProp('stopSigmaFraction')) + '\n' + args += 'stopTolerancePriY = ' + str(self.alignConf.getProp('stopTolerancePriY')) + '\n' + args += 'stopTolerancePriZ = ' + str(self.alignConf.getProp('stopTolerancePriZ')) + '\n' + args += 'stopToleranceSecY = ' + str(self.alignConf.getProp('stopToleranceSecY')) + '\n' + args += 'stopToleranceSecZ = ' + str(self.alignConf.getProp('stopToleranceSecZ')) + '\n' + args += '\n' + args += 'Elapsed time = ' + elapsed_time + ' seconds' + '\n' f.write(args) f.close() diff --git a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/XMLFileHelper.py b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/XMLFileHelper.py index ac923982b8275925c1764d064060e802fccaa602..2c653a427bc40fec7f3d0459b7dfa75bc4544e85 100644 --- a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/XMLFileHelper.py +++ b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/XMLFileHelper.py @@ -91,6 +91,8 @@ class XMLFileHelper: outfile.write('<?xml version=\'1.0\' encoding=\'iso-8859-1\'?> \n') outfile.write('<!DOCTYPE DDDB SYSTEM "conddb:/DTD/structure.dtd"> \n') outfile.write('<DDDB> \n') + if not os.path.exists(latest) : + print "ERROR no latest file." with open(latest) as infile: for line in infile: outfile.write(line) @@ -99,13 +101,35 @@ class XMLFileHelper: print "INFO This files was picked up as the starting xml: ", latest + def getDBXML(self, compareXML): + workdir = self.alignConf.getProp('WorkDir') + whichRich = self.alignConf.getProp('Rich') + dbXMLFile = self.alignConf.getProp('dbXMLFile') + import os, re + + thisdbxml = compareXML + with open(thisdbxml, 'w') as outfile: + outfile.write('<?xml version=\'1.0\' encoding=\'iso-8859-1\'?> \n') + outfile.write('<!DOCTYPE DDDB SYSTEM "conddb:/DTD/structure.dtd"> \n') + outfile.write('<DDDB> \n') + if not os.path.exists(dbXMLFile) : + print "ERROR no dbXMLFile." + with open(dbXMLFile) as infile: + for line in infile: + outfile.write(line) + outfile.write('</DDDB> \n') + + + def finalXML(self, lastIt): workdir = self.alignConf.getProp('WorkDir') whichRich = self.alignConf.getProp('Rich') finalXML = workdir + "/CondDB_Update_Rich" + str(whichRich) + ".xml" tocopyXML = workdir + "/CondDB_Rich" + str(whichRich) + "_i" + str(lastIt) + ".xml" - + + if not os.path.exists(tocopyXML) : + print "ERROR no tocopyXML file." with open(tocopyXML, 'r') as infile: with open(finalXML, 'w') as outfile: for line in infile: @@ -116,6 +140,8 @@ class XMLFileHelper: def reformatXML(self, newXMLfile, workdir): temp = workdir + "temp.xml" counter = 0 + if not os.path.exists(newXMLfile) : + print "ERROR no newXMLfile." with open(newXMLfile, 'r') as infile: with open(temp, 'w') as outfile: for line in infile: diff --git a/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py b/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py index 90f255089d65602ff9afc20ff7093d6b67bd0bd8..6286ad8a618b1b6b2d12ac366e40de1fd30eadf6 100644 --- a/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py +++ b/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py @@ -11,7 +11,6 @@ __author__ = "Claire Prouve <Claire.Prouve@cern.ch>" # ("combAndMirrSubsets" , po::value<string>(& m_combAndMirrSubsetsFile) , "File with chosen mirrors and combinations subsets" ) # ("backgroundOrder" , po::value<int >(& m_backgroundOrder )->default_value( 2 ), "order for the polynomial background" ) # ("plotOutputLevel" , po::value<int >(& m_plotOutputLevel )->default_value( 2 ), "what plots should be saved (0) plot nothing (1) plot ...(2) only plot fits with chi2 worse than 3.0 (3) plot everything" ) -# ("stopTolerance" , po::value<double>(& m_stopTolerance )->default_value( 0.1 ), "tolerance, in mrad, to stop the alignment because all mirror tilts have converged; historically 0.1" ) # ("warningFactor" , po::value<double>(& m_warningFactor )->default_value( 20 ), "alerts the alignment shifter if any of the mirrors have shifted more than warningFactor*stopTolerance" ) ### NOTE: these are not installed yet, but they exist and can be provided to RichMirrAlign: # ("combAndMirrSubsets" , po::value<string>(&combAndMirrSubsetsFile )->default_value( "" ), "file with subsets of mirror combinations and mirrors" ) @@ -25,58 +24,72 @@ class Rich1MirrAlignOnConf(LHCbConfigurableUser): __used_configurables__ = [ ] __slots__ = { #### Only change these if you want to pick up from where you left off in iterations, experts only - "MajItStart" : 0 - ,"MinItStart" : 0 + "MajItStart" : 0 + ,"MinItStart" : 0 #### Do not change these!!! Just DONT! - ,"Rich" : 1 - ,"HistoDir" : "" + ,"Rich" : 1 + ,"HistoDir" : "" ### Better not change these, only for very very VERY good reasons - ,"WorkDir" : "/group/online/AligWork/Rich1/" - ,"SaveDir" : "/group/online/AligWork/MirrorAlignments/" - ,"ItNrFile" : "/group/online/dataflow/options/LHCbA/Rich1_Alignment_Reference_File.txt" + ,"WorkDir" : "/group/online/AligWork/Rich1/" + ,"SaveDir" : "/group/online/AligWork/MirrorAlignments/" + ,"ItNrFile" : "/group/online/dataflow/options/LHCbA/Rich1_Alignment_Reference_File.txt" ### May be changed if you know what you are doing, explanations below - ,"coeffCalibTilt" : 0.7 - ,"phiBinFactor" : 3 - ,"minAverageBinPop": 6 - ,"deltaThetaWindow": 8.0 - ,"combinFitMethod" : 5 - ,"magnFactorsMode" : 0 - ,"magnifDir" : "/group/rich/AlignmentFiles/MagnifFactors/Rich1/" - ,"solutionMethod" : 0 - ,"EvtMax" : -1 - ,"stopTolerance" : 0.1 - ,"stopToleranceSec": 0.0 - ,"dataVariant" : "Collision16" - ,"thisCase" : "online" - ,"tiltNames" : ["", "pri_negYzerZ", "pri_posYzerZ", "pri_zerYnegZ", "pri_zerYposZ", "sec_negYzerZ", "sec_posYzerZ", "sec_zerYnegZ", "sec_zerYposZ"] - ,"fixSinusoidShift": 1 - ,"nameStr" : "" + ,"dbXMLFile" : "/group/online/alignment/Rich1/MirrorAlign/v2.xml" + ,"coeffCalibTilt" : 0.7 + ,"phiBinFactor" : 3 + ,"minAverageBinPop" : 6 + ,"deltaThetaWindow" : 8.0 + ,"combinFitMethod" : 5 + ,"magnFactorsMode" : 0 + ,"magnifDir" : "/group/rich/AlignmentFiles/MagnifFactors/Rich1/" + ,"solutionMethod" : 0 + ,"regularizationMode" : 1 + ,"stopToleranceMode" : 1 + ,"nominalResolutionSigma" : 0 + ,"stopSigmaFraction" : 0 + ,"stopTolerancePriY" : 0.1 + ,"stopTolerancePriZ" : 0.1 + ,"stopToleranceSecY" : 0.1 + ,"stopToleranceSecZ" : 0.1 + ,"EvtMax" : -1 + ,"dataVariant" : "Collision16" + ,"thisCase" : "online" + ,"tiltNames" : ["", "pri_negYzerZ", "pri_posYzerZ", "pri_zerYnegZ", "pri_zerYposZ", "sec_negYzerZ", "sec_posYzerZ", "sec_zerYnegZ", "sec_zerYposZ"] + ,"fixSinusoidShift" : 1 + ,"nameStr" : "" } _propertyDocDct = { - "MajItStart" : """ Start the alignment at this major iteration. Please make sure this is consitent with MinItStart. """ - ,"MinItStart" : """ Start the alignment at this minor iteration. Please make sure this is consitent with MajItStart. """ - ,"Rich" : """ Rich1 or Rich2. """ - ,"HistoDir" : """ Directory where the savesets are being written to. """ - ,"WorkDir" : """ Directory in which all the output will be written. """ - ,"SaveDir" : """ Directory in which all output files of the alignment are saved after it has finished """ - ,"ItNrFile" : """ File which contains only the number of the current iteration written by the iterator, to be read by the analyzers """ - ,"coeffCalibTilt" : """ Mirror-tilts applied for the calculation of the magnification coefficients. """ - ,"phiBinFactor" : """ Factor by which the number of phi-bins is reduced. The histograms should now come with 60 phi bins, factor 3 reduced this to 20 bin in the fit.""" - ,"minAverageBinPop": """ Demanded minimal entries per bin in x-y-bin; atm 6: for 20 phi-bins, 4.8: for 25 phi-bins. """ - ,"deltaThetaWindow": """ dTheta-range in the histograms; 4.0 for Rich1 and 3.0 for Rich2. """ - ,"combinFitMethod" : """ Method for fitting the 2D histograms; 1: first fit the slices of dTheta with a Gaussian and then fit to phi using only the mean of the Gaussian, 3: fit a 2D function, 5: same as 3 but with unifyWidths """ - ,"magnFactorsMode" : """ Method for calculating the magnification coefficents; 0: magnefication coeff. pre-determined, 1: individual for all mirror pairs, determined in the 0-th iteration and not updated any further, 2: individual for all mirrorpairs, determined on-the-fly on the data. """ - ,"magnifDir" : """ directory that contains the pre-determined magnification coeff., files in this folder have to be named Rich[1,2]_MirrMagn _[tiltName]_predefined.txt """ - ,"solutionMethod" : """ Solution method for calculating the mirror tilts after the individual fits; 0: Minuit, 1: Algebraic """ - ,"EvtMax" : """ maximal number of events processed by brunel PER NODE (hlt fram has ~1500 nodes) """ - ,"stopTolerance" : """ tolerance for mirrors (primary mirrors only if stopToleranceSec = 0), in mrad, to stop the alignment because all mirror tilts have converged; historically 0.1 """ - ,"stopToleranceSec": """ if non-zero [see above], tolerance for secondary mirrors, in mrad, to stop the alignment because all mirror tilts have converged; historically 0.1 """ - ,"dataVariant" : """ Right now this is used only for the naming convention. """ - ,"thisCase" : """ Right now this is used only for the naming convention. """ - ,"tiltNames" : """ Combination of tilts for the calculation and usage of the magnification factors. This is needed even when using predefined magnification factors!!! """ - ,"fixSinusoidShift": """ 1 : fix at sinusoidShift; 0 : it is not fixed """ - ,"nameStr" : """ Right now this is used only for the naming convention, but will be set when initiating the Configuration. """ + "MajItStart" : """ Start the alignment at this major iteration. Please make sure this is consitent with MinItStart. """ + ,"MinItStart" : """ Start the alignment at this minor iteration. Please make sure this is consitent with MajItStart. """ + ,"Rich" : """ Rich1 or Rich2. """ + ,"HistoDir" : """ Directory where the savesets are being written to. """ + ,"WorkDir" : """ Directory in which all the output will be written. """ + ,"SaveDir" : """ Directory in which all output files of the alignment are saved after it has finished """ + ,"ItNrFile" : """ File which contains only the number of the current iteration written by the iterator, to be read by the analyzers """ + ,"dbXMLFile" : """ XML file with mirror tilts that is currently in the DB, for comparison of mirror tilts before and after alignment """ + ,"Coeffcalibtilt" : """ Mirror-tilts applied for the calculation of the magnification coefficients. """ + ,"phiBinFactor" : """ Factor by which the number of phi-bins is reduced. The histograms should now come with 60 phi bins, factor 3 reduced this to 20 bin in the fit.""" + ,"minAverageBinPop" : """ Demanded minimal entries per bin in x-y-bin; atm 6: for 20 phi-bins, 4.8: for 25 phi-bins. """ + ,"deltaThetaWindow" : """ dTheta-range in the histograms; 4.0 for Rich1 and 3.0 for Rich2. """ + ,"combinFitMethod" : """ Method for fitting the 2D histograms; 1: first fit the slices of dTheta with a Gaussian and then fit to phi using only the mean of the Gaussian, 3: fit a 2D function, 5: same as 3 but with unifyWidths """ + ,"magnFactorsMode" : """ Method for calculating the magnification coefficents; 0: magnefication coeff. pre-determined, 1: individual for all mirror pairs, determined in the 0-th iteration and not updated any further, 2: individual for all mirrorpairs, determined on-the-fly on the data. """ + ,"magnifDir" : """ directory that contains the pre-determined magnification coeff., files in this folder have to be named Rich[1,2]_MirrMagn _[tiltName]_predefined.txt """ + ,"solutionMethod" : """ Solution method for calculating the mirror tilts after the individual fits; 0: Minuit, 1: Algebraic """ + ,"regularizationMode" : """ regularization mode: default 0: regularization term contains average magnification coefficients as weight; !=0: all weights in the regularization term are 1.""" + ,"stopToleranceMode" : """ tolerance mode: default 0: calculate the stopTolerances from nominal sigma, average magn factors and stopSigmaFraction, 1 use stopTolerances given below""" + ,"nominalResolutionSigma" : """ RICH-dependent nominal Cherenkov angle resolution""" + ,"stopSigmaFraction" : """ tolerance for total tilt of mirror pair in terms of the fraction of the nominal Cherenkov angle resolution""" + ,"stopTolerancePriY" : """ RICH-dependent tolerance for primary mirrors rotation around Y correction in mrad to stop the alignment """ + ,"stopTolerancePriZ" : """ RICH-dependent tolerance for primary mirrors rotation around Z correction in mrad to stop the alignment """ + ,"stopToleranceSecY" : """ RICH-dependent tolerance for secondary mirrors rotation around Y correction in mrad to stop the alignment """ + ,"stopToleranceSecZ" : """ RICH-dependent tolerance for secondary mirrors rotation around Z correction in mrad to stop the alignment """ + ,"EvtMax" : """ maximal number of events processed by brunel PER NODE (hlt fram has ~1500 nodes) """ + ,"dataVariant" : """ Right now this is used only for the naming convention. """ + ,"thisCase" : """ Right now this is used only for the naming convention. """ + ,"tiltNames" : """ Combination of tilts for the calculation and usage of the magnification factors. This is needed even when using predefined magnification factors!!! """ + ,"fixSinusoidShift" : """ 1 : fix at sinusoidShift; 0 : it is not fixed """ + ,"nameStr" : """ Right now this is used only for the naming convention, but will be set when initiating the Configuration. """ } def setNameStr(self): @@ -126,58 +139,72 @@ class Rich2MirrAlignOnConf(LHCbConfigurableUser): __slots__ = { #### Only change these if you want to pick up from where you left off in iterations, experts only - "MajItStart" : 0 - ,"MinItStart" : 0 + "MajItStart" : 0 + ,"MinItStart" : 0 #### Do not ever change these!!! Just DONT! - ,"Rich" : 2 - ,"HistoDir" : "" + ,"Rich" : 2 + ,"HistoDir" : "" ### Better not change these, only for very very VERY good reasons - ,"WorkDir" : "/group/online/AligWork/Rich2/" - ,"SaveDir" : "/group/online/AligWork/MirrorAlignments/" - ,"ItNrFile" : "/group/online/dataflow/options/LHCbA/Rich2_Alignment_Reference_File.txt" + ,"WorkDir" : "/group/online/AligWork/Rich2/" + ,"SaveDir" : "/group/online/AligWork/MirrorAlignments/" + ,"ItNrFile" : "/group/online/dataflow/options/LHCbA/Rich2_Alignment_Reference_File.txt" ### May be changed if you know what you are doing - ,"coeffCalibTilt" : 0.3 - ,"phiBinFactor" : 3 - ,"minAverageBinPop": 6 - ,"deltaThetaWindow": 4.0 - ,"combinFitMethod" : 5 - ,"magnFactorsMode" : 0 - ,"magnifDir" : "/group/rich/AlignmentFiles/MagnifFactors/Rich2/" - ,"solutionMethod" : 0 - ,"EvtMax" : -1 - ,"stopTolerance" : 0.1 - ,"stopToleranceSec": 0.0 - ,"dataVariant" : "Collision16" - ,"thisCase" : "online" - ,"tiltNames" : ["", "pri_negYzerZ", "pri_posYzerZ", "pri_zerYnegZ", "pri_zerYposZ", "sec_negYzerZ", "sec_posYzerZ", "sec_zerYnegZ", "sec_zerYposZ"] - ,"fixSinusoidShift": 1 - ,"nameStr" : "name" + ,"dbXMLFile" : "/group/online/alignment/Rich2/MirrorAlign/v3.xml" + ,"coeffCalibTilt" : 0.3 + ,"phiBinFactor" : 3 + ,"minAverageBinPop" : 6 + ,"deltaThetaWindow" : 4.0 + ,"combinFitMethod" : 5 + ,"magnFactorsMode" : 0 + ,"magnifDir" : "/group/rich/AlignmentFiles/MagnifFactors/Rich2/" + ,"solutionMethod" : 0 + ,"regularizationMode" : 1 + ,"stopToleranceMode" : 1 + ,"nominalResolutionSigma" : 0 + ,"stopSigmaFraction" : 0 + ,"stopTolerancePriY" : 0.1 + ,"stopTolerancePriZ" : 0.1 + ,"stopToleranceSecY" : 0.1 + ,"stopToleranceSecZ" : 0.1 + ,"EvtMax" : -1 + ,"dataVariant" : "Collision16" + ,"thisCase" : "online" + ,"tiltNames" : ["", "pri_negYzerZ", "pri_posYzerZ", "pri_zerYnegZ", "pri_zerYposZ", "sec_negYzerZ", "sec_posYzerZ", "sec_zerYnegZ", "sec_zerYposZ"] + ,"fixSinusoidShift" : 1 + ,"nameStr" : "name" } _propertyDocDct = { - "MajItStart" : """ Start the alignment at this major iteration. Please make sure this is consitent with MinItStart. """ - ,"MinItStart" : """ Start the alignment at this minor iteration. Please make sure this is consitent with MajItStart. """ - ,"Rich" : """ Rich1 or Rich2. """ - ,"HistoDir" : """ Directory where the savesets are being written to. """ - ,"WorkDir" : """ Directory in which all the output will be written. """ - ,"SaveDir" : """ Directory in which all output files of the alignment are saved after it has finished """ - ,"ItNrFile" : """ File which contains only the number of the current iteration written by the iterator, to be read by the analyzers """ - ,"coeffCalibTilt" : """ Mirror-tilts applied for the calculation of the magnification coefficients. """ - ,"phiBinFactor" : """ Factor by which the number of phi-bins is reduced. The histograms should now come with 60 phi bins, factor 3 reduced this to 20 bin in the fit.""" - ,"minAverageBinPop": """ Demanded minimal entries per bin in x-y-bin; atm 6: for 20 phi-bins, 4.8: for 25 phi-bins. """ - ,"deltaThetaWindow": """ dTheta-range in the histograms; 4.0 for Rich1 and 3.0 for Rich2. """ - ,"combinFitMethod" : """ Method for fitting the 2D histograms; 1: first fit the slices of dTheta with a Gaussian and then fit to phi using only the mean of the Gaussian, 3: fit a 2D function, 5: Same as 3 but with unifyWidths """ - ,"magnFactorsMode" : """ Method for calculating the magnification coefficents; 0: magnefication coeff. pre-determined, 1: individual for all mirror pairs, determined in the 0-th iteration and not updated any further, 2: individual for all mirrorpairs, determined on-the-fly on the data. """ - ,"magnifDir" : """ directory that contains the pre-determined magnification coeff., files in this folder have to be named Rich[1,2]_MirrMagn _[tiltName]_predefined.txt """ - ,"solutionMethod" : """ Solution method for calculating the mirror tilts after the individual fits; 0: Minuit, 1: Algebraic """ - ,"EvtMax" : """ maximal number of events processed by brunel PER NODE (hlt fram has ~1500 nodes) """ - ,"stopTolerance" : """ tolerance for mirrors (primary mirrors only if stopToleranceSec = 0), in mrad, to stop the alignment because all mirror tilts have converged; historically 0.1 """ - ,"stopToleranceSec": """ if non-zero [see above], tolerance for secondary mirrors, in mrad, to stop the alignment because all mirror tilts have converged; historically 0.1 """ - ,"dataVariant" : """ Right now this is used only for the naming convention. """ - ,"thisCase" : """ Right now this is used only for the naming convention. """ - ,"tiltNames" : """ Combination of tilts for the calculation and usage of the magnification factors. This is needed even when using predefined magnification factors!!! """ - ,"fixSinusoidShift": """ 1 : fix at sinusoidShift; 0 : it is not fixed """ - ,"nameStr" : """ Right now this is used only for the naming convention, but will be set when initiating the Configuration. """ + "MajItStart" : """ Start the alignment at this major iteration. Please make sure this is consitent with MinItStart. """ + ,"MinItStart" : """ Start the alignment at this minor iteration. Please make sure this is consitent with MajItStart. """ + ,"Rich" : """ Rich1 or Rich2. """ + ,"HistoDir" : """ Directory where the savesets are being written to. """ + ,"WorkDir" : """ Directory in which all the output will be written. """ + ,"SaveDir" : """ Directory in which all output files of the alignment are saved after it has finished """ + ,"ItNrFile" : """ File which contains only the number of the current iteration written by the iterator, to be read by the analyzers """ + ,"dbXMLFile" : """ XML file with mirror tilts that is currently in the DB, for comparison of mirror tilts before and after alignment """ + ,"coeffCalibTilt" : """ Mirror-tilts applied for the calculation of the magnification coefficients. """ + ,"phiBinFactor" : """ Factor by which the number of phi-bins is reduced. The histograms should now come with 60 phi bins, factor 3 reduced this to 20 bin in the fit.""" + ,"minAverageBinPop" : """ Demanded minimal entries per bin in x-y-bin; atm 6: for 20 phi-bins, 4.8: for 25 phi-bins. """ + ,"deltaThetaWindow" : """ dTheta-range in the histograms; 4.0 for Rich1 and 3.0 for Rich2. """ + ,"combinFitMethod" : """ Method for fitting the 2D histograms; 1: first fit the slices of dTheta with a Gaussian and then fit to phi using only the mean of the Gaussian, 3: fit a 2D function, 5: Same as 3 but with unifyWidths """ + ,"magnFactorsMode" : """ Method for calculating the magnification coefficents; 0: magnefication coeff. pre-determined, 1: individual for all mirror pairs, determined in the 0-th iteration and not updated any further, 2: individual for all mirrorpairs, determined on-the-fly on the data. """ + ,"magnifDir" : """ directory that contains the pre-determined magnification coeff., files in this folder have to be named Rich[1,2]_MirrMagn _[tiltName]_predefined.txt """ + ,"solutionMethod" : """ Solution method for calculating the mirror tilts after the individual fits; 0: Minuit, 1: Algebraic """ + ,"regularizationMode" : """ regularization mode: default 0: regularization term contains average magnification coefficients as weight; !=0: all weights in the regularization term are 1.""" + ,"stopToleranceMode" : """ tolerance mode: default 0: calculate the stopTolerances from nominal sigma, average magn factors and stopSigmaFraction, 1 use stopTolerances given below""" + ,"nominalResolutionSigma" : """ RICH-dependent nominal Cherenkov angle resolution""" + ,"stopSigmaFraction" : """ tolerance for total tilt of mirror pair in terms of the fraction of the nominal Cherenkov angle resolution""" + ,"stopTolerancePriY" : """ RICH-dependent tolerance for primary mirrors rotation around Y correction in mrad to stop the alignment """ + ,"stopTolerancePriZ" : """ RICH-dependent tolerance for primary mirrors rotation around Z correction in mrad to stop the alignment """ + ,"stopToleranceSecY" : """ RICH-dependent tolerance for secondary mirrors rotation around Y correction in mrad to stop the alignment """ + ,"stopToleranceSecZ" : """ RICH-dependent tolerance for secondary mirrors rotation around Z correction in mrad to stop the alignment """ + ,"EvtMax" : """ maximal number of events processed by brunel PER NODE (hlt fram has ~1500 nodes) """ + ,"dataVariant" : """ Right now this is used only for the naming convention. """ + ,"thisCase" : """ Right now this is used only for the naming convention. """ + ,"tiltNames" : """ Combination of tilts for the calculation and usage of the magnification factors. This is needed even when using predefined magnification factors!!! """ + ,"fixSinusoidShift" : """ 1 : fix at sinusoidShift; 0 : it is not fixed """ + ,"nameStr" : """ Right now this is used only for the naming convention, but will be set when initiating the Configuration. """ } ### Dont mess with this filename!!! diff --git a/Rich/RichMirrorAlignmentOnline/src/MirrPauseHandler.cpp b/Rich/RichMirrorAlignmentOnline/src/MirrPauseHandler.cpp index 693c80eb93831500510458b1c8eb240b1927d5ec..1d9d0fec59c55389161cd4199e4b93e5dec4f464 100644 --- a/Rich/RichMirrorAlignmentOnline/src/MirrPauseHandler.cpp +++ b/Rich/RichMirrorAlignmentOnline/src/MirrPauseHandler.cpp @@ -46,6 +46,7 @@ class MirrPauseHandler: public GaudiAlgorithm, virtual public IIncidentListener IIncidentSvc *m_is; // Gaudi::Utils::TypeNameString m_monitorSvcType; unsigned long m_currentRun; + Gaudi::Time m_currentTime; // In preparation for new RunChangeIncident (https://gitlab.cern.ch/clemenci/LHCb/commit/63277a5746f32735c12ec3a9f8fa0d4264ffb5e2) bool m_fireRunChange; int m_refRunNr; std::string m_itNrFile; @@ -102,6 +103,7 @@ void MirrPauseHandler::handle(const Incident& inc) if( m_fireRunChange && "BeginEvent"==inc.type() ) { // throw a runchange incident to make sure it reads the xml m_is->fireIncident(RunChangeIncident(name(),m_currentRun)) ; + // m_is->fireIncident(RunChangeIncident(name(),m_currentRun,m_currentTime)) ; // Uncomment this when using new RunChangeIncident m_fireRunChange = false ; } @@ -132,6 +134,7 @@ StatusCode MirrPauseHandler::execute() // const LHCb::OnlineRunInfo* ori = 0; const LHCb::OnlineRunInfo* ori=r->begin<LHCb::OnlineRunInfo>(); m_currentRun=ori->Run; + // m_currentTime=ori->GPSTime; // Uncomment this when using the new RunChangeIncident [HOWEVER: PN is not sure that GPSTime is actually the Time needed here yet] } } }