Skip to content
Snippets Groups Projects

Prototype of new alignment configuration

Merged Florian Reiss requested to merge pyconf into master
1 file
+ 103
46
Compare changes
  • Side-by-side
  • Inline
@@ -11,9 +11,11 @@
from PyConf.application import configure_input, configure
from PyConf.control_flow import CompositeNode, NodeLogic
from PyConf.tonic import configurable
from RecoConf.hlt2_tracking import make_hlt2_tracks
from RecoConf.hlt1_tracking import make_pvs, all_velo_track_types
from Moore import options
from PyConf.Tools import AlignUpdateTool
options.set_input_and_conds_from_testfiledb('MiniBrunel_2018_MinBias_FTv4_MDF')
options.input_files = list(set(options.input_files)) # remove dups
@@ -29,9 +31,76 @@ configure_input(options)
# only configure data flow after this line !
from RecoConf.reconstruction_objects import reconstruction
from PyConf.Algorithms import AlignAlgorithm
from PyConf.Tools import AlignUpdateTool, EigenDiagSolvTool, AlignChisqConstraintTool
@configurable
def createAlignAlgorithm(pvs,
tracks,
odin,
particles,
elements,
updateFinalize=True,
outputlevel=3,
nIterations=1,
usecorrelations=True,
chi2Outlier=10000,
histoPrint=False,
outputDataFile='',
onlineMode=False,
runList=[],
useLocalFrame=True):
updatetool = createAlignUpdateTool()
alignment = AlignAlgorithm(
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)
return alignment
@configurable
def createAlignUpdateTool(surveyconstraintTool=AlignChisqConstraintTool(),
matrixSolverTool=EigenDiagSolvTool(public=True),
constraints=[],
minNumberOfHits=10,
usePreconditioning=True,
logFile="alignlog.txt",
useWeightedAverage=False):
updatetool = AlignUpdateTool(
MatrixSolverTool=matrixSolverTool,
SurveyConstraintTool=surveyconstraintTool,
Constraints=constraints,
MinNumberOfHits=minNumberOfHits,
UsePreconditioning=usePreconditioning,
LogFile=logFile,
UseWeightedAverage=useWeightedAverage)
return updatetool
with reconstruction.bind(from_file=False):
#make tracks and PVs
# TODO: in principle the PVs should be an optional input for the alignment
# TODO: currently, the reconstructed PVs do not store the list of associated tracks. This means that the PVs can not be used by the alignment
hlt2_tracks = make_hlt2_tracks(light_reco=False)
best_tracks = hlt2_tracks["Best"]['v1']
pvs = make_pvs()
@@ -70,12 +139,6 @@ with reconstruction.bind(from_file=False):
from Hlt2Conf.standard_particles import make_long_pions
pions = make_long_pions()
#put everything together into AlignAlgorithm and run it
from PyConf.Algorithms import AlignAlgorithm
from PyConf.Tools import AlignUpdateTool, EigenDiagSolvTool, AlignChisqConstraintTool
# add arguments to configure AlignAlgorithm and AlignUpdateTool
#define elements and degrees of freedom to be aligned
from TAlignment.Alignables import Alignables
elements = Alignables()
@@ -86,15 +149,13 @@ with reconstruction.bind(from_file=False):
elements.VPModules(dofsmodules)
# add survey constraints
myAlignChisqConstraintTool = AlignChisqConstraintTool(
Constraints=[
"VP : 0 0 0 0 0 0 : 0.5 0.5 0.5 0.0001 0.0001 0.0001",
"VP/VP(Right|Left) : 0. 0. 0. 0. 0. 0. : 0.200 0.200 0.2 0.0001 0.0001 0.0001"
],
XmlUncertainties=[
".*Module(00|).. : 0.02 0.02 0.02 0.0002 0.0002 0.0002"
],
XmlFiles=["Alignment/Alignment/TAlignment/surveyxml/VP/Modules.xml"])
from Configurables import SurveyConstraints
surveyconstraints = SurveyConstraints()
surveyconstraints.VP()
myAlignChisqConstraintTool = AlignChisqConstraintTool(Constraints=surveyconstraints.Constraints,
XmlUncertainties=surveyconstraints.XmlUncertainties,
XmlFiles=surveyconstraints.XmlFiles)
# define Lagrange constraints
constraints = []
constraints.append("VPHalfAverage : VP/VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
@@ -103,34 +164,30 @@ with reconstruction.bind(from_file=False):
constraints.append(
"VPInternal : VP/VPLeft/Module..WithSupport: Tx Ty Tz Rx Ry Rz")
myAlignUpdateTool = AlignUpdateTool(
MatrixSolverTool=EigenDiagSolvTool(public=True),
SurveyConstraintTool=myAlignChisqConstraintTool,
Constraints=constraints)
alignment = AlignAlgorithm(
VertexLocation=selected_pvs,
ODINLocation=odin,
TracksLocation=alignmentTracks,
ParticleLocation=pions,
UpdateTool=myAlignUpdateTool,
Elements=list(elements),
UpdateInFinalize=True)
# add track and vertex monitoring
from PyConf.Algorithms import TrackMonitor, TrackFitMatchMonitor, TrackVertexMonitor
# TODO: should only use selected PVs
myTrackMonitor = TrackMonitor(
TracksInContainer=alignmentTracks, PrimaryVertices=converted_pvs)
myTrackFitMatchMonitor = TrackFitMatchMonitor(
TrackContainer=alignmentTracks)
# TODO: check vertices
myTrackVertexMonitor = TrackVertexMonitor(
TrackContainer=alignmentTracks, PVContainer=converted_pvs)
top_node = CompositeNode(
"alignment", [
alignment, myTrackMonitor, myTrackFitMatchMonitor,
myTrackVertexMonitor
],
combine_logic=NodeLogic.NONLAZY_OR,
force_order=True)
configure(options, top_node, public_tools=[])
with createAlignUpdateTool.bind(surveyconstraintTool=myAlignChisqConstraintTool, constraints=constraints):
alignment = createAlignAlgorithm(pvs=selected_pvs, tracks=alignmentTracks, odin=odin, particles=pions, elements=elements)
# add track and vertex monitoring
from PyConf.Algorithms import TrackMonitor, TrackFitMatchMonitor, TrackVertexMonitor
# TODO: should only use selected PVs
myTrackMonitor = TrackMonitor(
TracksInContainer=alignmentTracks, PrimaryVertices=converted_pvs)
myTrackFitMatchMonitor = TrackFitMatchMonitor(
TrackContainer=alignmentTracks)
# TODO: check vertices
myTrackVertexMonitor = TrackVertexMonitor(
TrackContainer=alignmentTracks, PVContainer=converted_pvs)
top_node = CompositeNode(
"alignment", [
alignment, myTrackMonitor, myTrackFitMatchMonitor,
myTrackVertexMonitor
],
combine_logic=NodeLogic.NONLAZY_OR,
force_order=True)
configure(options, top_node, public_tools=[])
Loading