Skip to content
Snippets Groups Projects

Prototype of new alignment configuration

Merged Florian Reiss requested to merge pyconf into master
Compare and Show latest version
3 files
+ 7
7
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 108
0
###############################################################################
# (c) Copyright 2021 CERN for the benefit of the LHCb Collaboration #
# #
# This software is distributed under the terms of the GNU General Public #
# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". #
# #
# In applying this licence, CERN does not waive the privileges and immunities #
# granted to it by virtue of its status as an Intergovernmental Organization #
# or submit itself to any jurisdiction. #
###############################################################################
from PyConf.control_flow import CompositeNode, NodeLogic
from PyConf.tonic import configurable
from PyConf.Algorithms import AlignAlgorithm
from PyConf.Tools import AlignUpdateTool, EigenDiagSolvTool, AlignChisqConstraintTool
from PyConf.application import configure
@configurable
def createAlignAlgorithm(pvs,
tracks,
odin,
particles,
elements,
updatetool,
name='HumboldtAlignAlgorithm',
updateFinalize=False,
outputlevel=3,
nIterations=1,
usecorrelations=True,
chi2Outlier=10000,
histoPrint=False,
outputDataFile='',
onlineMode=False,
runList=[],
useLocalFrame=True,
xmlWriters=[],
inputDataFiles=[]):
alignment = AlignAlgorithm(
name=name,
VertexLocation=pvs,
ODINLocation=odin,
TracksLocation=tracks,
ParticleLocation=particles,
UpdateTool=updatetool,
Elements=list(elements),
UpdateInFinalize=updateFinalize,
OutputLevel=outputlevel,
NumberOfIterations=nIterations,
UseCorrelations=usecorrelations,
Chi2Outlier=chi2Outlier,
HistoPrint=histoPrint,
OutputDataFile=outputDataFile,
OnlineMode=onlineMode,
RunList=runList,
UseLocalFrame=useLocalFrame,
XmlWriters=xmlWriters,
InputDataFiles=inputDataFiles)
return alignment
@configurable
def createAlignUpdateTool(name='updateTool',
surveyconstraintTool=AlignChisqConstraintTool(),
matrixSolverTool=EigenDiagSolvTool(public=True),
constraints=[],
minNumberOfHits=10,
usePreconditioning=True,
logFile="alignlog.txt",
useWeightedAverage=False):
updatetool = AlignUpdateTool(
name=name,
MatrixSolverTool=matrixSolverTool,
SurveyConstraintTool=surveyconstraintTool,
Constraints=constraints,
MinNumberOfHits=minNumberOfHits,
UsePreconditioning=usePreconditioning,
LogFile=logFile,
UseWeightedAverage=useWeightedAverage,
public=True)
return updatetool
def runAlignment(options,
chisqConstraintTool,
lagrangeConstrains,
alignmentTracks,
alignmentPVs,
particles,
odin,
elementsToAlign,
monitorList=[]):
updatetool = createAlignUpdateTool(
surveyconstraintTool=chisqConstraintTool,
constraints=lagrangeConstrains)
alignment = createAlignAlgorithm(
pvs=alignmentPVs,
tracks=alignmentTracks,
odin=odin,
particles=particles,
elements=elementsToAlign,
updatetool=updatetool)
top_node = CompositeNode(
"alignment",
monitorList + [alignment],
combine_logic=NodeLogic.NONLAZY_OR,
force_order=True)
configure(options, top_node, public_tools=[])
Loading