From 23a2b5d8351d8b06d624270c869fbe7a22885c6d Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Thu, 17 Aug 2023 16:17:07 +0200 Subject: [PATCH 01/12] added chi2 calculation for joint module constraint parameters --- .../TAlignment/src/AlignChisqConstraintTool.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp b/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp index 5ce9b0ad2..1ac91a024 100644 --- a/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp +++ b/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp @@ -575,6 +575,8 @@ namespace LHCb::Alignment { std::ostream& logmessage ) const { size_t totalnumconstraints( 0 ); double totalchisq( 0 ); + double totalchi2_by_parameter[6] = {0,0,0,0,0,0}; + for ( const auto& configuredjoint : m_joints ) { // first decode (this could go elsewhere) debug() << "Parsing joint constraint: " << configuredjoint << endmsg; @@ -645,6 +647,12 @@ namespace LHCb::Alignment { const Vector6 residual = deltaB_common.transformParameters() - deltaA_common.transformParameters(); debug() << "Joint residual: " << residual << endmsg; AlParameters::TransformCovariance W; + + for(int i = 0; i < 6; ++i) { + W(i,i) = 1 / ( errors[i] * errors[i] ); + totalchi2_by_parameter[i] += residual(i) * residual(i) * W(i,i); + } + for ( int i = 0; i < 6; ++i ) W( i, i ) = 1 / ( errors[i] * errors[i] ); const Vector6 Wresidual = W * residual; totalchisq += ROOT::Math::Similarity( residual, W ); @@ -682,6 +690,13 @@ namespace LHCb::Alignment { } } logmessage << "Total chi2 of joint constraints: " << totalchisq << "/" << totalnumconstraints << std::endl; + logmessage << "chi2 values for each degree of freedom:" << std::endl; + logmessage << "Tx_chi2: " << totalchi2_by_parameter[0] << "/" << totalnumconstraints << std::endl; + logmessage << "Ty_chi2: " << totalchi2_by_parameter[1] << "/" << totalnumconstraints << std::endl; + logmessage << "Tz_chi2: " << totalchi2_by_parameter[2] << "/" << totalnumconstraints << std::endl; + logmessage << "Rx_chi2: " << totalchi2_by_parameter[3] << "/" << totalnumconstraints << std::endl; + logmessage << "Ry_chi2: " << totalchi2_by_parameter[4] << "/" << totalnumconstraints << std::endl; + logmessage << "Rz_chi2: " << totalchi2_by_parameter[5] << "/" << totalnumconstraints << std::endl; return LHCb::ChiSquare( totalchisq, totalnumconstraints ); } } // namespace LHCb::Alignment -- GitLab From 6a8a321194e98e856a68af8c06728632b95fbb0c Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Fri, 25 Aug 2023 14:40:36 +0200 Subject: [PATCH 02/12] cpp changed, particle selection adapted, optionsfile added, best joint uncertainties added --- .../options/AlignFTjointModules_data.py | 112 ++ .../python/Humboldt/ParticleSelections.py | 13 +- .../python/Humboldt/alignment_tracking.py | 12 +- .../python/TAlignment/Alignables.py | 3 +- .../python/TAlignment/SurveyConstraints.py | 3 - .../surveyxml/FT/Modules_default.xml | 1563 +++++++++-------- .../surveyxml/FT/Modules_default_old.xml | 1038 +++++++++++ 7 files changed, 1953 insertions(+), 791 deletions(-) create mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data.py create mode 100644 Alignment/TAlignment/surveyxml/FT/Modules_default_old.xml diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data.py b/Alignment/Humboldt/options/AlignFTjointModules_data.py new file mode 100644 index 000000000..a8f591433 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFTjointModules_data.py @@ -0,0 +1,112 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +# options.input_type = 'MDF' # look into eos for correct data type +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" +CONDDBTag = "master" + +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 # set to 1 for tuples, 30 for align V3 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf( +) + +from TAlignment.Alignables import Alignables +elements = Alignables() +dofs = "TxRz" +elements.FTHalfModules(dofs) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool + +surveyconstraints = SurveyConstraints() +surveyconstraints.FT(addHalfModuleJoints=True) + +# define Lagrange constraints +constraints = [] +constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList +with createAlignUpdateTool.bind( + logFile="alignlog_ft_modules_d0_prkalman.txt" +), createAlignAlgorithm.bind( + xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')): + runAlignment( + options, + surveyConstraints=surveyconstraints, + lagrangeConstraints=constraints, + alignmentTracks=alignmentTracks, + alignmentPVs=alignmentPVs, + particles=particles, + odin=odin, + elementsToAlign=elements, + monitorList=monitors, + usePrKalman=True) diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py index 4411a1151..b1a333dcf 100644 --- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py +++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py @@ -28,8 +28,8 @@ def defaultHLTD0Selection(vertices_v2): loosepions = make_long_pions() loosekaons = make_long_kaons() - - ptmin = 1400 * MeV + ptmin = 800 * MeV +# ptmin = 1400 * MeV minIP = 0.06 * mm pions = ParticleFilter( @@ -48,12 +48,13 @@ def defaultHLTD0Selection(vertices_v2): combination_code = F.require_all( in_range(1760 * MeV, F.MASS, 1960 * MeV), - F.SUM(F.PT) > 1200 * MeV, - F.MAXDOCACUT(0.1 * mm), + F.SUM(F.PT) > 2000 * MeV, + F.MAXDOCACUT(0.15 * mm), ) vertex_code = F.require_all(F.CHI2DOF < 10., - F.BPVETA(vertices_v2) > 2, - F.BPVETA(vertices_v2) < 5) +# F.BPVETA(vertices_v2) > 2, +# F.BPVETA(vertices_v2) < 5 + ) combinedD0 = ParticleCombiner( [pions, kaons], diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py index 14b83dea9..be8668f0c 100644 --- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py +++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py @@ -225,23 +225,31 @@ def make_scifi_tracks_and_particles_prkf(): PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\ make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\ make_muon_hits.bind(geometry_version=3),\ + make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\ make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\ make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\ + get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\ hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT): reco = hlt2_reconstruction() hlt2_tracks = reco['LongTracks'] best_tracks = hlt2_tracks pvs = reco["PVs_v1"] + particlepvs = reco["PVs"] from PyConf.application import default_raw_banks from PyConf.application import make_odin odin = make_odin() - + from Humboldt.ParticleSelections import defaultHLTD0Selection particles = defaultHLTD0Selection(particlepvs) + from PyConf.Tools import TrackSelector + from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger + from Humboldt.TrackSelections import GoodLongTracks + from Humboldt.VertexSelections import VPPrimaryVertices + selected_tracks = GoodLongTracks(best_tracks) - track_name = "AlignGoodLongTracks" + track_name = "GoodLongTracks" alignmentTracks = TrackSelectionMerger( InputLocations=[selected_tracks]).OutputLocation selected_pvs = VPPrimaryVertices(pvs) diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py index f99095f4d..b754cd2bd 100755 --- a/Alignment/TAlignment/python/TAlignment/Alignables.py +++ b/Alignment/TAlignment/python/TAlignment/Alignables.py @@ -400,7 +400,7 @@ class Alignables(list): self.__append(elements, dofs) def FTHalfModuleJoints(self, - errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"): + errors="0.0000074 0.0012 0.0019 0.0004 0.00000044 0.00022"): joints = [] for station in self._FTStations: for layer in self._FTLayers: @@ -415,6 +415,7 @@ class Alignables(list): modbot = 'FT' + station + layer + Qbot + module joints.append(" : ".join( [modtop, modbot, errors, "0 -1212.75 0"])) + print(joints) return joints def FTMats(self, dofs=""): diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index 7bc46e94a..e3f762aff 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -160,10 +160,7 @@ class SurveyConstraints(LHCbConfigurableUser): ] else: if UseDD4Hep: - print("this is ok 1") self.XmlUncertainties += [ - #".*M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" - #"FT/T3/X2/.*/HL./M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" ] else: diff --git a/Alignment/TAlignment/surveyxml/FT/Modules_default.xml b/Alignment/TAlignment/surveyxml/FT/Modules_default.xml index adff8167a..4afc52baf 100644 --- a/Alignment/TAlignment/surveyxml/FT/Modules_default.xml +++ b/Alignment/TAlignment/surveyxml/FT/Modules_default.xml @@ -1,1038 +1,1043 @@ <?xml version="1.0" encoding="ISO-8859-1"?> -<!-- - (c) Copyright 2000-2018 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. +<!-- + (c) Copyright 2000-2022 CERN for the benefit of the LHCb Collaboration + In this survey: + * survey data from surveys in assembly hall + * additional rotations from survey of frames downstairs are applied to modules + * modules with missing data are given the information for the average plane for their quarter + * beam angle correction between survey plane and lhcb plane is applied + * Version date: 15th November 2022 + List of modules with missing data: + * T1X1Q2M1 + * T1VQ0M3 + * T2X1Q2M0 + * T3X1Q0M0 + * T3VQ0M4 + * T3X2Q0M1 --> -<!DOCTYPE DDDB SYSTEM "git:/DTD/structure.dtd"> <DDDB> - <condition classID="6" name="T1X1Q0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X1Q3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.</paramVector> </condition> - <condition classID="6" name="T1UQ2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1UQ3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1VQ3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T1X2Q3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X1Q3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2UQ3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2VQ3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T2X2Q3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q0M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q1M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q2M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X1Q3M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ0M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ1M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ2M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3UQ3M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ0M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ1M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ2M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3VQ3M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q0M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q0M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q0M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q0M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q0M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q0M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q1M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q1M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q1M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q1M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q1M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q1M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q2M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q2M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q2M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q2M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q2M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q2M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q3M0"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M5"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q3M1"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M4"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q3M2"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M3"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q3M3"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M2"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q3M4"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M1"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> - <condition classID="6" name="T3X2Q3M5"> - <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> - <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M0"> + <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector> + <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector> </condition> -</DDDB> + </DDDB> diff --git a/Alignment/TAlignment/surveyxml/FT/Modules_default_old.xml b/Alignment/TAlignment/surveyxml/FT/Modules_default_old.xml new file mode 100644 index 000000000..adff8167a --- /dev/null +++ b/Alignment/TAlignment/surveyxml/FT/Modules_default_old.xml @@ -0,0 +1,1038 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + (c) Copyright 2000-2018 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. +--> +<!DOCTYPE DDDB SYSTEM "git:/DTD/structure.dtd"> +<DDDB> + <condition classID="6" name="T1X1Q0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X1Q3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1UQ3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1VQ3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T1X2Q3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X1Q3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2UQ3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2VQ3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T2X2Q3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q0M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q1M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q2M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X1Q3M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ0M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ1M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ2M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3UQ3M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ0M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ1M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ2M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3VQ3M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q0M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q0M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q0M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q0M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q0M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q0M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q1M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q1M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q1M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q1M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q1M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q1M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q2M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q2M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q2M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q2M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q2M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q2M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q3M0"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q3M1"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q3M2"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q3M3"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q3M4"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> + <condition classID="6" name="T3X2Q3M5"> + <paramVector name="dPosXYZ" type="double">0 0 0</paramVector> + <paramVector name="dRotXYZ" type="double">0 0 0</paramVector> + </condition> +</DDDB> -- GitLab From f05190f54ce576aee119eda9b574407e39c539a8 Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Wed, 8 Nov 2023 20:24:39 +0100 Subject: [PATCH 03/12] added options files for global alignment changed alignmentscenarios and survey constraints --- .../options/AlignFT_VP_combined_data.py | 104 +++++++ .../options/AlignFT_VP_combined_data_scifi.py | 104 +++++++ .../options/AlignFT_VP_combined_data_v2.py | 104 +++++++ .../options/AlignFT_VP_combined_data_v3.py | 104 +++++++ .../options/AlignFT_VP_combined_data_v4.py | 104 +++++++ .../options/AlignFT_VP_combined_data_v5.py | 104 +++++++ .../options/AlignFT_VP_combined_data_v6.py | 104 +++++++ .../AlignFT_VP_combined_data_veloRx.py | 104 +++++++ .../AlignFT_VP_combined_data_veloRz.py | 104 +++++++ .../options/AlignFTjointModules_data.py | 21 +- .../options/AlignFTjointModules_data_2.py | 117 +++++++ .../options/AlignFTjointModules_data_3.py | 118 +++++++ .../python/Humboldt/AlignmentScenarios.py | 264 +++++++++++++++- .../python/Humboldt/alignment_tracking.py | 42 ++- .../Humboldt/alignment_tracking.py.save | 290 ++++++++++++++++++ Alignment/Humboldt/python/Humboldt/utils.py | 2 + .../python/TAlignment/Alignables.py | 10 +- .../python/TAlignment/SurveyConstraints.py | 40 ++- .../surveyxml/FT/CFrames_surveyInput_2023.xml | 126 ++++++++ 19 files changed, 1937 insertions(+), 29 deletions(-) create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data.py create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py create mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data_2.py create mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data_3.py create mode 100644 Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save create mode 100644 Alignment/TAlignment/surveyxml/FT/CFrames_surveyInput_2023.xml diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py new file mode 100644 index 000000000..70688b57c --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment +config = configureGlobalAlignment(halfdofs="TxTyTzRy") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py new file mode 100644 index 000000000..0af04347a --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment, configureSciFiOnly +config = configureSciFiOnly() + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py new file mode 100644 index 000000000..5e29b2c53 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v2 +config = configureGlobalAlignment_v2(halfdofs="TxTyTzRy") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py new file mode 100644 index 000000000..2897c16d9 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v3 +config = configureGlobalAlignment_v3(halfdofs="TxTyTzRy") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py new file mode 100644 index 000000000..76ed38640 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v4 +config = configureGlobalAlignment_v4(halfdofs="TxTyTzRy") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py new file mode 100644 index 000000000..f6dc63cf6 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v5 +config = configureGlobalAlignment_v5(halfdofs="TxTyTz") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py new file mode 100644 index 000000000..be1cc5ec7 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v6 +config = configureGlobalAlignment_v6(halfdofs="TxTyTz") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py new file mode 100644 index 000000000..1daa7414b --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VeloRx +config = configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py new file mode 100644 index 000000000..69320f809 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VeloRz +config = configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data.py b/Alignment/Humboldt/options/AlignFTjointModules_data.py index a8f591433..160d6131a 100644 --- a/Alignment/Humboldt/options/AlignFTjointModules_data.py +++ b/Alignment/Humboldt/options/AlignFTjointModules_data.py @@ -43,14 +43,18 @@ options.data_type = 'Upgrade' # set DDDB and CondDB info options.geometry_version = "trunk" +#CONDDBTag = "nibreer_joint_analysis" CONDDBTag = "master" - options.conditions_version = CONDDBTag online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' if os.path.exists(online_cond_path): DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path +#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/' +#if os.path.exists(cond_path): +# DD4hepSvc().ConditionsLocation = 'file://' + cond_path + from glob import glob from Gaudi.Configuration import * from GaudiConf import IOHelper @@ -80,9 +84,8 @@ alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and from TAlignment.Alignables import Alignables elements = Alignables() -dofs = "TxRz" -elements.FTHalfModules(dofs) - +elements.FTHalfModules("TxTzRxRz") +#elements.FTHalfModules("TxTzRxRz") # add survey constraints from Configurables import SurveyConstraints from PyConf.Tools import AlignChisqConstraintTool @@ -90,9 +93,17 @@ from PyConf.Tools import AlignChisqConstraintTool surveyconstraints = SurveyConstraints() surveyconstraints.FT(addHalfModuleJoints=True) +surveyconstraints.Constraints += [ + # allow for an Rz of ~1mm/1m around the z=0 part of the half module + "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.001 0.001 0.001 : 0 +1213 0"] + + # define Lagrange constraints constraints = [] -constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") +constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Tz Rx Rz") +#constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total') +#constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx: total') +#constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz") from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList with createAlignUpdateTool.bind( diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data_2.py b/Alignment/Humboldt/options/AlignFTjointModules_data_2.py new file mode 100644 index 000000000..ef93a1cd4 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFTjointModules_data_2.py @@ -0,0 +1,117 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc + +options.input_type = 'MDF' + +options.input_raw_format = 0.5 +# options.input_type = 'MDF' # look into eos for correct data type +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" +#CONDDBTag = "nibreer_joint_analysis" +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/' +#if os.path.exists(cond_path): +# DD4hepSvc().ConditionsLocation = 'file://' + cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 # set to 1 for tuples, 30 for align V3 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() + +from TAlignment.Alignables import Alignables +elements = Alignables() +elements.FTHalfModules("TxTzRxRz") +#elements.FTHalfModules("TxTzRxRz") +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool + +surveyconstraints = SurveyConstraints() +surveyconstraints.FT(addHalfModuleJoints=True) + +# define Lagrange constraints +constraints = [] +constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") +constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total') +constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx : total') + +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList +with createAlignUpdateTool.bind( + logFile="alignlog_ft_modules_d0_prkalman.txt" +), createAlignAlgorithm.bind( + xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')): + runAlignment( + options, + surveyConstraints=surveyconstraints, + lagrangeConstraints=constraints, + alignmentTracks=alignmentTracks, + alignmentPVs=alignmentPVs, + particles=particles, + odin=odin, + elementsToAlign=elements, + monitorList=monitors, + usePrKalman=True) diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data_3.py b/Alignment/Humboldt/options/AlignFTjointModules_data_3.py new file mode 100644 index 000000000..0f1c38663 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFTjointModules_data_3.py @@ -0,0 +1,118 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +# options.input_type = 'MDF' # look into eos for correct data type +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" +#CONDDBTag = "nibreer_joint_analysis" +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/' +#if os.path.exists(cond_path): +# DD4hepSvc().ConditionsLocation = 'file://' + cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 # set to 1 for tuples, 30 for align V3 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf( +) + +from TAlignment.Alignables import Alignables +elements = Alignables() +elements.FTHalfModules("TxTzRxRz") +#elements.FTHalfModules("TxTzRxRz") +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool + +surveyconstraints = SurveyConstraints() +surveyconstraints.FT(addHalfModuleJoints=True) + +# define Lagrange constraints +constraints = [] +constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Tz Rx Rz") +constraints.append('FixMeanModuleT1 : FT/T1/V/HL.*/M. : Tx') +constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx') +constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz") + +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList +with createAlignUpdateTool.bind( + logFile="alignlog_ft_modules_d0_prkalman.txt" +), createAlignAlgorithm.bind( + xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')): + runAlignment( + options, + surveyConstraints=surveyconstraints, + lagrangeConstraints=constraints, + alignmentTracks=alignmentTracks, + alignmentPVs=alignmentPVs, + particles=particles, + odin=odin, + elementsToAlign=elements, + monitorList=monitors, + usePrKalman=True) diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py index ba123b3c1..e20748736 100644 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py @@ -38,6 +38,266 @@ class AlignmentScenario(): #self.SurveyConstraints = surveyconstraints #self.SubDetectors = subdetectors +def configureSciFiOnly(): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['FT'] + + elements = Alignables() + + elements.FTCFrames("TxRz") + elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTHalfModules("Rx") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + surveyconstraints.XmlFiles = [] + + surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True) + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("Rx") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("Rz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + #elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") +# constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + #elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + print('the wrong survey was used...') + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + print('survey constraints: ', setup.SurveyConstraints) + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v5(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + +# elements.FTCFrameLayers("TxRz") +# elements.FTCFrames("TxTz") + elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() +# surveyconstraints.XmlFiles = [] + + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v6(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) +# elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRxRz") + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup def configureRun3Alignment(fixQOverPBias=True): # just a first implementation to test some essential things @@ -59,8 +319,8 @@ def configureRun3Alignment(fixQOverPBias=True): # add some survey constraints (just fixing to nominal, right now) surveyconstraints = SurveyConstraints() if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data20221115dd4hep') + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data20221115dd4hep') else: surveyconstraints.VP(ver='latest') surveyconstraints.FT(ver='MC') diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py index be8668f0c..fd05878a6 100644 --- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py +++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py @@ -253,24 +253,38 @@ def make_scifi_tracks_and_particles_prkf(): alignmentTracks = TrackSelectionMerger( InputLocations=[selected_tracks]).OutputLocation selected_pvs = VPPrimaryVertices(pvs) - + from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor + from GaudiKernel.SystemOfUnits import MeV monitorlist = [] + myFTTrackMonitor = FTTrackMonitor_PrKalman( + name="AlignMoni_FTTrackMonitor_PrKalman", + TracksInContainer=alignmentTracks) + myTrackVertexMonitor = TrackVertexMonitor( + name="AlignMoni_FT_TrackVertexMonitor", + TrackContainer=alignmentTracks, + PVContainer=pvs) + monitorlist.append(myFTTrackMonitor) + monitorlist.append(myTrackVertexMonitor) +# monitorlist = [ +# myFTTrackMonitor, +# myTrackVertexMonitor, +# ] + # ParticleMassMonitor + monitorlist = monitorlist + monitor_SciFi_tracks( alignmentTracks, track_name, includeQuarters=True) monitorlist = monitorlist + monitor_SciFi_tracks( best_tracks, "BestHLT2Tracks", includeQuarters=True) - myTrackVertexMonitor = TrackVertexMonitor( - TrackContainer=alignmentTracks, PVContainer=pvs) - monitorlist.append(myTrackVertexMonitor) ## particle mass monitor needs replacement or upgrade - myParticleMonitor = ParticleMassMonitor( - name="defaultD0MassMonitor", - ParticleType="D0", - Particles=particles, - MassMean=1864.84 * MeV, - MassSigma=90 * MeV, - Bins=100) - monitorlist.append(myParticleMonitor) - - return alignmentTracks, selected_pvs, particles, odin, monitorlist + #myParticleMonitor = ParticleMassMonitor( + # name="defaultD0MassMonitor", + # ParticleType="D0", + # Particles=particles, + # MassMean=1864.84 * MeV, + # MassSigma=90 * MeV, + # Bins=100) + #monitorlist.append(myParticleMonitor) + + #return alignmentTracks, selected_pvs, particles, odin, monitorlist + return alignmentTracks, selected_pvs, odin, monitorlist diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save new file mode 100644 index 000000000..fd05878a6 --- /dev/null +++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save @@ -0,0 +1,290 @@ +############################################################################### +# (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 functools import partial +from RecoConf.hlt1_tracking import ( + all_velo_track_types, + make_VeloClusterTrackingSIMD_hits, + make_VeloClusterTrackingSIMD, + make_RetinaClusters, + get_global_measurement_provider, + make_velo_full_clusters, + make_reco_pvs, + make_PatPV3DFuture_pvs, +) +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT + +from PyConf.Algorithms import ( + PrKalmanFilter_Velo, + TrackSelectionMerger, + TrackListRefiner, + VeloClusterTrackingSIMDFull, + PatPVLeftRightFinderMerger, + VeloRetinaClusterTrackingSIMDFull, + PrKalmanFilter_noUT, + PrStoreUTHitEmptyProducer, + VPRetinaFullClusterDecoder, + VeloRetinaClusterTrackingSIMD, + TrackMonitor_PrKalman, + TrackFitMatchMonitor_PrKalman, + FTTrackMonitor_PrKalman, + TrackVertexMonitor, + TrackParticleMonitor, + ParticleMassMonitor, +) +from PyConf.Algorithms import Deprecated__TrackListRefiner as TrackListRefiner + +from PyConf.Tools import TrackLinearExtrapolator +from RecoConf.core_algorithms import make_unique_id_generator +from Humboldt.TrackSelections import VPBackwardTracks, VPGoodTracks, GoodLongTracks +from Humboldt.VertexSelections import VPPrimaryVertices +from Humboldt.ParticleSelections import defaultHLTD0Selection + +from GaudiKernel.SystemOfUnits import MeV +from PyConf.Tools import TrackSelector, FTTrackSelector + + +def make_pvs(inputtracks): + return PatPVLeftRightFinderMerger(InputTracks=inputtracks).OutputVertices + + +def make_empty_ut_hit_for_meas_provider(): + """Creates an empty container of UT hits, used for the no UT scenario. + Necessary to run with DD4hep while Ut is not there yet. Could be moved to Moore + + Returns: + DataHandle: PrStoreUTHitEmptyProducer' Output. + + """ + return PrStoreUTHitEmptyProducer().Output + + +def make_fitted_velotracks(usePrKalman=True, + MaxOutlierIterations=2, + MaxChi2Dof=5, + MinNVeloLayers=4): + with make_VeloClusterTrackingSIMD.bind( + algorithm=VeloRetinaClusterTrackingSIMDFull): + vp_hits = make_VeloClusterTrackingSIMD_hits() + velo_tracks = all_velo_track_types() + backward_velo_tracks = velo_tracks["Pr::backward"] + forward_velo_tracks = velo_tracks["Pr"] + + if usePrKalman: + kf_template = partial( + PrKalmanFilter_Velo, + MaxOutlierIterations=MaxOutlierIterations, + HitsVP=vp_hits, + FillFitResult=True, + ClassicSmoothing=True, + MinNumVPHitsForOutlierRemoval=4, + ReferenceExtrapolator=TrackLinearExtrapolator(), + InputUniqueIDGenerator=make_unique_id_generator()) + + fitted_velo_bwd = kf_template( + name="PrKalmanFilter_VeloBwd", + Input=backward_velo_tracks).OutputTracks + fitted_velo_fwd = kf_template( + name="PrKalmanFilter_VeloFwd", + Input=forward_velo_tracks).OutputTracks + + selected_bwd_tracks = VPBackwardTracks( + fitted_velo_bwd, + MaxChi2Cut=MaxChi2Dof, + MinNVeloLayers=MinNVeloLayers) + selected_fwd_tracks = VPGoodTracks( + fitted_velo_fwd, + MaxChi2Dof=MaxChi2Dof, + MinNVeloLayers=MinNVeloLayers) + velotracks = TrackSelectionMerger( + InputLocations=[selected_bwd_tracks, selected_fwd_tracks + ]).OutputLocation + else: + from PyConf.Algorithms import TrackEventFitter + from PyConf.Tools import ( + TrackMasterFitter, + TrackSimpleExtraSelector, + TrackMasterExtrapolator, + ) + measprovider = get_global_measurement_provider( + ignoreUT=True, + ignoreFT=True, + ignoreMuon=True, + velo_hits=make_RetinaClusters, + ut_hits=make_empty_ut_hit_for_meas_provider) + #materiallocator = SimplifiedMaterialLocator() this will not work with dd4hep + extrapolatorselector = TrackSimpleExtraSelector( + ExtrapolatorName="TrackLinearExtrapolator") + masterextrapolator = TrackMasterExtrapolator( + ExtraSelector=extrapolatorselector, + ApplyEnergyLossCorr=False, + ApplyElectronEnergyLossCorr=False) + trackfitter = TrackMasterFitter( + MeasProvider=measprovider, + Extrapolator=masterextrapolator, + MaxUpdateTransports=1, + MinNumVPHitsForOutlierRemoval=4, + MaxNumberOutliers=MaxOutlierIterations, + MakeMeasurements=True, + MakeNodes=True, # need to force a refit + FastMaterialApproximation=True) + veloonlyfitter = TrackEventFitter( + TracksInContainer=velo_tracks["v1"], Fitter=trackfitter) + velotracks = VPGoodTracks( + veloonlyfitter.TracksOutContainer, + MaxChi2Dof=MaxChi2Dof, + MinNVeloLayers=MinNVeloLayers) + + return velotracks + + +def make_align_vp_input(usePrKalman=True, + MaxOutlierIterations=2, + MaxChi2Dof=5, + MinNVeloLayers=4): + + align_tracks = make_fitted_velotracks( + usePrKalman=usePrKalman, + MaxOutlierIterations=MaxOutlierIterations, + MaxChi2Dof=MaxChi2Dof, + MinNVeloLayers=MinNVeloLayers) + align_pvs = make_pvs(align_tracks) + return align_tracks, align_pvs + + +def make_align_input_besttracks(usePrKalman=True): + # it seems that we have little choice but just to set up the entire reco sequence ourselves. the moore stuff is close to impossible to work with. + # note that the PVs reconstructed by TrackBeamLineVertexFinderSoA do not store the list of associated tracks. Use PatPV3DFuture instead + from RecoConf.hlt2_tracking import make_hlt2_tracks_without_UT + with make_VeloClusterTrackingSIMD.bind(algorithm=VeloClusterTrackingSIMDFull),\ + PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True): + hlt2_tracks = make_hlt2_tracks_without_UT(use_pr_kf=usePrKalman) + + # this is a bit funny, but we need fitted velo tracks. so we filter from the best track container what we need, then add our own fitted velo tracks + from Humboldt.TrackSelections import GoodLongTracks + goodlongtracks = GoodLongTracks(hlt2_tracks['BestLong']['v1']) + goodvelotracks = make_fitted_velotracks(usePrKalman=usePrKalman) + # combine using AlignTrackCloneRemover + from PyConf.Algorithms import AlignTrackCloneRemover + goodfittedtracks = AlignTrackCloneRemover( + name="AlignBestCloneRemover", + InputLocations=[goodlongtracks, goodvelotracks]).OutputLocation + + # now make the PVs with these tracks + pvs = make_pvs(goodfittedtracks) + + return goodfittedtracks, pvs + + +def monitor_SciFi_tracks(track_group, + tracks_name, + includeQuarters=False, + minHits=10): + monitorlist = [] + myFTTrackMonitor = FTTrackMonitor_PrKalman( + name="FTTrackMonitor_" + tracks_name, + TracksInContainer=track_group, + VerboseMode=True) + monitorlist.append(myFTTrackMonitor) + myTrackMonitor = TrackMonitor_PrKalman( + name="TrackMonitor_" + tracks_name, TracksInContainer=track_group) + monitorlist.append(myTrackMonitor) + + if includeQuarters: + Q0Selector = FTTrackSelector( + MinHitsCSide=minHits, MinHitsBottomHalf=minHits) + Q1Selector = FTTrackSelector( + MinHitsASide=minHits, MinHitsBottomHalf=minHits) + Q2Selector = FTTrackSelector( + MinHitsCSide=minHits, MinHitsTopHalf=minHits) + Q3Selector = FTTrackSelector( + MinHitsASide=minHits, MinHitsTopHalf=minHits) + + for selector, quartername in zip( + [Q0Selector, Q1Selector, Q2Selector, Q3Selector], + ["_Q0", "_Q1", "_Q2", "_Q3"]): + selected_tracks = TrackListRefiner( + inputLocation=track_group, Selector=selector).outputLocation + monitorlist = monitorlist + monitor_SciFi_tracks( + selected_tracks, tracks_name + quartername) + + return monitorlist + + +def make_scifi_tracks_and_particles_prkf(): + with reconstruction.bind(from_file=False),\ + PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\ + make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\ + make_muon_hits.bind(geometry_version=3),\ + make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\ + make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\ + make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\ + get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\ + hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT): + + reco = hlt2_reconstruction() + hlt2_tracks = reco['LongTracks'] + best_tracks = hlt2_tracks + pvs = reco["PVs_v1"] + + particlepvs = reco["PVs"] + from PyConf.application import default_raw_banks + from PyConf.application import make_odin + odin = make_odin() + from Humboldt.ParticleSelections import defaultHLTD0Selection + particles = defaultHLTD0Selection(particlepvs) + + from PyConf.Tools import TrackSelector + from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger + from Humboldt.TrackSelections import GoodLongTracks + from Humboldt.VertexSelections import VPPrimaryVertices + + selected_tracks = GoodLongTracks(best_tracks) + track_name = "GoodLongTracks" + alignmentTracks = TrackSelectionMerger( + InputLocations=[selected_tracks]).OutputLocation + selected_pvs = VPPrimaryVertices(pvs) + from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor + from GaudiKernel.SystemOfUnits import MeV + monitorlist = [] + myFTTrackMonitor = FTTrackMonitor_PrKalman( + name="AlignMoni_FTTrackMonitor_PrKalman", + TracksInContainer=alignmentTracks) + myTrackVertexMonitor = TrackVertexMonitor( + name="AlignMoni_FT_TrackVertexMonitor", + TrackContainer=alignmentTracks, + PVContainer=pvs) + monitorlist.append(myFTTrackMonitor) + monitorlist.append(myTrackVertexMonitor) +# monitorlist = [ +# myFTTrackMonitor, +# myTrackVertexMonitor, +# ] + # ParticleMassMonitor + + monitorlist = monitorlist + monitor_SciFi_tracks( + alignmentTracks, track_name, includeQuarters=True) + monitorlist = monitorlist + monitor_SciFi_tracks( + best_tracks, "BestHLT2Tracks", includeQuarters=True) + + ## particle mass monitor needs replacement or upgrade + #myParticleMonitor = ParticleMassMonitor( + # name="defaultD0MassMonitor", + # ParticleType="D0", + # Particles=particles, + # MassMean=1864.84 * MeV, + # MassSigma=90 * MeV, + # Bins=100) + #monitorlist.append(myParticleMonitor) + + #return alignmentTracks, selected_pvs, particles, odin, monitorlist + return alignmentTracks, selected_pvs, odin, monitorlist diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py index 95365f899..cdbb3ce90 100644 --- a/Alignment/Humboldt/python/Humboldt/utils.py +++ b/Alignment/Humboldt/python/Humboldt/utils.py @@ -14,6 +14,7 @@ from PyConf.tonic import configurable from PyConf.Tools import AlignUpdateTool, EigenDiagSolvTool, AlignChisqConstraintTool from PyConf.application import configure from RecoConf.event_filters import require_gec +from RecoConf.event_filters import require_pvs from DDDB.CheckDD4Hep import UseDD4Hep @@ -177,6 +178,7 @@ def runAlignment(options, top_node = CompositeNode( "filterNode", +# filters + [alignment_node] + [require_pvs(alignmentPVs)], filters + [alignment_node], combine_logic=NodeLogic.LAZY_AND, force_order=True) diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py index b754cd2bd..b7a6f51ea 100755 --- a/Alignment/TAlignment/python/TAlignment/Alignables.py +++ b/Alignment/TAlignment/python/TAlignment/Alignables.py @@ -367,6 +367,7 @@ class Alignables(list): elements.append("FT" + station + cframelayername + side + " : " + self._FT + station + cframelayer + halflayer) + print('FTCFrames elements:', elements) self.__append(elements, dofs) def FTCFrameLayers(self, dofs=""): @@ -376,6 +377,7 @@ class Alignables(list): for (side, halflayer) in self._FTHalfLayers.items(): elements.append("FT" + station + layer + side + " : " + self._FT + station + layer + halflayer) + print('FTCFrameLayers elements:', elements) self.__append(elements, dofs) def FTModules(self, dofs=""): @@ -388,6 +390,7 @@ class Alignables(list): elements.append("FT" + station + layer + side + module + ":" + self._FT + station + layer + halflayerquarters + module) + print('long module elements:', elements) self.__append(elements, dofs) def FTHalfModules(self, dofs=""): @@ -397,10 +400,13 @@ class Alignables(list): for k in self._FTRealQuarters: for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: elements.append(self._FT + i + j + k + l) +# print('FTHalfModules elements:', elements) self.__append(elements, dofs) def FTHalfModuleJoints(self, - errors="0.0000074 0.0012 0.0019 0.0004 0.00000044 0.00022"): + errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"): +# errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"): +# errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"): joints = [] for station in self._FTStations: for layer in self._FTLayers: @@ -415,7 +421,7 @@ class Alignables(list): modbot = 'FT' + station + layer + Qbot + module joints.append(" : ".join( [modtop, modbot, errors, "0 -1212.75 0"])) - print(joints) +# print(joints) return joints def FTMats(self, dofs=""): diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index e3f762aff..709ff508a 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -26,6 +26,7 @@ XmlFilesDict = { 'FT': { 'latest': ['Modules_default'], 'MC': ['Modules_default'], + 'data2023': ['CFrames_surveyInput_2023'], 'data20220809': ['Modules_surveyInput_20220809'], 'data20221115': ['Modules_surveyInput_20221115'], #beam angle fix 'data20221115dd4hep': ['Modules_surveyInputdd4hep_20221115'], @@ -119,9 +120,9 @@ class SurveyConstraints(LHCbConfigurableUser): for f in XmlFilesDict['VP'][ver]: self.XmlFiles += [self.defaultSurveyDir() + "VP/" + f + ".xml"] self.XmlUncertainties += [ - ".*Module(00|).. : 0.2 0.2 0.2 0.001 0.001 0.001", - ".*/Ladder. : 0.005 0.005 0.01 0.0002 0.0002 0.0001", - ".*ladder_. : 0.005 0.005 0.01 0.0002 0.0002 0.0001" + "VP/.*/Module(00|).. : 0.2 0.2 0.2 0.001 0.001 0.001", + "VP/.*/Ladder. : 0.005 0.005 0.01 0.0002 0.0002 0.0001", + "VP/.*/ladder_. : 0.005 0.005 0.01 0.0002 0.0002 0.0001" ] if UseDD4Hep: self.Constraints += [ @@ -153,6 +154,29 @@ class SurveyConstraints(LHCbConfigurableUser): self.XmlUncertainties += [ "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" ] + if "2023" in ver: + print('C Frame Survey in use') + #The position of the CFrames is constrained from the survey information, the modules are just constrained to their nominal positions within + #the CFrames. This option should only be used when including the CFrames as alignable objects, otherwise the module uncertainties + #would be underestimated. + self.XmlUncertainties += [ + "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.0008 0.0002 0.0008" + ] +# self.XmlUncertainties += [ +# "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.0000002 0.0000002 0.0002 0.0008" +# ] +# self.XmlUncertainties += [ +# "FT/.*/M. : 0.5 0.5 0.0000005 0.0000002 0.0008 0.0002", +# ] + if UseDD4Hep: + self.Constraints += [ + "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00005 0.0001 0.00004 : 0 +1213 0", +# "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" + ] + else: + self.Constraints += [ + "FT/.*/Module. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" + ] else: # Module/quarter uncertainties estimated for 20220809 survey self.XmlUncertainties += [ @@ -161,13 +185,16 @@ class SurveyConstraints(LHCbConfigurableUser): else: if UseDD4Hep: self.XmlUncertainties += [ - "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" + "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002", + ] + self.Constraints += [ + "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", ] else: + print('test: no data in ver, but no DD4hep') self.XmlUncertainties += [ - "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" + "FT/.*/Module. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002", ] - # SciFi test constraints v0.1 # translation constraints (somewhat) realistic if 'MC' in ver: @@ -191,6 +218,7 @@ class SurveyConstraints(LHCbConfigurableUser): "FT/.*Mat. : 0 0 0 0 0 0 : 0.05 0.05 0.05 0.1 0.1 0.1" ] if addHalfModuleJoints: + print('joints in use') from TAlignment.Alignables import Alignables self.ElementJoints += Alignables().FTHalfModuleJoints() diff --git a/Alignment/TAlignment/surveyxml/FT/CFrames_surveyInput_2023.xml b/Alignment/TAlignment/surveyxml/FT/CFrames_surveyInput_2023.xml new file mode 100644 index 000000000..bb58807a1 --- /dev/null +++ b/Alignment/TAlignment/surveyxml/FT/CFrames_surveyInput_2023.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + (c) Copyright 2000-2023 CERN for the benefit of the LHCb Collaboration + Survey data from measurements performed in February 2023 on the position of th CFrames after the technical stop +--> +<DDDB> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0"> + <paramVector name="dPosXYZ" type="double">-0.093 -0.073 -0.171</paramVector> + <paramVector name="dRotXYZ" type="double">3.8e-05 -4.5e-05 -5e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1325. 0.215 -61.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0"> + <paramVector name="dPosXYZ" type="double">-0.093 -0.073 -0.171</paramVector> + <paramVector name="dRotXYZ" type="double">3.8e-05 -4.5e-05 -5e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1325. 0.215 -61.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0"> + <paramVector name="dPosXYZ" type="double">0.147 0.309 0.009</paramVector> + <paramVector name="dRotXYZ" type="double">0.007125 -7.4e-05 7e-06</paramVector> + <paramVector name="pivotXYZ" type="double">-1325. -0.215 59.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0"> + <paramVector name="dPosXYZ" type="double">0.147 0.309 0.009</paramVector> + <paramVector name="dRotXYZ" type="double">0.007125 -7.4e-05 7e-06</paramVector> + <paramVector name="pivotXYZ" type="double">-1325. -0.215 59.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1"> + <paramVector name="dPosXYZ" type="double">0.091 0.437 -0.019</paramVector> + <paramVector name="dRotXYZ" type="double">0.007197 -8.6e-05 -2.6e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1325. 0.215 -61.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1"> + <paramVector name="dPosXYZ" type="double">0.091 0.437 -0.019</paramVector> + <paramVector name="dRotXYZ" type="double">0.007197 -8.6e-05 -2.6e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1325. 0.215 -61.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1"> + <paramVector name="dPosXYZ" type="double">0.091 0.534 -0.123</paramVector> + <paramVector name="dRotXYZ" type="double">0.007248 4e-06 -3.6e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1325. -0.215 59.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1"> + <paramVector name="dPosXYZ" type="double">0.091 0.534 -0.123</paramVector> + <paramVector name="dRotXYZ" type="double">0.007248 4e-06 -3.6e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1325. -0.215 59.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0"> + <paramVector name="dPosXYZ" type="double">-0.11 0.163 -0.075</paramVector> + <paramVector name="dRotXYZ" type="double">0.007201 1.6e-05 5.9e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1325. 0.215 -61.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0"> + <paramVector name="dPosXYZ" type="double">-0.11 0.163 -0.075</paramVector> + <paramVector name="dRotXYZ" type="double">0.007201 1.6e-05 5.9e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1325. 0.215 -61.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0"> + <paramVector name="dPosXYZ" type="double">-0.2 0.229 0.034</paramVector> + <paramVector name="dRotXYZ" type="double">1.8e-05 -5.9e-05 3.1e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1325. -0.215 59.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0"> + <paramVector name="dPosXYZ" type="double">-0.2 0.229 0.034</paramVector> + <paramVector name="dRotXYZ" type="double">1.8e-05 -5.9e-05 3.1e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1325. -0.215 59.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1"> + <paramVector name="dPosXYZ" type="double">-0.264 0.556 0.056</paramVector> + <paramVector name="dRotXYZ" type="double">3.4e-05 -0.00012 1.2e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1325. 0.215 -61.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1"> + <paramVector name="dPosXYZ" type="double">-0.264 0.556 0.056</paramVector> + <paramVector name="dRotXYZ" type="double">3.4e-05 -0.00012 1.2e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1325. 0.215 -61.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1"> + <paramVector name="dPosXYZ" type="double">0.095 0.557 0.099</paramVector> + <paramVector name="dRotXYZ" type="double">-5.9e-05 -2.6e-05 -0.00012</paramVector> + <paramVector name="pivotXYZ" type="double">1325. -0.215 59.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1"> + <paramVector name="dPosXYZ" type="double">0.095 0.557 0.099</paramVector> + <paramVector name="dRotXYZ" type="double">-5.9e-05 -2.6e-05 -0.00012</paramVector> + <paramVector name="pivotXYZ" type="double">1325. -0.215 59.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0"> + <paramVector name="dPosXYZ" type="double">-0.044 0.515 -0.149</paramVector> + <paramVector name="dRotXYZ" type="double">0.007311 -8.2e-05 4e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1590. 0.251 -70.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0"> + <paramVector name="dPosXYZ" type="double">-0.044 0.515 -0.149</paramVector> + <paramVector name="dRotXYZ" type="double">0.007311 -8.2e-05 4e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1590. 0.251 -70.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0"> + <paramVector name="dPosXYZ" type="double">-0.056 0.153 -0.225</paramVector> + <paramVector name="dRotXYZ" type="double">-1e-05 -4.3e-05 -6.6e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1590. 0.251 -60.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0"> + <paramVector name="dPosXYZ" type="double">-0.056 0.153 -0.225</paramVector> + <paramVector name="dRotXYZ" type="double">-1e-05 -4.3e-05 -6.6e-05</paramVector> + <paramVector name="pivotXYZ" type="double">-1590. 0.251 -60.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1"> + <paramVector name="dPosXYZ" type="double">0.058 -0.354 -0.065</paramVector> + <paramVector name="dRotXYZ" type="double">0.007097 8.4e-05 6.7e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1596. 0.251 -70.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1"> + <paramVector name="dPosXYZ" type="double">0.058 -0.354 -0.065</paramVector> + <paramVector name="dRotXYZ" type="double">0.007097 8.4e-05 6.7e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1596. 0.251 -70.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1"> + <paramVector name="dPosXYZ" type="double">0.124 1.019 -0.143</paramVector> + <paramVector name="dRotXYZ" type="double">0.007188 3e-06 -9.6e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1596. 0.251 -60.</paramVector> + </condition> + <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1"> + <paramVector name="dPosXYZ" type="double">0.124 1.019 -0.143</paramVector> + <paramVector name="dRotXYZ" type="double">0.007188 3e-06 -9.6e-05</paramVector> + <paramVector name="pivotXYZ" type="double">1596. 0.251 -60.</paramVector> + </condition> -- GitLab From e573467a4d8875e9315d6d99bd3061da23b27d4b Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Thu, 14 Dec 2023 23:54:57 +0100 Subject: [PATCH 04/12] files missing..., try to save what i can --- .../options/AlignFT_VP_combined_data_v7.py | 104 ++++ .../options/AlignFTjointModules_data.py | 12 +- .../python/Humboldt/AlignmentScenarios.py | 77 ++- .../Humboldt/AlignmentScenarios.py.save | 0 .../Humboldt/AlignmentScenarios.py.save.1 | 448 ++++++++++++++++ .../Humboldt/AlignmentScenarios.py.save.2 | 494 +++++++++++++++++ .../python/Humboldt/alignment_tracking.py | 30 +- .../python/TAlignment/Alignables.py.save | 497 ++++++++++++++++++ .../python/TAlignment/SurveyConstraints.py | 18 +- 9 files changed, 1650 insertions(+), 30 deletions(-) create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py create mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save create mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 create mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 create mode 100755 Alignment/TAlignment/python/TAlignment/Alignables.py.save diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py new file mode 100644 index 000000000..2d7a508f0 --- /dev/null +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py @@ -0,0 +1,104 @@ +############################################################################### +# (c) Copyright 2022 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. # +############################################################################### +""" +Configuration file to test running on data. +""" + +from Moore import options, run_moore +from RecoConf.reconstruction_objects import reconstruction +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction +from Hlt2Conf.lines import all_lines +import os +import re +from RecoConf.hlt2_tracking import ( + make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, + make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, + get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) +from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT +from RecoConf.hlt1_tracking import ( + make_VeloClusterTrackingSIMD, make_RetinaClusters, + get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, + make_PatPV3DFuture_pvs) + +from RecoConf.hlt1_muonid import make_muon_hits +from RecoConf.calorimeter_reconstruction import make_digits, make_calo +from PyConf.application import configure_input +from PRConfig.FilesFromDirac import get_access_urls +from DDDB.CheckDD4Hep import UseDD4Hep +from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc +from RecoConf.event_filters import require_pvs +from Humboldt.options import usePrKalman + +options.input_type = 'MDF' +options.input_raw_format = 0.5 +options.simulation = False # in DD4Hep is False the correct option +options.data_type = 'Upgrade' + +# set DDDB and CondDB info +options.geometry_version = "trunk" # run3/trunk +CONDDBTag = "master" +options.conditions_version = CONDDBTag + +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +if os.path.exists(online_cond_path): + DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path + +from glob import glob +from Gaudi.Configuration import * +from GaudiConf import IOHelper + +# run 269045 +files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") +options.input_files = files[0:4000] + +options.event_store = 'EvtStoreSvc' +options.histo_file = "GoodLongTracks_histo.root" +#options.ntuple_file = "GoodLongTracks_tuple.root" +options.use_iosvc = True # True for data, False for MC +# multithreading not working while creating tuples +options.n_threads = 35 +options.evt_max = -1 + +options.scheduler_legacy_mode = False + +configure_input(options) + +from Humboldt.utils import runAlignment +from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer + +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v7 +config = configureGlobalAlignment_v7(halfdofs="TxTyTz") + +#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() + +filter_pvs = [] +filter_pvs.append(require_pvs(alignmentPVs)) + +# add survey constraints +from Configurables import SurveyConstraints +from PyConf.Tools import AlignChisqConstraintTool +from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList + +with createAlignAlgorithm.bind( + outputDataFile="humb-vp-ft-halves-modules", + updateInFinalize=False, + onlineMode=False): + runAlignment( + options, + surveyConstraints=config.SurveyConstraints, + lagrangeConstraints=config.LagrangeConstraints, + alignmentTracks=alignmentTracks, + elementsToAlign=config.Elements, + filters=filter_pvs, + alignmentPVs=alignmentPVs, + usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data.py b/Alignment/Humboldt/options/AlignFTjointModules_data.py index 160d6131a..87ea6ba87 100644 --- a/Alignment/Humboldt/options/AlignFTjointModules_data.py +++ b/Alignment/Humboldt/options/AlignFTjointModules_data.py @@ -79,12 +79,12 @@ from Humboldt.utils import runAlignment from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer -alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf( +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf( ) from TAlignment.Alignables import Alignables elements = Alignables() -elements.FTHalfModules("TxTzRxRz") +elements.FTHalfModules("TxRxRz") #elements.FTHalfModules("TxTzRxRz") # add survey constraints from Configurables import SurveyConstraints @@ -93,14 +93,14 @@ from PyConf.Tools import AlignChisqConstraintTool surveyconstraints = SurveyConstraints() surveyconstraints.FT(addHalfModuleJoints=True) -surveyconstraints.Constraints += [ +#surveyconstraints.Constraints += [ # allow for an Rz of ~1mm/1m around the z=0 part of the half module - "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.001 0.001 0.001 : 0 +1213 0"] +# "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.001 0.001 0.001 : 0 +1213 0"] # define Lagrange constraints constraints = [] -constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Tz Rx Rz") +constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") #constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total') #constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx: total') #constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz") @@ -116,7 +116,7 @@ with createAlignUpdateTool.bind( lagrangeConstraints=constraints, alignmentTracks=alignmentTracks, alignmentPVs=alignmentPVs, - particles=particles, +# particles=particles, odin=odin, elementsToAlign=elements, monitorList=monitors, diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py index e20748736..1aad0d8d9 100644 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py @@ -68,11 +68,17 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"): elements = Alignables() # elements.VP("None") - elements.VP("RxRz") +# elements.VP("RxRz") +# elements.VPRight(halfdofs) +# elements.VPLeft(halfdofs) +# elements.FTHalfModules("TxRxRz") +# elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRxRz") +# elements.FTCFrames("Tz") # added Tz, but need Tz survey unc. set to 0! + # elements.FTModules("TxRz") + elements.FTHalfModules("TxRxRz") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() @@ -134,7 +140,7 @@ def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): surveyconstraints = SurveyConstraints() if UseDD4Hep: surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) else: surveyconstraints.VP(ver='latest') setup.SurveyConstraints = surveyconstraints @@ -146,23 +152,28 @@ def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): return setup -def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"): +def configureGlobalAlignment_v2(halfdofs="TxTyTz"): setup = AlignmentScenario('GlobalAlignment') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() #elements.VP("None") +# elements.VP("RxRz") +# elements.VPRight(halfdofs) +# elements.VPLeft(halfdofs) +# elements.FTHalfModules("TxRz") elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRz") - + elements.FTCFrames("Rz") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRz") + elements.FTHalfModules("Rx") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() if UseDD4Hep: surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) else: surveyconstraints.VP(ver='latest') setup.SurveyConstraints = surveyconstraints @@ -175,17 +186,22 @@ def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"): return setup -def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"): +def configureGlobalAlignment_v3(halfdofs="TxTyTz"): setup = AlignmentScenario('GlobalAlignment') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() #elements.VP("None") +# elements.VP("RxRz") +# elements.VPRight(halfdofs) +# elements.VPLeft(halfdofs) +# elements.FTHalfModules("TxRz") elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRz") - + elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRz") + elements.FTHalfModules("Rx") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() @@ -206,7 +222,7 @@ def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"): return setup -def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"): +def configureGlobalAlignment_v4(halfdofs="TxTyTz"): setup = AlignmentScenario('GlobalAlignment') setup.SubDetectors += ['VP', 'FT'] @@ -215,8 +231,8 @@ def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"): elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRz") - + elements.FTHalfModules("TxTzRxRz") + elements.FTModules("TxTzRxRz") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() @@ -229,7 +245,7 @@ def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"): constraints = [] constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") setup.LagrangeConstraints = constraints @@ -277,7 +293,7 @@ def configureGlobalAlignment_v6(halfdofs="TxTyTz"): elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) -# elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! +# elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0! elements.FTModules("TxRxRz") elements.FTHalfModules("TxRxRz") @@ -299,6 +315,37 @@ def configureGlobalAlignment_v6(halfdofs="TxTyTz"): return setup +def configureGlobalAlignment_v7(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRz") + elements.FTHalfModules("Rx") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + surveyconstraints += ["FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0"] + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + def configureRun3Alignment(fixQOverPBias=True): # just a first implementation to test some essential things diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save new file mode 100644 index 000000000..e69de29bb diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 new file mode 100644 index 000000000..e20748736 --- /dev/null +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 @@ -0,0 +1,448 @@ +############################################################################### +# (c) Copyright 2000-2018 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 TAlignment.Alignables import Alignables +from TAlignment.SurveyConstraints import SurveyConstraints +from DDDB.CheckDD4Hep import UseDD4Hep + + +# scenario used for prompt alignment +class AlignmentScenario(): + __slots__ = { + "Name": "" # name of the scenario + , + "Elements": [] # list with alignment elements + , + "LagrangeConstraints": [] # list with lagrange constraints + , + "SurveyConstraints": None # survey constraints + , + "SubDetectors": [] # list of subdetectors written to xml + } + + def __init__(self, aName="AlignmentScenario", **kwargs): + for (a, b) in self.__slots__.items(): + setattr(self, a, b) + self.Name = aName + for (a, b) in kwargs: + setattr(self, a, b) + #self.Elements = Elements + #self.LagrangeConstraints = lagrangeconstraints + #self.SurveyConstraints = surveyconstraints + #self.SubDetectors = subdetectors + +def configureSciFiOnly(): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['FT'] + + elements = Alignables() + + elements.FTCFrames("TxRz") + elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTHalfModules("Rx") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + surveyconstraints.XmlFiles = [] + + surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True) + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("Rx") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("Rz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + #elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") +# constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + #elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + print('the wrong survey was used...') + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + print('survey constraints: ', setup.SurveyConstraints) + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v5(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + +# elements.FTCFrameLayers("TxRz") +# elements.FTCFrames("TxTz") + elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() +# surveyconstraints.XmlFiles = [] + + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v6(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) +# elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRxRz") + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureRun3Alignment(fixQOverPBias=True): + # just a first implementation to test some essential things + + setup = AlignmentScenario("Run3Alignment") + setup.SubDetectors += ['VP', 'UT', 'FT'] + + # define the alignment elements + elements = Alignables() + elements.VP("None") + elements.VPRight("Tx") + elements.VPLeft("Tx") + elements.VPModules("Tx") + if UseDD4Hep: elements.FTHalfLayers("Tx") + elements.FTModules("Tx") + #elements.UTLayers("Tx") + setup.Elements = elements + + # add some survey constraints (just fixing to nominal, right now) + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data20221115dd4hep') + else: + surveyconstraints.VP(ver='latest') + surveyconstraints.FT(ver='MC') + surveyconstraints.UT() + setup.SurveyConstraints = surveyconstraints + + # make sure that the velo stays where it was + constraints = [] + constraints.append("VeloHalfAverage : VP/VP(Left|Right) : Tx") + # fix the global shearing in the velo + constraints.append("VeloModuleShearing : VP/VPLeft/Module.{1,2}" + + ("WithSupport : Tx" if not UseDD4Hep else " : Tx")) + # fix the q/p scale by not moving T in X. note that you do not + # want to do this if you use D0 in the alignment + if fixQOverPBias: + constraints.append("FT3X : FT/T3/LayerX2 : Tx") + # there is still a spectrometer weak mode left, but I cannot find it :-( + setup.LagrangeConstraints = constraints + + return setup + + +# define additional scenarios below +def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"): + ''' + This should be the default alignment for the Automatic alignment procedure + Align 2-halves for all degree of freedom + Constrain the global Velo position + ''' + setup = AlignmentScenario("VPModuleAlignment") + setup.SubDetectors += ['VP'] + + elements = Alignables() + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + setup.Elements += list(elements) + + # Constraints + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + # make sure that the velo stays where it was. Important note: the + # dofs here must match the ones that we actually align for. If you + # specify too many, things will go rather wrong. + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") + + setup.LagrangeConstraints = constraints + + return setup + + +def configureVPModuleAlignment(halfdofs="TxTyTzRxRyRz", moduledofs="TxTyRz"): + ''' + This should be the default alignment for the Automatic alignment procedure + Align 2-halves for all degree of freedom and + Modues only for only the main degrees of freedom Tx Ty Rz + Constrain the global Velo position and two modules in each half + ''' + setup = AlignmentScenario("VPModuleAlignment") + setup.SubDetectors += ['VP'] + + elements = Alignables() + elements.VP("None") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.VPModules(moduledofs) + setup.Elements += list(elements) + + # Constraints + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + else: + surveyconstraints.VP(ver='latest') + #surveyconstraints.Constraints += [ + # "Velo : 0 0 0 -0.0001 0 -0.0001 : 0.2 0.2 0.2 0.0001 0.0001 0.001", + # "Velo/Velo(Right|Left) : 0 0 0 0 0 0 : 10 1 0.4 0.01 0.01 0.001" + #] + setup.SurveyConstraints = surveyconstraints + + # make sure that the velo stays where it was. Important note: the + # dofs here must match the ones that we actually align for. If you + # specify too many, things will go rather wrong. + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") + + if moduledofs and moduledofs != "None": + velomoduleconstraints = "" + for dof in ["Tx", "Ty", "Tz", "Rz", "Rx", "Ry"]: + if dof in moduledofs: + tmpdof = dof.replace("T", "") + velomoduleconstraints += " %s Sz%s Sz2%s" % (dof, tmpdof, + tmpdof) + for side in ['Right', 'Left']: + constraints.append( + "VPInternal%s : .*?%s/Module(..WithSupport|..): %s" % + (side, side, velomoduleconstraints)) + setup.LagrangeConstraints = constraints + + return setup + + +def configureVPSensorAlignment(sensordofs="TxTyRz"): + + setup = AlignmentScenario("VPSensorAlignment") + setup.SubDetectors += ['VP'] + + elements = Alignables() + dofs = "TxTyRz" + elements.VPSensors(dofs) + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + return setup diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 new file mode 100644 index 000000000..d9a63c8ff --- /dev/null +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 @@ -0,0 +1,494 @@ +############################################################################### +# (c) Copyright 2000-2018 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 TAlignment.Alignables import Alignables +from TAlignment.SurveyConstraints import SurveyConstraints +from DDDB.CheckDD4Hep import UseDD4Hep + + +# scenario used for prompt alignment +class AlignmentScenario(): + __slots__ = { + "Name": "" # name of the scenario + , + "Elements": [] # list with alignment elements + , + "LagrangeConstraints": [] # list with lagrange constraints + , + "SurveyConstraints": None # survey constraints + , + "SubDetectors": [] # list of subdetectors written to xml + } + + def __init__(self, aName="AlignmentScenario", **kwargs): + for (a, b) in self.__slots__.items(): + setattr(self, a, b) + self.Name = aName + for (a, b) in kwargs: + setattr(self, a, b) + #self.Elements = Elements + #self.LagrangeConstraints = lagrangeconstraints + #self.SurveyConstraints = surveyconstraints + #self.SubDetectors = subdetectors + +def configureSciFiOnly(): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['FT'] + + elements = Alignables() + + elements.FTCFrames("TxRz") + elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTHalfModules("Rx") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + surveyconstraints.XmlFiles = [] + + surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True) + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") +# elements.VP("RxRz") +# elements.VPRight(halfdofs) +# elements.VPLeft(halfdofs) +# elements.FTHalfModules("TxRxRz") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTCFrames("Tz") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRz") + elements.FTHalfModules("Rx") + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("Rx") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("Rz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v2(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + #elements.VP("None") +# elements.VP("RxRz") +# elements.VPRight(halfdofs) +# elements.VPLeft(halfdofs) +# elements.FTHalfModules("TxRz") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTCFrames("Rz") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRz") + elements.FTHalfModules("Rx") + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") +# constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v3(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + #elements.VP("None") +# elements.VP("RxRz") +# elements.VPRight(halfdofs) +# elements.VPLeft(halfdofs) +# elements.FTHalfModules("TxRz") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRz") + elements.FTHalfModules("Rx") + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + print('the wrong survey was used...') + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + print('survey constraints: ', setup.SurveyConstraints) + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() +# elements.VP("None") + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTHalfModules("TxRz") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") + constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v5(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + +# elements.FTCFrameLayers("TxRz") +# elements.FTCFrames("TxTz") + elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0! + elements.FTHalfModules("Rx") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() +# surveyconstraints.XmlFiles = [] + + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v6(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRz") + elements.FTHalfModules("Rx") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureGlobalAlignment_v7(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment') + setup.SubDetectors += ['VP', 'FT'] + + elements = Alignables() + elements.VP("RxRz") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0! + elements.FTModules("TxRz") + elements.FTHalfModules("Rx") + + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + constraints = [] + surveyconstraints.append("fixReadoutSide : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0") + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") +# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + setup.LagrangeConstraints = constraints + + return setup + +def configureRun3Alignment(fixQOverPBias=True): + # just a first implementation to test some essential things + + setup = AlignmentScenario("Run3Alignment") + setup.SubDetectors += ['VP', 'UT', 'FT'] + + # define the alignment elements + elements = Alignables() + elements.VP("None") + elements.VPRight("Tx") + elements.VPLeft("Tx") + elements.VPModules("Tx") + if UseDD4Hep: elements.FTHalfLayers("Tx") + elements.FTModules("Tx") + #elements.UTLayers("Tx") + setup.Elements = elements + + # add some survey constraints (just fixing to nominal, right now) + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data20221115dd4hep') + else: + surveyconstraints.VP(ver='latest') + surveyconstraints.FT(ver='MC') + surveyconstraints.UT() + setup.SurveyConstraints = surveyconstraints + + # make sure that the velo stays where it was + constraints = [] + constraints.append("VeloHalfAverage : VP/VP(Left|Right) : Tx") + # fix the global shearing in the velo + constraints.append("VeloModuleShearing : VP/VPLeft/Module.{1,2}" + + ("WithSupport : Tx" if not UseDD4Hep else " : Tx")) + # fix the q/p scale by not moving T in X. note that you do not + # want to do this if you use D0 in the alignment + if fixQOverPBias: + constraints.append("FT3X : FT/T3/LayerX2 : Tx") + # there is still a spectrometer weak mode left, but I cannot find it :-( + setup.LagrangeConstraints = constraints + + return setup + + +# define additional scenarios below +def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"): + ''' + This should be the default alignment for the Automatic alignment procedure + Align 2-halves for all degree of freedom + Constrain the global Velo position + ''' + setup = AlignmentScenario("VPModuleAlignment") + setup.SubDetectors += ['VP'] + + elements = Alignables() + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + setup.Elements += list(elements) + + # Constraints + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + # make sure that the velo stays where it was. Important note: the + # dofs here must match the ones that we actually align for. If you + # specify too many, things will go rather wrong. + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") + + setup.LagrangeConstraints = constraints + + return setup + + +def configureVPModuleAlignment(halfdofs="TxTyTzRxRyRz", moduledofs="TxTyRz"): + ''' + This should be the default alignment for the Automatic alignment procedure + Align 2-halves for all degree of freedom and + Modues only for only the main degrees of freedom Tx Ty Rz + Constrain the global Velo position and two modules in each half + ''' + setup = AlignmentScenario("VPModuleAlignment") + setup.SubDetectors += ['VP'] + + elements = Alignables() + elements.VP("None") + elements.VPRight(halfdofs) + elements.VPLeft(halfdofs) + elements.VPModules(moduledofs) + setup.Elements += list(elements) + + # Constraints + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + else: + surveyconstraints.VP(ver='latest') + #surveyconstraints.Constraints += [ + # "Velo : 0 0 0 -0.0001 0 -0.0001 : 0.2 0.2 0.2 0.0001 0.0001 0.001", + # "Velo/Velo(Right|Left) : 0 0 0 0 0 0 : 10 1 0.4 0.01 0.01 0.001" + #] + setup.SurveyConstraints = surveyconstraints + + # make sure that the velo stays where it was. Important note: the + # dofs here must match the ones that we actually align for. If you + # specify too many, things will go rather wrong. + constraints = [] + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") + + if moduledofs and moduledofs != "None": + velomoduleconstraints = "" + for dof in ["Tx", "Ty", "Tz", "Rz", "Rx", "Ry"]: + if dof in moduledofs: + tmpdof = dof.replace("T", "") + velomoduleconstraints += " %s Sz%s Sz2%s" % (dof, tmpdof, + tmpdof) + for side in ['Right', 'Left']: + constraints.append( + "VPInternal%s : .*?%s/Module(..WithSupport|..): %s" % + (side, side, velomoduleconstraints)) + setup.LagrangeConstraints = constraints + + return setup + + +def configureVPSensorAlignment(sensordofs="TxTyRz"): + + setup = AlignmentScenario("VPSensorAlignment") + setup.SubDetectors += ['VP'] + + elements = Alignables() + dofs = "TxTyRz" + elements.VPSensors(dofs) + setup.Elements += list(elements) + + surveyconstraints = SurveyConstraints() + if UseDD4Hep: + surveyconstraints.VP(ver='2023_dd4hep') + else: + surveyconstraints.VP(ver='latest') + setup.SurveyConstraints = surveyconstraints + + return setup diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py index fd05878a6..fcd826883 100644 --- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py +++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py @@ -221,6 +221,10 @@ def monitor_SciFi_tracks(track_group, def make_scifi_tracks_and_particles_prkf(): + #usePrKalman=True, + #MaxOutlierIterations=2, + #MaxChi2Dof=5, + #MinNVeloLayers=4): with reconstruction.bind(from_file=False),\ PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\ make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\ @@ -230,12 +234,33 @@ def make_scifi_tracks_and_particles_prkf(): make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\ get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\ hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT): - +# vp_hits = make_VeloClusterTrackingSIMD_hits() reco = hlt2_reconstruction() hlt2_tracks = reco['LongTracks'] best_tracks = hlt2_tracks pvs = reco["PVs_v1"] + # velo_tracks = all_velo_track_types() + # backward_velo_tracks = velo_tracks["Pr::backward"] + # kf_template = partial( + # PrKalmanFilter_Velo, + # MaxOutlierIterations=MaxOutlierIterations, + # HitsVP=vp_hits, + # FillFitResult=True, + # ClassicSmoothing=True, + # MinNumVPHitsForOutlierRemoval=4, + # ReferenceExtrapolator=TrackLinearExtrapolator(), + # InputUniqueIDGenerator=make_unique_id_generator()) + + # fitted_velo_bwd = kf_template( + # name="PrKalmanFilter_VeloBwd", + # Input=backward_velo_tracks).OutputTracks + +# selected_bwd_tracks = VPBackwardTracks( +# fitted_velo_bwd, +# MaxChi2Cut=MaxChi2Dof, +# MinNVeloLayers=MinNVeloLayers) + particlepvs = reco["PVs"] from PyConf.application import default_raw_banks from PyConf.application import make_odin @@ -250,6 +275,9 @@ def make_scifi_tracks_and_particles_prkf(): selected_tracks = GoodLongTracks(best_tracks) track_name = "GoodLongTracks" + # here: merge the velo backwards tracks and the longtracks +# alignmentTracks = TrackSelectionMerger( +# InputLocations=[selected_bwd_tracks, selected_tracks]).OutputLocation alignmentTracks = TrackSelectionMerger( InputLocations=[selected_tracks]).OutputLocation selected_pvs = VPPrimaryVertices(pvs) diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py.save b/Alignment/TAlignment/python/TAlignment/Alignables.py.save new file mode 100755 index 000000000..b7a6f51ea --- /dev/null +++ b/Alignment/TAlignment/python/TAlignment/Alignables.py.save @@ -0,0 +1,497 @@ +from __future__ import print_function + +############################################################################### +# (c) Copyright 2000-2020 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 DDDB.CheckDD4Hep import UseDD4Hep + + +class Alignables(list): + WORLD = "/dd/Structure/LHCb" if not UseDD4Hep else "/world" + + def __init__(self, elements=None, dofs=""): + self.m_dofs = ["Tx", "Ty", "Tz", "Rx", "Ry", "Rz", "None"] + + self.m_vpBase = self.WORLD + "/BeforeMagnetRegion/VP" + self.m_vp = self.m_vpBase + self.m_vpSideBase = self.m_vpBase + ("/MotionVP(Left|Right)" + if UseDD4Hep else "") + self.m_vpLeft = self.m_vpSideBase + "/VPLeft" + self.m_vpRight = self.m_vpSideBase + "/VPRight" + self.m_vpModules = self.m_vpSideBase + "/VP(Right|Left)/Module.{1,2}" + ( + "WithSupport" if not UseDD4Hep else "") + self.m_vpModulesLeft = self.m_vpSideBase + "/VPLeft/Module.{1,2}" + ( + "WithSupport" if not UseDD4Hep else "") + self.m_vpModulesRight = self.m_vpSideBase + "/VPRight/Module.{1,2}" + ( + "WithSupport" if not UseDD4Hep else "") + self.m_vpSensors = self.m_vpModules + ("/Module.{1,2}/Ladder." if + not UseDD4Hep else "/ladder_.") + + self.m_tt = self.WORLD + "/BeforeMagnetRegion/TT" + self.m_ttStations = ["TTa", "TTb"] + self.m_ttLayers = [ + "TTa/TTaXLayer", + "TTa/TTaULayer", + "TTb/TTbVLayer", + "TTb/TTbXLayer", + ] + + self.m_muon = self.WORLD + "/DownstreamRegion/Muon" + self.m_mustations = ["/M2", "/M3", "/M4", "/M5"] + self.m_muhalfstationsAC = ["/M.ASide", "/M.CSide"] + self.m_muhalfstations = ["/M.{1,2}Side"] + self.m_muchambers = ["/R.{1,2}Side/Cham.{1,3}"] + + if elements and self.__validElements(elements): + self.__append(elements, dofs) + + def __findDOF(self, dof, dofs): + valid = "" + if not dofs.find(dof) == -1: + valid = dof + + return valid + + def __addDoFs(self, elements, dofs): + valid = "" + invalid = dofs + tmp = [] + + for i in range(len(self.m_dofs)): + valid += self.__findDOF(self.m_dofs[i], invalid) + invalid = invalid.replace(self.m_dofs[i], "") + # remove eventual separators + import re + invalid = re.sub("[,:; ]", '', invalid) + + if valid: + if isinstance(elements, list): + for i in range(len(elements)): + tmp.append(elements[i] + ":%s" % valid) + elif isinstance(elements, str): + tmp.append(elements + ":%s" % valid) + + try: ## asserting whether invalid is not empty + assert (not invalid) + except AssertionError: + print("ERROR: Unknown degree of freedom(s) " + '"' + invalid + '"') + print( + " Valid degrees of freedom are Tx, Ty, Tz, Rx, Ry and Rz" + ) + return [] + + return tmp + + def __validElements(self, elements): + try: + assert isinstance(elements, list) or isinstance(elements, str) + except AssertionError: + self.__elementsError(elements) + return None + + ## Paranoia; extend also throws an exception + if isinstance(elements, str): + for i in range(len(elements)): + try: + assert isinstance(elements[i], str) + except AssertionError: + self.__elementsError(elements) + return None + return True + + def __elementsError(self, elements): + print("ERROR: Specify either a string representing a detector element") + print( + " or a list of strings representing a list of detector elements" + ) + print("elements = ", elements) + + def __append(self, elements, dofs): + if dofs: + tmp = self.__addDoFs(elements, dofs) + self.extend(tmp) + else: + if isinstance(elements, list): + self.extend(elements) + elif isinstance(elements, str): + self.append(elements) + assert ValueError() + + ## Some predefined alignables + + ## Global ############################################################################### + def Tracker(self, dofs=""): + elements = [] + elements.append("Tracker : " + self.m_vp) + elements.append("Tracker : " + self._UT) + elements.append("Tracker : " + self._FT) + #elements.append( "Tracker : " + self.m_muon ) + self.__append(elements, dofs) + + ## VP ################################################################################# + def VP(self, dofs=""): + self.__append(self.m_vp, dofs) + + def VPModules(self, dofs=""): + elements = [] + elements.append(self.m_vpModules) + self.__append(elements, dofs) + + def VPModulesLeft(self, dofs=""): + elements = [] + elements.append(self.m_vpModulesLeft) + self.__append(elements, dofs) + + def VPModulesRight(self, dofs=""): + elements = [] + elements.append(self.m_vpModulesRight) + self.__append(elements, dofs) + + def VPSensors(self, dofs=""): + elements = [] + elements.append(self.m_vpSensors) + self.__append(elements, dofs) + + def VPRight(self, dofs=""): + self.__append(self.m_vpRight, dofs) + + def VPLeft(self, dofs=""): + self.__append(self.m_vpLeft, dofs) + + ## TT ################################################################################# + def TT(self, dofs=""): + self.__append(self.m_tt, dofs) + + def TTLayers(self, dofs=""): + self.__append(self.m_tt + "/TT./.{4}Layer", dofs) + + def TTHalfLayers(self, dofs=""): + elements = [] + # we need to do TTa and TTb seperately since they are actually different + ttalayers = ['TTaXLayer', 'TTaULayer'] + for layername in ttalayers: + # A-side + elements.append(layername + "ASide : " + self.m_tt + "/TTa/" + + layername + "/R(3Module.{2}|2Module(3.|2T))") + # C-side + elements.append(layername + "CSide : " + self.m_tt + "/TTa/" + + layername + "/R(1Module.{2}|2Module(1.|2B))") + ttblayers = ['TTbVLayer', 'TTbXLayer'] + for layername in ttblayers: + # A-side + elements.append(layername + "ASide : " + self.m_tt + "/TTb/" + + layername + "/R(3Module.{2}|2Module(3B|4.|5.))") + # C-side + elements.append(layername + "CSide : " + self.m_tt + "/TTb/" + + layername + "/R(1Module.{2}|2Module(1.|2.|3T))") + self.__append(elements, dofs) + + def TTSplitLayers(self, dofs=""): + elements = [] + ttalayers = ['TTaXLayer', 'TTaULayer'] + for layername in ttalayers: + elements.append(layername + "LowZ : " + self.m_tt + "/TTa/" + + layername + + "/R(1Module(1|3|5)|2Module(1|3)|3Module(2|4|6)).") + elements.append(layername + "HighZ : " + self.m_tt + "/TTa/" + + layername + + "/R(1Module(2|4|6)|2Module2|3Module(1|3|5)).") + ttblayers = ['TTbVLayer', 'TTbXLayer'] + for layername in ttblayers: + elements.append( + layername + "LowZ : " + self.m_tt + "/TTb/" + layername + + "/R(1Module(1|3|5)|2Module(1|3|5)|3Module(2|4|6)).") + elements.append(layername + "HighZ : " + self.m_tt + "/TTb/" + + layername + + "/R(1Module(2|4|6)|2Module(2|4)|3Module(1|3|5)).") + self.__append(elements, dofs) + + def TTBoxes(self, dofs=""): + elements = [] + elements.append("TTASide : " + self.m_tt + + "/TTa/TTa.Layer/R(3Module.{2}|2Module(3.|2T))") + elements.append("TTCSide : " + self.m_tt + + "/TTa/TTa.Layer/R(1Module.{2}|2Module(1.|2B))") + elements.append("TTASide : " + self.m_tt + + "/TTb/TTb.Layer/R(3Module.{2}|2Module(3B|4.|5.))") + elements.append("TTCSide : " + self.m_tt + + "/TTb/TTb.Layer/R(1Module.{2}|2Module(1.|2.|3T))") + self.__append(elements, dofs) + + def TTHalfModules(self, dofs=""): + self.__append(self.m_tt + "/TT./.{4}Layer/.{2}Module.{2}", dofs) + + def TTSensors(self, dofs=""): + self.__append( + self.m_tt + "/TT./.{4}Layer/.{2}Module.{2}/Ladder./Sensor.{2}", + dofs) + + def TTLongModules(self, dofs=""): + elements = [] + for layer in ['TTaXLayer', 'TTaULayer']: + # first R1 and R3 + for i in range(1, 7): + elements.append(layer + "R1Module" + str(i) + " : " + + self.m_tt + "/TTa/" + layer + "/R1Module" + + str(i) + ".") + elements.append(layer + "R3Module" + str(i) + " : " + + self.m_tt + "/TTa/" + layer + "/R3Module" + + str(i) + ".") + # now R2 + for i in [1, 3]: + elements.append(layer + "R2Module" + str(i) + " : " + + self.m_tt + "/TTa/" + layer + "/R2Module" + + str(i) + ".") + for layer in ['TTbVLayer', 'TTbXLayer']: + # first R1 and R3 + for i in range(1, 7): + elements.append(layer + "R1Module" + str(i) + " : " + + self.m_tt + "/TTb/" + layer + "/R1Module" + + str(i) + ".") + elements.append(layer + "R3Module" + str(i) + " : " + + self.m_tt + "/TTb/" + layer + "/R3Module" + + str(i) + ".") + # now R2 + for i in [1, 2, 4, 5]: + elements.append(layer + "R2Module" + str(i) + " : " + + self.m_tt + "/TTb/" + layer + "/R2Module" + + str(i) + ".") + self.__append(sorted(elements), dofs) + + def TTShortModules(self, dofs=""): + elements = [] + self.__append(self.m_tt + "/TTa/.{4}Layer/R2Module2.", dofs) + self.__append(self.m_tt + "/TTb/.{4}Layer/R2Module3.", dofs) + self.__append(sorted(elements), dofs) + + def TTModules(self, dofs=""): + self.TTLongModules(dofs) + self.TTShortModules(dofs) + + ## UT ################################################################################# + _UT = WORLD + "/BeforeMagnetRegion/UT" + _UTStations = ["UTa", "UTb"] + _UTLayers = [ + "UTa/UTaXLayer", "UTa/UTaULayer", "UTb/UTbVLayer", "UTb/UTbXLayer" + ] + + def UT(self, dofs=""): + self.__append(self._UT, dofs) + + def UTLayers(self, dofs=""): + self.__append(self._UT + "/UT./.{4}Layer", dofs) + + ## FT ################################################################################# + _FT = WORLD + "/AfterMagnetRegion/T/FT" + _FTStations = ["/T1", "/T2", "/T3"] + _FTLayers = ["/LayerX1", "/LayerU", "/LayerV", "/LayerX2" + ] if not UseDD4Hep else ["/X1", "/U", "/V", "/X2"] + _FTRealQuarters = [ + "/Quarter0", "/Quarter2", "/Quarter1", "/Quarter3" + ] if not UseDD4Hep else ["/HL0/Q0", "/HL0/Q2", "/HL1/Q1", "/HL1/Q3"] + _FTHalfLayerQuarters = { + "/HL0": "/Quarter(0|2)" if not UseDD4Hep else "/HL0/Q(0|2)", + "/HL1": "/Quarter(1|3)" if not UseDD4Hep else "/HL1/Q(1|3)" + } + _FTHalfLayers = { + "/HL0": "/Quarter(0|2)" if not UseDD4Hep else "/HL0", + "/HL1": "/Quarter(1|3)" if not UseDD4Hep else "/HL1" + } + _FTCFrameLayers = { + "/X1U": ("/Layer" if not UseDD4Hep else "/") + "(X1|U)", + "/VX2": ("/Layer" if not UseDD4Hep else "/") + "(V|X2)" + } + + _FTModulesAll = [("/Module%d" if not UseDD4Hep else "/M%d") % i + for i in range(6)] + _FTModulesShort = [("/Module%d" if not UseDD4Hep else "/M%d") % i + for i in range(5)] + _FTMats = ["/Mat%d" % i for i in range(4)] + + def FT(self, dofs=""): + self.__append(self._FT, dofs) + + def FTStations(self, dofs=""): + elements = [] + for i in self._FTStations: + elements.append(self._FT + i) + self.__append(elements, dofs) + + def FTLayers(self, dofs=""): + elements = [] + for station in self._FTStations: + for layer in self._FTLayers: + elements.append(self._FT + station + layer) + self.__append(elements, dofs) + + def FTHalfLayers(self, dofs=""): + elements = [] + for station in self._FTStations: + for layer in self._FTLayers: + for halflayer in self._FTHalfLayers: + elements.append(self._FT + station + layer + halflayer) + self.__append(elements, dofs) + + def FTQuarters(self, dofs=""): + elements = [] + for station in self._FTStations: + for layer in self._FTLayers: + if UseDD4Hep: + for halflayer in self._FTHalfLayers: + if halflayer == "/HL0": + quarters = self._FTQuarters["CSide"] + else: + quarters = self._FTQuarters["ASide"] + for quarter in quarters: + elements.append(self._FT + station + layer + + halflayer + quarter) + else: + for quarter in self._FTRealQuarters: + elements.append(self._FT + station + layer + + halflayer + quarter) + self.__append(elements, dofs) + + def FTCFrames(self, dofs=""): + elements = [] + for station in self._FTStations: + for (cframelayername, cframelayer) in self._FTCFrameLayers.items(): + for (side, halflayer) in self._FTHalfLayers.items(): + elements.append("FT" + station + cframelayername + side + + " : " + self._FT + station + cframelayer + + halflayer) + print('FTCFrames elements:', elements) + self.__append(elements, dofs) + + def FTCFrameLayers(self, dofs=""): + elements = [] + for station in self._FTStations: + for layer in self._FTLayers: + for (side, halflayer) in self._FTHalfLayers.items(): + elements.append("FT" + station + layer + side + " : " + + self._FT + station + layer + halflayer) + print('FTCFrameLayers elements:', elements) + self.__append(elements, dofs) + + def FTModules(self, dofs=""): + elements = [] + for station in self._FTStations: + for layer in self._FTLayers: + for (side, + halflayerquarters) in self._FTHalfLayerQuarters.items(): + for module in self._FTModulesAll if station == "/T3" else self._FTModulesShort: + elements.append("FT" + station + layer + side + + module + ":" + self._FT + station + + layer + halflayerquarters + module) + print('long module elements:', elements) + self.__append(elements, dofs) + + def FTHalfModules(self, dofs=""): + elements = [] + for i in self._FTStations: + for j in self._FTLayers: + for k in self._FTRealQuarters: + for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: + elements.append(self._FT + i + j + k + l) +# print('FTHalfModules elements:', elements) + self.__append(elements, dofs) + + def FTHalfModuleJoints(self, + errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"): +# errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"): +# errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"): + joints = [] + for station in self._FTStations: + for layer in self._FTLayers: + for module in self._FTModulesAll if station == "/T3" else self._FTModulesShort: + combinations = [("/HL0/Q0", "/HL0/Q2"), + ("/HL1/Q1", "/HL1/Q3")] if UseDD4Hep else [ + ("/Quarter0", "/Quarter2"), + ("/Quarter1", "/Quarter3") + ] + for (Qtop, Qbot) in combinations: + modtop = 'FT' + station + layer + Qtop + module + modbot = 'FT' + station + layer + Qbot + module + joints.append(" : ".join( + [modtop, modbot, errors, "0 -1212.75 0"])) +# print(joints) + return joints + + def FTMats(self, dofs=""): + elements = [] + for station in self._FTStations: + for layer in self._FTLayers: + if UseDD4Hep: + for halflayer in self._FTHalfLayers: + if halflayer == "/HL0": + quarters = self._FTQuarters["CSide"] + else: + quarters = self._FTQuarters["ASide"] + for quarter in quarters: + if station == "/T3": + modules = self._FTModulesAll + else: + modules = self._FTModulesShort + for module in modules: + for mat in self._FTMats: + elements.append(self._FT + station + + layer + halflayer + + quarter + module + mat) + else: + for (side, quarter) in self._FTQuarters.items(): + if station == "/T3": + modules = self._FTModulesAll + else: + modules = self._FTModulesShort + for module in modules: + for mat in self._FTMats: + elements.append( + "FT/" + station.strip('/') + side + + layer.strip('/') + module.strip('/') + + mat.strip('/') + " : " + self._FT + + station + layer + quarter + module + mat) + self.__append(elements, dofs) + + ## MUON ############################################################################## + def MuonStations(self, dofs=""): + elements = [] + for i in self.m_mustations: + elements.append(self.m_muon + i) + self.__append(elements, dofs) + + def MuonHalfStations(self, dofs=""): + elements = [] + for i in self.m_mustations: + for j in self.m_muhalfstations: + elements.append(self.m_muon + i + j) + self.__append(elements, dofs) + + def MuonChambers(self, dofs=""): + elements = [] + ## 5 Stations numbered from 1 to 5 + for i in self.m_mustations: + ## There are 2 halves in each station + for j in self.m_muhalfstations: + ## Chambers + for l in self.m_muchambers: + elements.append(self.m_muon + i + j + l) + self.__append(elements, dofs) + + def MuonHalfStationsCside(self, dofs=""): + elements = [] + for i in self.m_mustations: + elements.append(self.m_muon + i + self.m_muhalfstationsAC[1]) + self.__append(elements, dofs) + + def MuonHalfStationsAside(self, dofs=""): + elements = [] + for i in self.m_mustations: + elements.append(self.m_muon + i + self.m_muhalfstationsAC[0]) + self.__append(elements, dofs) diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index 709ff508a..74259ff7b 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -165,13 +165,13 @@ class SurveyConstraints(LHCbConfigurableUser): # self.XmlUncertainties += [ # "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.0000002 0.0000002 0.0002 0.0008" # ] -# self.XmlUncertainties += [ -# "FT/.*/M. : 0.5 0.5 0.0000005 0.0000002 0.0008 0.0002", -# ] + self.XmlUncertainties += [ + "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002", + ] if UseDD4Hep: self.Constraints += [ "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00005 0.0001 0.00004 : 0 +1213 0", -# "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" + "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" ] else: self.Constraints += [ @@ -183,13 +183,15 @@ class SurveyConstraints(LHCbConfigurableUser): "FT/.*/Module. : 0.2 0.2 0.2 0.00008 0.0004 0.00008" ] else: + print('small Rx uncertainty') if UseDD4Hep: self.XmlUncertainties += [ - "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002", - ] - self.Constraints += [ - "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", + "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002", ] + # maybe remove this bottom constraint +# self.Constraints += [ +# "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", +# ] else: print('test: no data in ver, but no DD4hep') self.XmlUncertainties += [ -- GitLab From b25e315710a56864c22471d17cff600a1719e3e1 Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Mon, 15 Jan 2024 12:57:56 +0100 Subject: [PATCH 05/12] my changes overall in alignment on global alignment branch --- .../options/AlignFT_VP_combined_data.py | 3 ++- .../options/AlignFT_VP_combined_data_v2.py | 3 ++- .../options/AlignFT_VP_combined_data_v3.py | 1 + .../python/Humboldt/AlignmentScenarios.py | 23 +++++++++++-------- .../python/TAlignment/SurveyConstraints.py | 9 ++------ 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py index 70688b57c..65295b98a 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py @@ -44,7 +44,8 @@ options.data_type = 'Upgrade' # set DDDB and CondDB info options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" +#CONDDBTag = "master" +CONDDBTag = "nibreer_giulia_mass_conds" options.conditions_version = CONDDBTag online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py index 5e29b2c53..e2a96c189 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py @@ -44,7 +44,8 @@ options.data_type = 'Upgrade' # set DDDB and CondDB info options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" +#CONDDBTag = "master" +CONDDBTag = "nibreer_giulia_mass_conds" options.conditions_version = CONDDBTag online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py index 2897c16d9..bacffc24b 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py @@ -45,6 +45,7 @@ options.data_type = 'Upgrade' # set DDDB and CondDB info options.geometry_version = "trunk" # run3/trunk CONDDBTag = "master" +CONDDBTag = "nibreer_giulia_mass_conds" options.conditions_version = CONDDBTag online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py index 1aad0d8d9..8c692ff0a 100644 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py @@ -152,7 +152,7 @@ def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): return setup -def configureGlobalAlignment_v2(halfdofs="TxTyTz"): +def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"): setup = AlignmentScenario('GlobalAlignment') setup.SubDetectors += ['VP', 'FT'] @@ -162,12 +162,12 @@ def configureGlobalAlignment_v2(halfdofs="TxTyTz"): # elements.VPRight(halfdofs) # elements.VPLeft(halfdofs) # elements.FTHalfModules("TxRz") - elements.VP("RxRz") +# elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) - elements.FTCFrames("Rz") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRz") - elements.FTHalfModules("Rx") + elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! +# elements.FTModules("TxRz") + elements.FTHalfModules("TxRxRz") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() @@ -186,7 +186,7 @@ def configureGlobalAlignment_v2(halfdofs="TxTyTz"): return setup -def configureGlobalAlignment_v3(halfdofs="TxTyTz"): +def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"): setup = AlignmentScenario('GlobalAlignment') setup.SubDetectors += ['VP', 'FT'] @@ -199,9 +199,10 @@ def configureGlobalAlignment_v3(halfdofs="TxTyTz"): elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) + elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRz") - elements.FTHalfModules("Rx") +# elements.FTModules("TxRz") + elements.FTHalfModules("TxRxRz") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() @@ -231,8 +232,10 @@ def configureGlobalAlignment_v4(halfdofs="TxTyTz"): elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) - elements.FTHalfModules("TxTzRxRz") - elements.FTModules("TxTzRxRz") + + elements.FTCFrames("TxRz") + elements.FTHalfModules("TxRz") + elements.FTModules("TxRz") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index 74259ff7b..fc7089db6 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -159,19 +159,14 @@ class SurveyConstraints(LHCbConfigurableUser): #The position of the CFrames is constrained from the survey information, the modules are just constrained to their nominal positions within #the CFrames. This option should only be used when including the CFrames as alignable objects, otherwise the module uncertainties #would be underestimated. - self.XmlUncertainties += [ - "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.0008 0.0002 0.0008" - ] -# self.XmlUncertainties += [ -# "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.0000002 0.0000002 0.0002 0.0008" -# ] self.XmlUncertainties += [ "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002", + "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.0000008 0.0002 0.0008", ] if UseDD4Hep: self.Constraints += [ "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00005 0.0001 0.00004 : 0 +1213 0", - "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" +# "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" ] else: self.Constraints += [ -- GitLab From 05d2760dd2e28a06e34697affffd134a55b62a49 Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Wed, 13 Mar 2024 16:13:24 +0100 Subject: [PATCH 06/12] global alignment setup and option files --- .../options/AlignFT_VP_combined_data.py | 7 +- ...v4.py => AlignFT_VP_combined_data_v1_1.py} | 27 +- ...fi.py => AlignFT_VP_combined_data_v1_2.py} | 14 +- ...v3.py => AlignFT_VP_combined_data_v1_3.py} | 15 +- .../options/AlignFT_VP_combined_data_v5.py | 104 ---- .../options/AlignFT_VP_combined_data_v6.py | 104 ---- .../options/AlignFT_VP_combined_data_v7.py | 104 ---- .../AlignFT_VP_combined_data_veloRx.py | 104 ---- .../AlignFT_VP_combined_data_veloRz.py | 104 ---- ... => AlignFT_VP_combined_data_velo_only.py} | 4 +- .../options/AlignFTjointModules_data.py | 123 ----- .../options/AlignFTjointModules_data_2.py | 117 ----- .../options/AlignFTjointModules_data_3.py | 118 ----- .../python/Humboldt/AlignmentScenarios.py | 250 +-------- .../Humboldt/AlignmentScenarios.py.save | 0 .../Humboldt/AlignmentScenarios.py.save.1 | 448 ---------------- .../Humboldt/AlignmentScenarios.py.save.2 | 494 ------------------ .../python/Humboldt/ParticleSelections.py | 69 ++- .../python/Humboldt/alignment_tracking.py | 168 ++++-- .../python/TAlignment/Alignables.py | 10 + .../python/TAlignment/SurveyConstraints.py | 30 +- 21 files changed, 264 insertions(+), 2150 deletions(-) rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_v4.py => AlignFT_VP_combined_data_v1_1.py} (75%) rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_scifi.py => AlignFT_VP_combined_data_v1_2.py} (88%) rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_v3.py => AlignFT_VP_combined_data_v1_3.py} (88%) delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_v2.py => AlignFT_VP_combined_data_velo_only.py} (97%) delete mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data.py delete mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data_2.py delete mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data_3.py delete mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save delete mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 delete mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py index 65295b98a..cdcea16b4 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py @@ -79,8 +79,8 @@ from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment config = configureGlobalAlignment(halfdofs="TxTyTzRy") -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +#alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) @@ -102,4 +102,7 @@ with createAlignAlgorithm.bind( elementsToAlign=config.Elements, filters=filter_pvs, alignmentPVs=alignmentPVs, + odin=odin, + monitorList=monitors, + particles=particles, usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py similarity index 75% rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py index 76ed38640..b6557b30c 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py @@ -41,13 +41,16 @@ options.input_type = 'MDF' options.input_raw_format = 0.5 options.simulation = False # in DD4Hep is False the correct option options.data_type = 'Upgrade' +from PyConf.application import metainfo_repos, retrieve_encoding_dictionary # set DDDB and CondDB info options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" +#CONDDBTag = "nibreer_giulia_mass_conds" # Giulia's geometry changes, some by hand +#CONDDBTag = "nibreer_globalAlignmentConf" # all 0 starting conditions +CONDDBTag = "nibreer_all0_conds" options.conditions_version = CONDDBTag -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database' if os.path.exists(online_cond_path): DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path @@ -69,17 +72,29 @@ options.evt_max = -1 options.scheduler_legacy_mode = False +# gerhard raven's option for removing the metainfo +#def require_keys_in_cvmfs( keys ) : + # no lock file required, as the the /cvmfs repo is read-only + # (modulo syncs of /cvmfs itself, which are assumed to be atomic) +# awol = list( filter( k : not _retrieve_from_repos( k, ( ( FILE_CONTENT_METADATA, 'master' ) ) , keys ) +# if len(awol) : +# raise ConfigurationError( 'key(s) {} not in /cvmfs -- some more instructions go here'.format(''.join( '{:08x}'.format(k) for k in awol ) ) + +#if options.require_keys_in_cvmfs : +# require_keys_in_cvmfs( key_registry.keys() ) + configure_input(options) from Humboldt.utils import runAlignment from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v4 -config = configureGlobalAlignment_v4(halfdofs="TxTyTzRy") +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_1 +config = configureGlobalAlignment_VELO_Rx_V1_1(halfdofs="TxTyTz") #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf() filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) @@ -100,5 +115,7 @@ with createAlignAlgorithm.bind( alignmentTracks=alignmentTracks, elementsToAlign=config.Elements, filters=filter_pvs, + odin=odin, + monitorList=monitors, alignmentPVs=alignmentPVs, usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py similarity index 88% rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py index 0af04347a..43c401dfa 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py @@ -44,10 +44,11 @@ options.data_type = 'Upgrade' # set DDDB and CondDB info options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" +#CONDDBTag = "nibreer_giulia_mass_conds" +CONDDBTag = "nibreer_all0_conds" options.conditions_version = CONDDBTag -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database' if os.path.exists(online_cond_path): DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path @@ -73,13 +74,14 @@ configure_input(options) from Humboldt.utils import runAlignment from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment, configureSciFiOnly -config = configureSciFiOnly() +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_2 +config = configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz") #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf() filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) @@ -100,5 +102,7 @@ with createAlignAlgorithm.bind( alignmentTracks=alignmentTracks, elementsToAlign=config.Elements, filters=filter_pvs, + odin=odin, + monitorList=monitors, alignmentPVs=alignmentPVs, usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py similarity index 88% rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py index bacffc24b..e7bd93cf6 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py @@ -44,11 +44,11 @@ options.data_type = 'Upgrade' # set DDDB and CondDB info options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" -CONDDBTag = "nibreer_giulia_mass_conds" +#CONDDBTag = "nibreer_giulia_mass_conds" +CONDDBTag = "nibreer_all0_conds" options.conditions_version = CONDDBTag -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' +online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database' if os.path.exists(online_cond_path): DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path @@ -74,13 +74,14 @@ configure_input(options) from Humboldt.utils import runAlignment from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf +from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v3 -config = configureGlobalAlignment_v3(halfdofs="TxTyTzRy") +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_3 +config = configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz") #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf() filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) @@ -101,5 +102,7 @@ with createAlignAlgorithm.bind( alignmentTracks=alignmentTracks, elementsToAlign=config.Elements, filters=filter_pvs, + odin=odin, + monitorList=monitors, alignmentPVs=alignmentPVs, usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py deleted file mode 100644 index f6dc63cf6..000000000 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py +++ /dev/null @@ -1,104 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc -from RecoConf.event_filters import require_pvs -from Humboldt.options import usePrKalman - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" -options.conditions_version = CONDDBTag - -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v5 -config = configureGlobalAlignment_v5(halfdofs="TxTyTz") - -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() - -filter_pvs = [] -filter_pvs.append(require_pvs(alignmentPVs)) - -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList - -with createAlignAlgorithm.bind( - outputDataFile="humb-vp-ft-halves-modules", - updateInFinalize=False, - onlineMode=False): - runAlignment( - options, - surveyConstraints=config.SurveyConstraints, - lagrangeConstraints=config.LagrangeConstraints, - alignmentTracks=alignmentTracks, - elementsToAlign=config.Elements, - filters=filter_pvs, - alignmentPVs=alignmentPVs, - usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py deleted file mode 100644 index be1cc5ec7..000000000 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py +++ /dev/null @@ -1,104 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc -from RecoConf.event_filters import require_pvs -from Humboldt.options import usePrKalman - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" -options.conditions_version = CONDDBTag - -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v6 -config = configureGlobalAlignment_v6(halfdofs="TxTyTz") - -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() - -filter_pvs = [] -filter_pvs.append(require_pvs(alignmentPVs)) - -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList - -with createAlignAlgorithm.bind( - outputDataFile="humb-vp-ft-halves-modules", - updateInFinalize=False, - onlineMode=False): - runAlignment( - options, - surveyConstraints=config.SurveyConstraints, - lagrangeConstraints=config.LagrangeConstraints, - alignmentTracks=alignmentTracks, - elementsToAlign=config.Elements, - filters=filter_pvs, - alignmentPVs=alignmentPVs, - usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py deleted file mode 100644 index 2d7a508f0..000000000 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py +++ /dev/null @@ -1,104 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc -from RecoConf.event_filters import require_pvs -from Humboldt.options import usePrKalman - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" -options.conditions_version = CONDDBTag - -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v7 -config = configureGlobalAlignment_v7(halfdofs="TxTyTz") - -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() - -filter_pvs = [] -filter_pvs.append(require_pvs(alignmentPVs)) - -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList - -with createAlignAlgorithm.bind( - outputDataFile="humb-vp-ft-halves-modules", - updateInFinalize=False, - onlineMode=False): - runAlignment( - options, - surveyConstraints=config.SurveyConstraints, - lagrangeConstraints=config.LagrangeConstraints, - alignmentTracks=alignmentTracks, - elementsToAlign=config.Elements, - filters=filter_pvs, - alignmentPVs=alignmentPVs, - usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py deleted file mode 100644 index 1daa7414b..000000000 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py +++ /dev/null @@ -1,104 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc -from RecoConf.event_filters import require_pvs -from Humboldt.options import usePrKalman - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" -options.conditions_version = CONDDBTag - -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VeloRx -config = configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy") - -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() - -filter_pvs = [] -filter_pvs.append(require_pvs(alignmentPVs)) - -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList - -with createAlignAlgorithm.bind( - outputDataFile="humb-vp-ft-halves-modules", - updateInFinalize=False, - onlineMode=False): - runAlignment( - options, - surveyConstraints=config.SurveyConstraints, - lagrangeConstraints=config.LagrangeConstraints, - alignmentTracks=alignmentTracks, - elementsToAlign=config.Elements, - filters=filter_pvs, - alignmentPVs=alignmentPVs, - usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py deleted file mode 100644 index 69320f809..000000000 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py +++ /dev/null @@ -1,104 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc -from RecoConf.event_filters import require_pvs -from Humboldt.options import usePrKalman - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "master" -options.conditions_version = CONDDBTag - -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VeloRz -config = configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy") - -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() - -filter_pvs = [] -filter_pvs.append(require_pvs(alignmentPVs)) - -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList - -with createAlignAlgorithm.bind( - outputDataFile="humb-vp-ft-halves-modules", - updateInFinalize=False, - onlineMode=False): - runAlignment( - options, - surveyConstraints=config.SurveyConstraints, - lagrangeConstraints=config.LagrangeConstraints, - alignmentTracks=alignmentTracks, - elementsToAlign=config.Elements, - filters=filter_pvs, - alignmentPVs=alignmentPVs, - usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py similarity index 97% rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py index e2a96c189..72067b352 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py @@ -76,8 +76,8 @@ from Humboldt.utils import runAlignment from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v2 -config = configureGlobalAlignment_v2(halfdofs="TxTyTzRy") +from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureVPHalfAlignment +config = configureVPHalfAlignment(halfdofs="TxTyTz") #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data.py b/Alignment/Humboldt/options/AlignFTjointModules_data.py deleted file mode 100644 index 87ea6ba87..000000000 --- a/Alignment/Humboldt/options/AlignFTjointModules_data.py +++ /dev/null @@ -1,123 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -# options.input_type = 'MDF' # look into eos for correct data type -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" -#CONDDBTag = "nibreer_joint_analysis" -CONDDBTag = "master" -options.conditions_version = CONDDBTag - -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/' -#if os.path.exists(cond_path): -# DD4hepSvc().ConditionsLocation = 'file://' + cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 # set to 1 for tuples, 30 for align V3 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf( -) - -from TAlignment.Alignables import Alignables -elements = Alignables() -elements.FTHalfModules("TxRxRz") -#elements.FTHalfModules("TxTzRxRz") -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool - -surveyconstraints = SurveyConstraints() -surveyconstraints.FT(addHalfModuleJoints=True) - -#surveyconstraints.Constraints += [ - # allow for an Rz of ~1mm/1m around the z=0 part of the half module -# "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.001 0.001 0.001 : 0 +1213 0"] - - -# define Lagrange constraints -constraints = [] -constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") -#constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total') -#constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx: total') -#constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz") - -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList -with createAlignUpdateTool.bind( - logFile="alignlog_ft_modules_d0_prkalman.txt" -), createAlignAlgorithm.bind( - xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')): - runAlignment( - options, - surveyConstraints=surveyconstraints, - lagrangeConstraints=constraints, - alignmentTracks=alignmentTracks, - alignmentPVs=alignmentPVs, -# particles=particles, - odin=odin, - elementsToAlign=elements, - monitorList=monitors, - usePrKalman=True) diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data_2.py b/Alignment/Humboldt/options/AlignFTjointModules_data_2.py deleted file mode 100644 index ef93a1cd4..000000000 --- a/Alignment/Humboldt/options/AlignFTjointModules_data_2.py +++ /dev/null @@ -1,117 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc - -options.input_type = 'MDF' - -options.input_raw_format = 0.5 -# options.input_type = 'MDF' # look into eos for correct data type -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" -#CONDDBTag = "nibreer_joint_analysis" -CONDDBTag = "master" -options.conditions_version = CONDDBTag - -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/' -#if os.path.exists(cond_path): -# DD4hepSvc().ConditionsLocation = 'file://' + cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 # set to 1 for tuples, 30 for align V3 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() - -from TAlignment.Alignables import Alignables -elements = Alignables() -elements.FTHalfModules("TxTzRxRz") -#elements.FTHalfModules("TxTzRxRz") -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool - -surveyconstraints = SurveyConstraints() -surveyconstraints.FT(addHalfModuleJoints=True) - -# define Lagrange constraints -constraints = [] -constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") -constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total') -constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx : total') - -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList -with createAlignUpdateTool.bind( - logFile="alignlog_ft_modules_d0_prkalman.txt" -), createAlignAlgorithm.bind( - xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')): - runAlignment( - options, - surveyConstraints=surveyconstraints, - lagrangeConstraints=constraints, - alignmentTracks=alignmentTracks, - alignmentPVs=alignmentPVs, - particles=particles, - odin=odin, - elementsToAlign=elements, - monitorList=monitors, - usePrKalman=True) diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data_3.py b/Alignment/Humboldt/options/AlignFTjointModules_data_3.py deleted file mode 100644 index 0f1c38663..000000000 --- a/Alignment/Humboldt/options/AlignFTjointModules_data_3.py +++ /dev/null @@ -1,118 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -# options.input_type = 'MDF' # look into eos for correct data type -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" -#CONDDBTag = "nibreer_joint_analysis" -CONDDBTag = "master" -options.conditions_version = CONDDBTag - -online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/' -#if os.path.exists(cond_path): -# DD4hepSvc().ConditionsLocation = 'file://' + cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 # set to 1 for tuples, 30 for align V3 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf( -) - -from TAlignment.Alignables import Alignables -elements = Alignables() -elements.FTHalfModules("TxTzRxRz") -#elements.FTHalfModules("TxTzRxRz") -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool - -surveyconstraints = SurveyConstraints() -surveyconstraints.FT(addHalfModuleJoints=True) - -# define Lagrange constraints -constraints = [] -constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Tz Rx Rz") -constraints.append('FixMeanModuleT1 : FT/T1/V/HL.*/M. : Tx') -constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx') -constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz") - -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList -with createAlignUpdateTool.bind( - logFile="alignlog_ft_modules_d0_prkalman.txt" -), createAlignAlgorithm.bind( - xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')): - runAlignment( - options, - surveyConstraints=surveyconstraints, - lagrangeConstraints=constraints, - alignmentTracks=alignmentTracks, - alignmentPVs=alignmentPVs, - particles=particles, - odin=odin, - elementsToAlign=elements, - monitorList=monitors, - usePrKalman=True) diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py index 8c692ff0a..aaf87ed6c 100644 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py @@ -38,46 +38,14 @@ class AlignmentScenario(): #self.SurveyConstraints = surveyconstraints #self.SubDetectors = subdetectors -def configureSciFiOnly(): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['FT'] - - elements = Alignables() - - elements.FTCFrames("TxRz") - elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0! - elements.FTHalfModules("Rx") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - surveyconstraints.XmlFiles = [] - - surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True) - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - def configureGlobalAlignment(halfdofs="TxTyTzRy"): setup = AlignmentScenario('GlobalAlignment') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() -# elements.VP("None") -# elements.VP("RxRz") -# elements.VPRight(halfdofs) -# elements.VPLeft(halfdofs) -# elements.FTHalfModules("TxRxRz") -# elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) -# elements.FTCFrames("Tz") # added Tz, but need Tz survey unc. set to 0! - # elements.FTModules("TxRz") elements.FTHalfModules("TxRxRz") setup.Elements += list(elements) @@ -96,254 +64,57 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"): return setup -def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') +def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment_v2_2') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() -# elements.VP("None") elements.VP("Rx") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("Rz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - #elements.VP("None") -# elements.VP("RxRz") -# elements.VPRight(halfdofs) -# elements.VPLeft(halfdofs) -# elements.FTHalfModules("TxRz") -# elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! -# elements.FTModules("TxRz") - elements.FTHalfModules("TxRxRz") - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") -# constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup -def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - #elements.VP("None") -# elements.VP("RxRz") -# elements.VPRight(halfdofs) -# elements.VPLeft(halfdofs) -# elements.FTHalfModules("TxRz") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - - elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! -# elements.FTModules("TxRz") - elements.FTHalfModules("TxRxRz") - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - print('the wrong survey was used...') - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - print('survey constraints: ', setup.SurveyConstraints) - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v4(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - - elements.FTCFrames("TxRz") - elements.FTHalfModules("TxRz") - elements.FTModules("TxRz") - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v5(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - -# elements.FTCFrameLayers("TxRz") -# elements.FTCFrames("TxTz") - elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0! elements.FTHalfModules("TxRz") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() -# surveyconstraints.XmlFiles = [] - if UseDD4Hep: surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) + surveyconstraints.FT(addHalfModuleJoints=True) else: surveyconstraints.VP(ver='latest') setup.SurveyConstraints = surveyconstraints constraints = [] constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") setup.LagrangeConstraints = constraints return setup -def configureGlobalAlignment_v6(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') +def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"): + setup = AlignmentScenario('GlobalAlignment_v2_3') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() - elements.VP("RxRz") + elements.VP("Rx") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) -# elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRxRz") - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v7(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRz") - elements.FTHalfModules("Rx") + elements.FTHalfModules("TxRxRz") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() if UseDD4Hep: surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - surveyconstraints += ["FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0"] + surveyconstraints.FT(addHalfModuleJoints=True) else: surveyconstraints.VP(ver='latest') setup.SurveyConstraints = surveyconstraints constraints = [] constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") setup.LagrangeConstraints = constraints @@ -394,7 +165,7 @@ def configureRun3Alignment(fixQOverPBias=True): # define additional scenarios below -def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"): +def configureVPHalfAlignment(halfdofs="TxTyTz"): ''' This should be the default alignment for the Automatic alignment procedure Align 2-halves for all degree of freedom @@ -404,6 +175,7 @@ def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"): setup.SubDetectors += ['VP'] elements = Alignables() + elements.VP("RxRz") elements.VPRight(halfdofs) elements.VPLeft(halfdofs) setup.Elements += list(elements) @@ -420,7 +192,7 @@ def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"): # dofs here must match the ones that we actually align for. If you # specify too many, things will go rather wrong. constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") setup.LagrangeConstraints = constraints diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save deleted file mode 100644 index e69de29bb..000000000 diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 deleted file mode 100644 index e20748736..000000000 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 +++ /dev/null @@ -1,448 +0,0 @@ -############################################################################### -# (c) Copyright 2000-2018 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 TAlignment.Alignables import Alignables -from TAlignment.SurveyConstraints import SurveyConstraints -from DDDB.CheckDD4Hep import UseDD4Hep - - -# scenario used for prompt alignment -class AlignmentScenario(): - __slots__ = { - "Name": "" # name of the scenario - , - "Elements": [] # list with alignment elements - , - "LagrangeConstraints": [] # list with lagrange constraints - , - "SurveyConstraints": None # survey constraints - , - "SubDetectors": [] # list of subdetectors written to xml - } - - def __init__(self, aName="AlignmentScenario", **kwargs): - for (a, b) in self.__slots__.items(): - setattr(self, a, b) - self.Name = aName - for (a, b) in kwargs: - setattr(self, a, b) - #self.Elements = Elements - #self.LagrangeConstraints = lagrangeconstraints - #self.SurveyConstraints = surveyconstraints - #self.SubDetectors = subdetectors - -def configureSciFiOnly(): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['FT'] - - elements = Alignables() - - elements.FTCFrames("TxRz") - elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0! - elements.FTHalfModules("Rx") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - surveyconstraints.XmlFiles = [] - - surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True) - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("Rx") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("Rz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - #elements.VP("None") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") -# constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - #elements.VP("None") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - print('the wrong survey was used...') - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - print('survey constraints: ', setup.SurveyConstraints) - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v5(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - -# elements.FTCFrameLayers("TxRz") -# elements.FTCFrames("TxTz") - elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0! - elements.FTHalfModules("TxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() -# surveyconstraints.XmlFiles = [] - - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v6(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) -# elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRxRz") - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureRun3Alignment(fixQOverPBias=True): - # just a first implementation to test some essential things - - setup = AlignmentScenario("Run3Alignment") - setup.SubDetectors += ['VP', 'UT', 'FT'] - - # define the alignment elements - elements = Alignables() - elements.VP("None") - elements.VPRight("Tx") - elements.VPLeft("Tx") - elements.VPModules("Tx") - if UseDD4Hep: elements.FTHalfLayers("Tx") - elements.FTModules("Tx") - #elements.UTLayers("Tx") - setup.Elements = elements - - # add some survey constraints (just fixing to nominal, right now) - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data20221115dd4hep') - else: - surveyconstraints.VP(ver='latest') - surveyconstraints.FT(ver='MC') - surveyconstraints.UT() - setup.SurveyConstraints = surveyconstraints - - # make sure that the velo stays where it was - constraints = [] - constraints.append("VeloHalfAverage : VP/VP(Left|Right) : Tx") - # fix the global shearing in the velo - constraints.append("VeloModuleShearing : VP/VPLeft/Module.{1,2}" + - ("WithSupport : Tx" if not UseDD4Hep else " : Tx")) - # fix the q/p scale by not moving T in X. note that you do not - # want to do this if you use D0 in the alignment - if fixQOverPBias: - constraints.append("FT3X : FT/T3/LayerX2 : Tx") - # there is still a spectrometer weak mode left, but I cannot find it :-( - setup.LagrangeConstraints = constraints - - return setup - - -# define additional scenarios below -def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"): - ''' - This should be the default alignment for the Automatic alignment procedure - Align 2-halves for all degree of freedom - Constrain the global Velo position - ''' - setup = AlignmentScenario("VPModuleAlignment") - setup.SubDetectors += ['VP'] - - elements = Alignables() - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - setup.Elements += list(elements) - - # Constraints - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - # make sure that the velo stays where it was. Important note: the - # dofs here must match the ones that we actually align for. If you - # specify too many, things will go rather wrong. - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") - - setup.LagrangeConstraints = constraints - - return setup - - -def configureVPModuleAlignment(halfdofs="TxTyTzRxRyRz", moduledofs="TxTyRz"): - ''' - This should be the default alignment for the Automatic alignment procedure - Align 2-halves for all degree of freedom and - Modues only for only the main degrees of freedom Tx Ty Rz - Constrain the global Velo position and two modules in each half - ''' - setup = AlignmentScenario("VPModuleAlignment") - setup.SubDetectors += ['VP'] - - elements = Alignables() - elements.VP("None") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.VPModules(moduledofs) - setup.Elements += list(elements) - - # Constraints - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - else: - surveyconstraints.VP(ver='latest') - #surveyconstraints.Constraints += [ - # "Velo : 0 0 0 -0.0001 0 -0.0001 : 0.2 0.2 0.2 0.0001 0.0001 0.001", - # "Velo/Velo(Right|Left) : 0 0 0 0 0 0 : 10 1 0.4 0.01 0.01 0.001" - #] - setup.SurveyConstraints = surveyconstraints - - # make sure that the velo stays where it was. Important note: the - # dofs here must match the ones that we actually align for. If you - # specify too many, things will go rather wrong. - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") - - if moduledofs and moduledofs != "None": - velomoduleconstraints = "" - for dof in ["Tx", "Ty", "Tz", "Rz", "Rx", "Ry"]: - if dof in moduledofs: - tmpdof = dof.replace("T", "") - velomoduleconstraints += " %s Sz%s Sz2%s" % (dof, tmpdof, - tmpdof) - for side in ['Right', 'Left']: - constraints.append( - "VPInternal%s : .*?%s/Module(..WithSupport|..): %s" % - (side, side, velomoduleconstraints)) - setup.LagrangeConstraints = constraints - - return setup - - -def configureVPSensorAlignment(sensordofs="TxTyRz"): - - setup = AlignmentScenario("VPSensorAlignment") - setup.SubDetectors += ['VP'] - - elements = Alignables() - dofs = "TxTyRz" - elements.VPSensors(dofs) - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - return setup diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 deleted file mode 100644 index d9a63c8ff..000000000 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 +++ /dev/null @@ -1,494 +0,0 @@ -############################################################################### -# (c) Copyright 2000-2018 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 TAlignment.Alignables import Alignables -from TAlignment.SurveyConstraints import SurveyConstraints -from DDDB.CheckDD4Hep import UseDD4Hep - - -# scenario used for prompt alignment -class AlignmentScenario(): - __slots__ = { - "Name": "" # name of the scenario - , - "Elements": [] # list with alignment elements - , - "LagrangeConstraints": [] # list with lagrange constraints - , - "SurveyConstraints": None # survey constraints - , - "SubDetectors": [] # list of subdetectors written to xml - } - - def __init__(self, aName="AlignmentScenario", **kwargs): - for (a, b) in self.__slots__.items(): - setattr(self, a, b) - self.Name = aName - for (a, b) in kwargs: - setattr(self, a, b) - #self.Elements = Elements - #self.LagrangeConstraints = lagrangeconstraints - #self.SurveyConstraints = surveyconstraints - #self.SubDetectors = subdetectors - -def configureSciFiOnly(): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['FT'] - - elements = Alignables() - - elements.FTCFrames("TxRz") - elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0! - elements.FTHalfModules("Rx") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - surveyconstraints.XmlFiles = [] - - surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True) - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") -# elements.VP("RxRz") -# elements.VPRight(halfdofs) -# elements.VPLeft(halfdofs) -# elements.FTHalfModules("TxRxRz") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTCFrames("Tz") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRz") - elements.FTHalfModules("Rx") - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("Rx") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("Rz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v2(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - #elements.VP("None") -# elements.VP("RxRz") -# elements.VPRight(halfdofs) -# elements.VPLeft(halfdofs) -# elements.FTHalfModules("TxRz") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTCFrames("Rz") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRz") - elements.FTHalfModules("Rx") - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") -# constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v3(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - #elements.VP("None") -# elements.VP("RxRz") -# elements.VPRight(halfdofs) -# elements.VPLeft(halfdofs) -# elements.FTHalfModules("TxRz") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRz") - elements.FTHalfModules("Rx") - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - print('the wrong survey was used...') - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - print('survey constraints: ', setup.SurveyConstraints) - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() -# elements.VP("None") - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTHalfModules("TxRz") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v5(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - -# elements.FTCFrameLayers("TxRz") -# elements.FTCFrames("TxTz") - elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0! - elements.FTHalfModules("Rx") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() -# surveyconstraints.XmlFiles = [] - - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v6(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRz") - elements.FTHalfModules("Rx") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureGlobalAlignment_v7(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - elements.VP("RxRz") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0! - elements.FTModules("TxRz") - elements.FTHalfModules("Rx") - - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - surveyconstraints.append("fixReadoutSide : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0") - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") -# constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - -def configureRun3Alignment(fixQOverPBias=True): - # just a first implementation to test some essential things - - setup = AlignmentScenario("Run3Alignment") - setup.SubDetectors += ['VP', 'UT', 'FT'] - - # define the alignment elements - elements = Alignables() - elements.VP("None") - elements.VPRight("Tx") - elements.VPLeft("Tx") - elements.VPModules("Tx") - if UseDD4Hep: elements.FTHalfLayers("Tx") - elements.FTModules("Tx") - #elements.UTLayers("Tx") - setup.Elements = elements - - # add some survey constraints (just fixing to nominal, right now) - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data20221115dd4hep') - else: - surveyconstraints.VP(ver='latest') - surveyconstraints.FT(ver='MC') - surveyconstraints.UT() - setup.SurveyConstraints = surveyconstraints - - # make sure that the velo stays where it was - constraints = [] - constraints.append("VeloHalfAverage : VP/VP(Left|Right) : Tx") - # fix the global shearing in the velo - constraints.append("VeloModuleShearing : VP/VPLeft/Module.{1,2}" + - ("WithSupport : Tx" if not UseDD4Hep else " : Tx")) - # fix the q/p scale by not moving T in X. note that you do not - # want to do this if you use D0 in the alignment - if fixQOverPBias: - constraints.append("FT3X : FT/T3/LayerX2 : Tx") - # there is still a spectrometer weak mode left, but I cannot find it :-( - setup.LagrangeConstraints = constraints - - return setup - - -# define additional scenarios below -def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"): - ''' - This should be the default alignment for the Automatic alignment procedure - Align 2-halves for all degree of freedom - Constrain the global Velo position - ''' - setup = AlignmentScenario("VPModuleAlignment") - setup.SubDetectors += ['VP'] - - elements = Alignables() - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - setup.Elements += list(elements) - - # Constraints - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - # make sure that the velo stays where it was. Important note: the - # dofs here must match the ones that we actually align for. If you - # specify too many, things will go rather wrong. - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") - - setup.LagrangeConstraints = constraints - - return setup - - -def configureVPModuleAlignment(halfdofs="TxTyTzRxRyRz", moduledofs="TxTyRz"): - ''' - This should be the default alignment for the Automatic alignment procedure - Align 2-halves for all degree of freedom and - Modues only for only the main degrees of freedom Tx Ty Rz - Constrain the global Velo position and two modules in each half - ''' - setup = AlignmentScenario("VPModuleAlignment") - setup.SubDetectors += ['VP'] - - elements = Alignables() - elements.VP("None") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - elements.VPModules(moduledofs) - setup.Elements += list(elements) - - # Constraints - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - else: - surveyconstraints.VP(ver='latest') - #surveyconstraints.Constraints += [ - # "Velo : 0 0 0 -0.0001 0 -0.0001 : 0.2 0.2 0.2 0.0001 0.0001 0.001", - # "Velo/Velo(Right|Left) : 0 0 0 0 0 0 : 10 1 0.4 0.01 0.01 0.001" - #] - setup.SurveyConstraints = surveyconstraints - - # make sure that the velo stays where it was. Important note: the - # dofs here must match the ones that we actually align for. If you - # specify too many, things will go rather wrong. - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") - - if moduledofs and moduledofs != "None": - velomoduleconstraints = "" - for dof in ["Tx", "Ty", "Tz", "Rz", "Rx", "Ry"]: - if dof in moduledofs: - tmpdof = dof.replace("T", "") - velomoduleconstraints += " %s Sz%s Sz2%s" % (dof, tmpdof, - tmpdof) - for side in ['Right', 'Left']: - constraints.append( - "VPInternal%s : .*?%s/Module(..WithSupport|..): %s" % - (side, side, velomoduleconstraints)) - setup.LagrangeConstraints = constraints - - return setup - - -def configureVPSensorAlignment(sensordofs="TxTyRz"): - - setup = AlignmentScenario("VPSensorAlignment") - setup.SubDetectors += ['VP'] - - elements = Alignables() - dofs = "TxTyRz" - elements.VPSensors(dofs) - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - return setup diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py index b1a333dcf..300a5b545 100644 --- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py +++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py @@ -23,38 +23,49 @@ def defaultHLTD0Selection(vertices_v2): import Functors as F from Hlt2Conf.standard_particles import make_long_pions, make_long_kaons from Hlt2Conf.algorithms_thor import ParticleCombiner, ParticleFilter - from GaudiKernel.SystemOfUnits import MeV, mm + from GaudiKernel.SystemOfUnits import MeV, mm, ps from Functors.math import in_range loosepions = make_long_pions() loosekaons = make_long_kaons() + ptmin = 800 * MeV -# ptmin = 1400 * MeV + pmin = 3000 * MeV minIP = 0.06 * mm pions = ParticleFilter( loosepions, F.FILTER( - F.require_all(F.PT > ptmin, + F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K > 5., F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2)))) kaons = ParticleFilter( loosekaons, F.FILTER( - F.require_all(F.PT > ptmin, + F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K > 5., F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2)))) particles = [pions, kaons] combination_code = F.require_all( in_range(1760 * MeV, F.MASS, 1960 * MeV), - F.SUM(F.PT) > 2000 * MeV, - F.MAXDOCACUT(0.15 * mm), + F.MAX(F.PT) > 1200 * MeV, + F.PT > 2000 * MeV, + F.MAXDOCACUT(0.1 * mm), ) + vertex_code = F.require_all(F.CHI2DOF < 10., + #in_range(1845 * MeV, F.MASS, 1885 * MeV), + in_range(1760 * MeV, F.MASS, 1960 * MeV), + F.END_VZ > -341. * mm, + F.BPVLTIME(vertices_v2) > 0.450 * ps, + F.END_VX < 4 * mm, + F.END_VY < 4 * mm ) + +# vertex_code = F.require_all(F.CHI2DOF < 10., # F.BPVETA(vertices_v2) > 2, # F.BPVETA(vertices_v2) < 5 - ) +# ) combinedD0 = ParticleCombiner( [pions, kaons], @@ -111,6 +122,50 @@ def defaultDetatchedJpsi(vertices_v2): return detatchedJpsi +def defaultHLT1D0Selection(vertices_v2): + #TODO: get particles from HLT SelReports instead of rebuilding + # NOTE: selections match those in HLT1D2KPi + import Functors as F + from Hlt2Conf.standard_particles import make_long_pions, make_long_kaons + from Hlt2Conf.algorithms_thor import ParticleCombiner, ParticleFilter + from GaudiKernel.SystemOfUnits import MeV, mm + from Functors.math import in_range + + loosepions = make_long_pions() + loosekaons = make_long_kaons() + + ptmin = 800 * MeV + minIP = 0.06 * mm + + pions = ParticleFilter( + loosepions, + F.FILTER( + F.require_all(F.PT > ptmin, + F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2)))) + + kaons = ParticleFilter( + loosekaons, + F.FILTER( + F.require_all(F.PT > ptmin, + F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2)))) + + particles = [pions, kaons] + + combination_code = F.require_all( + in_range(1760 * MeV, F.MASS, 1960 * MeV), + F.SUM(F.PT) > 2000 * MeV, + F.MAXDOCACUT(0.15 * mm), + ) + vertex_code = F.require_all(F.CHI2DOF < 10.) + + combinedD0 = ParticleCombiner( + [pions, kaons], + name="AlignHLTD0", + DecayDescriptor="[D0 -> pi+ K-]cc", + CombinationCut=combination_code, + CompositeCut=vertex_code, + ) + return combinedD0 def defaultHLTZ(vertices_v2): #TODO: get particles from HLT SelReports instead of rebuilding diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py index fcd826883..a69c03249 100644 --- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py +++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py @@ -219,53 +219,50 @@ def monitor_SciFi_tracks(track_group, return monitorlist - -def make_scifi_tracks_and_particles_prkf(): - #usePrKalman=True, - #MaxOutlierIterations=2, - #MaxChi2Dof=5, - #MinNVeloLayers=4): +def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, + MaxOutlierIterations=2, + MaxChi2Dof=5, + MinNVeloLayers=4): with reconstruction.bind(from_file=False),\ PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\ make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\ make_muon_hits.bind(geometry_version=3),\ - make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\ make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\ make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\ get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\ + make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\ hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT): -# vp_hits = make_VeloClusterTrackingSIMD_hits() + vp_hits = make_VeloClusterTrackingSIMD_hits() reco = hlt2_reconstruction() hlt2_tracks = reco['LongTracks'] best_tracks = hlt2_tracks pvs = reco["PVs_v1"] - # velo_tracks = all_velo_track_types() - # backward_velo_tracks = velo_tracks["Pr::backward"] - # kf_template = partial( - # PrKalmanFilter_Velo, - # MaxOutlierIterations=MaxOutlierIterations, - # HitsVP=vp_hits, - # FillFitResult=True, - # ClassicSmoothing=True, - # MinNumVPHitsForOutlierRemoval=4, - # ReferenceExtrapolator=TrackLinearExtrapolator(), - # InputUniqueIDGenerator=make_unique_id_generator()) - - # fitted_velo_bwd = kf_template( - # name="PrKalmanFilter_VeloBwd", - # Input=backward_velo_tracks).OutputTracks - -# selected_bwd_tracks = VPBackwardTracks( -# fitted_velo_bwd, -# MaxChi2Cut=MaxChi2Dof, -# MinNVeloLayers=MinNVeloLayers) + velo_tracks = all_velo_track_types() + backward_velo_tracks = velo_tracks["Pr::backward"] + kf_template = partial( + PrKalmanFilter_Velo, + MaxOutlierIterations=MaxOutlierIterations, + HitsVP=vp_hits, + FillFitResult=True, + ClassicSmoothing=True, + MinNumVPHitsForOutlierRemoval=4, + ReferenceExtrapolator=TrackLinearExtrapolator(), + InputUniqueIDGenerator=make_unique_id_generator()) + fitted_velo_bwd = kf_template(name="PrKalmanFilter_VeloBwd", + Input=backward_velo_tracks).OutputTracks + + selected_bwd_tracks = VPBackwardTracks( + fitted_velo_bwd, + MaxChi2Cut=MaxChi2Dof, + MinNVeloLayers=MinNVeloLayers) particlepvs = reco["PVs"] - from PyConf.application import default_raw_banks from PyConf.application import make_odin odin = make_odin() - from Humboldt.ParticleSelections import defaultHLTD0Selection + + from Humboldt.ParticleSelections import defaultHLT1D0Selection, defaultHLTD0Selection +# particles = defaultHLT1D0Selection(particlepvs) particles = defaultHLTD0Selection(particlepvs) from PyConf.Tools import TrackSelector @@ -274,25 +271,84 @@ def make_scifi_tracks_and_particles_prkf(): from Humboldt.VertexSelections import VPPrimaryVertices selected_tracks = GoodLongTracks(best_tracks) - track_name = "GoodLongTracks" - # here: merge the velo backwards tracks and the longtracks -# alignmentTracks = TrackSelectionMerger( -# InputLocations=[selected_bwd_tracks, selected_tracks]).OutputLocation + track_name = "AlignGoodLongTracks" + alignmentTracks = TrackSelectionMerger( - InputLocations=[selected_tracks]).OutputLocation + InputLocations=[selected_bwd_tracks, selected_tracks]).OutputLocation + selected_pvs = VPPrimaryVertices(pvs) + from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor from GaudiKernel.SystemOfUnits import MeV + monitorlist = [] - myFTTrackMonitor = FTTrackMonitor_PrKalman( - name="AlignMoni_FTTrackMonitor_PrKalman", - TracksInContainer=alignmentTracks) + monitorlist = monitorlist + monitor_SciFi_tracks( + alignmentTracks, "AlignGoodLongTracks", includeQuarters=True) + monitorlist = monitorlist + monitor_SciFi_tracks( + best_tracks, "BestHLT2Tracks", includeQuarters=True) myTrackVertexMonitor = TrackVertexMonitor( - name="AlignMoni_FT_TrackVertexMonitor", - TrackContainer=alignmentTracks, - PVContainer=pvs) - monitorlist.append(myFTTrackMonitor) + TrackContainer=alignmentTracks, PVContainer=pvs) monitorlist.append(myTrackVertexMonitor) + # particle mass monitor needs replacement or upgrade + myParticleMonitor = ParticleMassMonitor( + name="defaultD0MassMonitor", + ParticleType="D0", + Particles=particles, + MassMean=1864.84 * MeV, + MassSigma=25 * MeV, + Bins=70, + MinPt=0, + MinP=0) + monitorlist.append(myParticleMonitor) + + # return alignmentTracks, selected_pvs, particles, odin, monitorlist + return alignmentTracks, selected_pvs, odin, monitorlist + +def make_scifi_tracks_and_particles_prkf(): + with reconstruction.bind(from_file=False),\ + PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\ + make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\ + make_muon_hits.bind(geometry_version=3),\ + make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\ + make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\ + hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT): + + reco = hlt2_reconstruction() + hlt2_tracks = reco['LongTracks'] + best_tracks = hlt2_tracks + pvs = reco["PVs_v1"] + + particlepvs = reco["PVs"] + from PyConf.application import make_odin + odin = make_odin() + + from Humboldt.ParticleSelections import defaultHLT1D0Selection, defaultHLTD0Selection + particles = defaultHLTD0Selection(particlepvs) + + from PyConf.Tools import TrackSelector + from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger + from Humboldt.TrackSelections import GoodLongTracks + from Humboldt.VertexSelections import VPPrimaryVertices + + selected_tracks = GoodLongTracks(best_tracks) + track_name = "AlignGoodLongTracks" + alignmentTracks = TrackSelectionMerger( + InputLocations=[selected_tracks]).OutputLocation + selected_pvs = VPPrimaryVertices(pvs) + + from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor + from GaudiKernel.SystemOfUnits import MeV + + monitorlist = [] +# myFTTrackMonitor = FTTrackMonitor_PrKalman( +# name="AlignMoni_FTTrackMonitor_PrKalman", +# TracksInContainer=alignmentTracks) +# myTrackVertexMonitor = TrackVertexMonitor( +# name="AlignMoni_FT_TrackVertexMonitor", +# TrackContainer=alignmentTracks, +# PVContainer=pvs) +# monitorlist.append(myFTTrackMonitor) +# monitorlist.append(myTrackVertexMonitor) # monitorlist = [ # myFTTrackMonitor, # myTrackVertexMonitor, @@ -300,19 +356,23 @@ def make_scifi_tracks_and_particles_prkf(): # ParticleMassMonitor monitorlist = monitorlist + monitor_SciFi_tracks( - alignmentTracks, track_name, includeQuarters=True) + alignmentTracks, "AlignGoodLongTracks", includeQuarters=True) monitorlist = monitorlist + monitor_SciFi_tracks( best_tracks, "BestHLT2Tracks", includeQuarters=True) + myTrackVertexMonitor = TrackVertexMonitor( + TrackContainer=alignmentTracks, PVContainer=pvs) + monitorlist.append(myTrackVertexMonitor) - ## particle mass monitor needs replacement or upgrade - #myParticleMonitor = ParticleMassMonitor( - # name="defaultD0MassMonitor", - # ParticleType="D0", - # Particles=particles, - # MassMean=1864.84 * MeV, - # MassSigma=90 * MeV, - # Bins=100) - #monitorlist.append(myParticleMonitor) - - #return alignmentTracks, selected_pvs, particles, odin, monitorlist + myParticleMonitor = ParticleMassMonitor( + name="defaultD0MassMonitor", + ParticleType="D0", + Particles=particles, + MassMean=1864.84 * MeV, + MassSigma=25 * MeV, + Bins=70, + MinPt=0, + MinP=0) + monitorlist.append(myParticleMonitor) + + # return alignmentTracks, selected_pvs, particles, odin, monitorlist return alignmentTracks, selected_pvs, odin, monitorlist diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py index b7a6f51ea..a489b3895 100755 --- a/Alignment/TAlignment/python/TAlignment/Alignables.py +++ b/Alignment/TAlignment/python/TAlignment/Alignables.py @@ -294,6 +294,7 @@ class Alignables(list): _FTStations = ["/T1", "/T2", "/T3"] _FTLayers = ["/LayerX1", "/LayerU", "/LayerV", "/LayerX2" ] if not UseDD4Hep else ["/X1", "/U", "/V", "/X2"] + _FTOuterLayers = ["/LayerX1", "/LayerX2"] if not UseDD4Hep else ["X1", "X2"] _FTRealQuarters = [ "/Quarter0", "/Quarter2", "/Quarter1", "/Quarter3" ] if not UseDD4Hep else ["/HL0/Q0", "/HL0/Q2", "/HL1/Q1", "/HL1/Q3"] @@ -403,6 +404,15 @@ class Alignables(list): # print('FTHalfModules elements:', elements) self.__append(elements, dofs) + def FTHalfModulesOuterLayers(self, dofs=""): + elements = [] + for i in self._FTStations: + for j in self._FTOuterLayers: + for k in self._FTRealQuarters: + for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: + elements.append(self._FT + i + j + k + l) + self.__append(elements, dofs) + def FTHalfModuleJoints(self, errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"): # errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"): diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index fc7089db6..822fab54d 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -160,13 +160,19 @@ class SurveyConstraints(LHCbConfigurableUser): #the CFrames. This option should only be used when including the CFrames as alignable objects, otherwise the module uncertainties #would be underestimated. self.XmlUncertainties += [ - "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002", - "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.0000008 0.0002 0.0008", + "FT/T./(X1|X2|U|V)/HL. : 0.2 0.2 0.2 0.00008 0.0002 0.00008", + "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.00008 0.0002 0.00008", ] if UseDD4Hep: + self.XmlUncertainties += [ + "FT/.*/M. : 0.1 0.1 0.1 0.00004 0.0001 0.00004" + ] self.Constraints += [ - "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00005 0.0001 0.00004 : 0 +1213 0", -# "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" + # removed : 0 +1213 0", previous: see below + # "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", + # "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" + "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002", + "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002" ] else: self.Constraints += [ @@ -178,19 +184,23 @@ class SurveyConstraints(LHCbConfigurableUser): "FT/.*/Module. : 0.2 0.2 0.2 0.00008 0.0004 0.00008" ] else: - print('small Rx uncertainty') if UseDD4Hep: + print('small Rx uncertainty + dd4hep') +# self.XmlUncertainties += [ +# "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002", +# ] self.XmlUncertainties += [ - "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002", + "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002", ] # maybe remove this bottom constraint -# self.Constraints += [ -# "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", -# ] + self.Constraints += [ + "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", + "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" # added this for 01-26 + ] else: print('test: no data in ver, but no DD4hep') self.XmlUncertainties += [ - "FT/.*/Module. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002", + "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002", ] # SciFi test constraints v0.1 # translation constraints (somewhat) realistic -- GitLab From ee1aa37750ee574cb7fce64550d3fd701c60fa01 Mon Sep 17 00:00:00 2001 From: Gitlab CI <noreply@cern.ch> Date: Thu, 14 Mar 2024 09:00:36 +0000 Subject: [PATCH 07/12] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Alignment/-/jobs/37042927 --- .../options/AlignFT_VP_combined_data.py | 9 ++-- .../options/AlignFT_VP_combined_data_v1_1.py | 15 +++--- .../options/AlignFT_VP_combined_data_v1_2.py | 9 ++-- .../options/AlignFT_VP_combined_data_v1_3.py | 9 ++-- .../AlignFT_VP_combined_data_velo_only.py | 9 ++-- .../python/Humboldt/AlignmentScenarios.py | 10 ++-- .../python/Humboldt/ParticleSelections.py | 27 ++++++----- .../python/Humboldt/alignment_tracking.py | 46 ++++++++++--------- Alignment/Humboldt/python/Humboldt/utils.py | 2 +- .../python/TAlignment/Alignables.py | 9 ++-- .../python/TAlignment/SurveyConstraints.py | 8 ++-- .../src/AlignChisqConstraintTool.cpp | 8 ++-- 12 files changed, 90 insertions(+), 71 deletions(-) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py index cdcea16b4..0256a6d67 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py @@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import ( get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, + make_VeloClusterTrackingSIMD, make_RetinaClusters, get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, make_PatPV3DFuture_pvs) @@ -39,11 +39,11 @@ from Humboldt.options import usePrKalman options.input_type = 'MDF' options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option +options.simulation = False # in DD4Hep is False the correct option options.data_type = 'Upgrade' # set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk +options.geometry_version = "trunk" # run3/trunk #CONDDBTag = "master" CONDDBTag = "nibreer_giulia_mass_conds" options.conditions_version = CONDDBTag @@ -79,7 +79,8 @@ from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment config = configureGlobalAlignment(halfdofs="TxTyTzRy") -alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf( +) #alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() filter_pvs = [] diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py index b6557b30c..375375a5a 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py @@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import ( get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, + make_VeloClusterTrackingSIMD, make_RetinaClusters, get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, make_PatPV3DFuture_pvs) @@ -39,12 +39,12 @@ from Humboldt.options import usePrKalman options.input_type = 'MDF' options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option +options.simulation = False # in DD4Hep is False the correct option options.data_type = 'Upgrade' from PyConf.application import metainfo_repos, retrieve_encoding_dictionary # set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk +options.geometry_version = "trunk" # run3/trunk #CONDDBTag = "nibreer_giulia_mass_conds" # Giulia's geometry changes, some by hand #CONDDBTag = "nibreer_globalAlignmentConf" # all 0 starting conditions CONDDBTag = "nibreer_all0_conds" @@ -74,11 +74,11 @@ options.scheduler_legacy_mode = False # gerhard raven's option for removing the metainfo #def require_keys_in_cvmfs( keys ) : - # no lock file required, as the the /cvmfs repo is read-only - # (modulo syncs of /cvmfs itself, which are assumed to be atomic) +# no lock file required, as the the /cvmfs repo is read-only +# (modulo syncs of /cvmfs itself, which are assumed to be atomic) # awol = list( filter( k : not _retrieve_from_repos( k, ( ( FILE_CONTENT_METADATA, 'master' ) ) , keys ) # if len(awol) : -# raise ConfigurationError( 'key(s) {} not in /cvmfs -- some more instructions go here'.format(''.join( '{:08x}'.format(k) for k in awol ) ) +# raise ConfigurationError( 'key(s) {} not in /cvmfs -- some more instructions go here'.format(''.join( '{:08x}'.format(k) for k in awol ) ) #if options.require_keys_in_cvmfs : # require_keys_in_cvmfs( key_registry.keys() ) @@ -94,7 +94,8 @@ from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPH config = configureGlobalAlignment_VELO_Rx_V1_1(halfdofs="TxTyTz") #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf( +) filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py index 43c401dfa..dc642d247 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py @@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import ( get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, + make_VeloClusterTrackingSIMD, make_RetinaClusters, get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, make_PatPV3DFuture_pvs) @@ -39,11 +39,11 @@ from Humboldt.options import usePrKalman options.input_type = 'MDF' options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option +options.simulation = False # in DD4Hep is False the correct option options.data_type = 'Upgrade' # set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk +options.geometry_version = "trunk" # run3/trunk #CONDDBTag = "nibreer_giulia_mass_conds" CONDDBTag = "nibreer_all0_conds" options.conditions_version = CONDDBTag @@ -81,7 +81,8 @@ from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPH config = configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz") #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf( +) filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py index e7bd93cf6..f18d14317 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py @@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import ( get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, + make_VeloClusterTrackingSIMD, make_RetinaClusters, get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, make_PatPV3DFuture_pvs) @@ -39,11 +39,11 @@ from Humboldt.options import usePrKalman options.input_type = 'MDF' options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option +options.simulation = False # in DD4Hep is False the correct option options.data_type = 'Upgrade' # set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk +options.geometry_version = "trunk" # run3/trunk #CONDDBTag = "nibreer_giulia_mass_conds" CONDDBTag = "nibreer_all0_conds" options.conditions_version = CONDDBTag @@ -81,7 +81,8 @@ from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPH config = configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz") #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf( +) filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py index 72067b352..f22a59253 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py @@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import ( get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, + make_VeloClusterTrackingSIMD, make_RetinaClusters, get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, make_PatPV3DFuture_pvs) @@ -39,11 +39,11 @@ from Humboldt.options import usePrKalman options.input_type = 'MDF' options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option +options.simulation = False # in DD4Hep is False the correct option options.data_type = 'Upgrade' # set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk +options.geometry_version = "trunk" # run3/trunk #CONDDBTag = "master" CONDDBTag = "nibreer_giulia_mass_conds" options.conditions_version = CONDDBTag @@ -80,7 +80,8 @@ from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPH config = configureVPHalfAlignment(halfdofs="TxTyTz") #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf( +) filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py index aaf87ed6c..072e5f295 100644 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py @@ -38,6 +38,7 @@ class AlignmentScenario(): #self.SurveyConstraints = surveyconstraints #self.SubDetectors = subdetectors + def configureGlobalAlignment(halfdofs="TxTyTzRy"): setup = AlignmentScenario('GlobalAlignment') setup.SubDetectors += ['VP', 'FT'] @@ -51,7 +52,7 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"): surveyconstraints = SurveyConstraints() if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.VP(ver='2023_dd4hep') surveyconstraints.FT(addHalfModuleJoints=True) else: surveyconstraints.VP(ver='latest') @@ -64,6 +65,7 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"): return setup + def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"): setup = AlignmentScenario('GlobalAlignment_v2_2') setup.SubDetectors += ['VP', 'FT'] @@ -92,6 +94,7 @@ def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"): return setup + def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"): setup = AlignmentScenario('GlobalAlignment_v2_3') setup.SubDetectors += ['VP', 'FT'] @@ -120,6 +123,7 @@ def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"): return setup + def configureRun3Alignment(fixQOverPBias=True): # just a first implementation to test some essential things @@ -140,8 +144,8 @@ def configureRun3Alignment(fixQOverPBias=True): # add some survey constraints (just fixing to nominal, right now) surveyconstraints = SurveyConstraints() if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(ver='data20221115dd4hep') + surveyconstraints.VP(ver='2023_dd4hep') + surveyconstraints.FT(ver='data20221115dd4hep') else: surveyconstraints.VP(ver='latest') surveyconstraints.FT(ver='MC') diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py index 300a5b545..17eb7995f 100644 --- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py +++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py @@ -54,18 +54,19 @@ def defaultHLTD0Selection(vertices_v2): F.MAXDOCACUT(0.1 * mm), ) - vertex_code = F.require_all(F.CHI2DOF < 10., - #in_range(1845 * MeV, F.MASS, 1885 * MeV), - in_range(1760 * MeV, F.MASS, 1960 * MeV), - F.END_VZ > -341. * mm, - F.BPVLTIME(vertices_v2) > 0.450 * ps, - F.END_VX < 4 * mm, - F.END_VY < 4 * mm ) - -# vertex_code = F.require_all(F.CHI2DOF < 10., -# F.BPVETA(vertices_v2) > 2, -# F.BPVETA(vertices_v2) < 5 -# ) + vertex_code = F.require_all( + F.CHI2DOF < 10., + #in_range(1845 * MeV, F.MASS, 1885 * MeV), + in_range(1760 * MeV, F.MASS, 1960 * MeV), + F.END_VZ > -341. * mm, + F.BPVLTIME(vertices_v2) > 0.450 * ps, + F.END_VX < 4 * mm, + F.END_VY < 4 * mm) + + # vertex_code = F.require_all(F.CHI2DOF < 10., + # F.BPVETA(vertices_v2) > 2, + # F.BPVETA(vertices_v2) < 5 + # ) combinedD0 = ParticleCombiner( [pions, kaons], @@ -122,6 +123,7 @@ def defaultDetatchedJpsi(vertices_v2): return detatchedJpsi + def defaultHLT1D0Selection(vertices_v2): #TODO: get particles from HLT SelReports instead of rebuilding # NOTE: selections match those in HLT1D2KPi @@ -167,6 +169,7 @@ def defaultHLT1D0Selection(vertices_v2): ) return combinedD0 + def defaultHLTZ(vertices_v2): #TODO: get particles from HLT SelReports instead of rebuilding # NOTE: selections match those in HLT... etc diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py index a69c03249..b2fab3477 100644 --- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py +++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py @@ -219,10 +219,11 @@ def monitor_SciFi_tracks(track_group, return monitorlist + def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, - MaxOutlierIterations=2, - MaxChi2Dof=5, - MinNVeloLayers=4): + MaxOutlierIterations=2, + MaxChi2Dof=5, + MinNVeloLayers=4): with reconstruction.bind(from_file=False),\ PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\ make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\ @@ -249,7 +250,8 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, MinNumVPHitsForOutlierRemoval=4, ReferenceExtrapolator=TrackLinearExtrapolator(), InputUniqueIDGenerator=make_unique_id_generator()) - fitted_velo_bwd = kf_template(name="PrKalmanFilter_VeloBwd", + fitted_velo_bwd = kf_template( + name="PrKalmanFilter_VeloBwd", Input=backward_velo_tracks).OutputTracks selected_bwd_tracks = VPBackwardTracks( @@ -262,7 +264,7 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, odin = make_odin() from Humboldt.ParticleSelections import defaultHLT1D0Selection, defaultHLTD0Selection -# particles = defaultHLT1D0Selection(particlepvs) + # particles = defaultHLT1D0Selection(particlepvs) particles = defaultHLTD0Selection(particlepvs) from PyConf.Tools import TrackSelector @@ -274,11 +276,12 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, track_name = "AlignGoodLongTracks" alignmentTracks = TrackSelectionMerger( - InputLocations=[selected_bwd_tracks, selected_tracks]).OutputLocation + InputLocations=[selected_bwd_tracks, selected_tracks + ]).OutputLocation selected_pvs = VPPrimaryVertices(pvs) - from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor + from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor from GaudiKernel.SystemOfUnits import MeV monitorlist = [] @@ -304,6 +307,7 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, # return alignmentTracks, selected_pvs, particles, odin, monitorlist return alignmentTracks, selected_pvs, odin, monitorlist + def make_scifi_tracks_and_particles_prkf(): with reconstruction.bind(from_file=False),\ PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\ @@ -336,23 +340,23 @@ def make_scifi_tracks_and_particles_prkf(): InputLocations=[selected_tracks]).OutputLocation selected_pvs = VPPrimaryVertices(pvs) - from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor + from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor from GaudiKernel.SystemOfUnits import MeV monitorlist = [] -# myFTTrackMonitor = FTTrackMonitor_PrKalman( -# name="AlignMoni_FTTrackMonitor_PrKalman", -# TracksInContainer=alignmentTracks) -# myTrackVertexMonitor = TrackVertexMonitor( -# name="AlignMoni_FT_TrackVertexMonitor", -# TrackContainer=alignmentTracks, -# PVContainer=pvs) -# monitorlist.append(myFTTrackMonitor) -# monitorlist.append(myTrackVertexMonitor) -# monitorlist = [ -# myFTTrackMonitor, -# myTrackVertexMonitor, -# ] + # myFTTrackMonitor = FTTrackMonitor_PrKalman( + # name="AlignMoni_FTTrackMonitor_PrKalman", + # TracksInContainer=alignmentTracks) + # myTrackVertexMonitor = TrackVertexMonitor( + # name="AlignMoni_FT_TrackVertexMonitor", + # TrackContainer=alignmentTracks, + # PVContainer=pvs) + # monitorlist.append(myFTTrackMonitor) + # monitorlist.append(myTrackVertexMonitor) + # monitorlist = [ + # myFTTrackMonitor, + # myTrackVertexMonitor, + # ] # ParticleMassMonitor monitorlist = monitorlist + monitor_SciFi_tracks( diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py index cdbb3ce90..44c4899b5 100644 --- a/Alignment/Humboldt/python/Humboldt/utils.py +++ b/Alignment/Humboldt/python/Humboldt/utils.py @@ -178,7 +178,7 @@ def runAlignment(options, top_node = CompositeNode( "filterNode", -# filters + [alignment_node] + [require_pvs(alignmentPVs)], + # filters + [alignment_node] + [require_pvs(alignmentPVs)], filters + [alignment_node], combine_logic=NodeLogic.LAZY_AND, force_order=True) diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py index a489b3895..0c0f22d34 100755 --- a/Alignment/TAlignment/python/TAlignment/Alignables.py +++ b/Alignment/TAlignment/python/TAlignment/Alignables.py @@ -294,7 +294,8 @@ class Alignables(list): _FTStations = ["/T1", "/T2", "/T3"] _FTLayers = ["/LayerX1", "/LayerU", "/LayerV", "/LayerX2" ] if not UseDD4Hep else ["/X1", "/U", "/V", "/X2"] - _FTOuterLayers = ["/LayerX1", "/LayerX2"] if not UseDD4Hep else ["X1", "X2"] + _FTOuterLayers = ["/LayerX1", "/LayerX2" + ] if not UseDD4Hep else ["X1", "X2"] _FTRealQuarters = [ "/Quarter0", "/Quarter2", "/Quarter1", "/Quarter3" ] if not UseDD4Hep else ["/HL0/Q0", "/HL0/Q2", "/HL1/Q1", "/HL1/Q3"] @@ -415,8 +416,8 @@ class Alignables(list): def FTHalfModuleJoints(self, errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"): -# errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"): -# errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"): + # errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"): + # errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"): joints = [] for station in self._FTStations: for layer in self._FTLayers: @@ -431,6 +432,8 @@ class Alignables(list): modbot = 'FT' + station + layer + Qbot + module joints.append(" : ".join( [modtop, modbot, errors, "0 -1212.75 0"])) + + # print(joints) return joints diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index 822fab54d..f508057e3 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -186,16 +186,16 @@ class SurveyConstraints(LHCbConfigurableUser): else: if UseDD4Hep: print('small Rx uncertainty + dd4hep') -# self.XmlUncertainties += [ -# "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002", -# ] + # self.XmlUncertainties += [ + # "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002", + # ] self.XmlUncertainties += [ "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002", ] # maybe remove this bottom constraint self.Constraints += [ "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", - "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" # added this for 01-26 + "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" # added this for 01-26 ] else: print('test: no data in ver, but no DD4hep') diff --git a/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp b/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp index 1ac91a024..73ed08d23 100644 --- a/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp +++ b/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp @@ -575,7 +575,7 @@ namespace LHCb::Alignment { std::ostream& logmessage ) const { size_t totalnumconstraints( 0 ); double totalchisq( 0 ); - double totalchi2_by_parameter[6] = {0,0,0,0,0,0}; + double totalchi2_by_parameter[6] = {0, 0, 0, 0, 0, 0}; for ( const auto& configuredjoint : m_joints ) { // first decode (this could go elsewhere) @@ -648,9 +648,9 @@ namespace LHCb::Alignment { debug() << "Joint residual: " << residual << endmsg; AlParameters::TransformCovariance W; - for(int i = 0; i < 6; ++i) { - W(i,i) = 1 / ( errors[i] * errors[i] ); - totalchi2_by_parameter[i] += residual(i) * residual(i) * W(i,i); + for ( int i = 0; i < 6; ++i ) { + W( i, i ) = 1 / ( errors[i] * errors[i] ); + totalchi2_by_parameter[i] += residual( i ) * residual( i ) * W( i, i ); } for ( int i = 0; i < 6; ++i ) W( i, i ) = 1 / ( errors[i] * errors[i] ); -- GitLab From 12697afab5510a494e66adb21c51a2dfe33b6d99 Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Thu, 4 Apr 2024 11:53:34 +0200 Subject: [PATCH 08/12] adapted optionsfiles, removed savefiles, updated SurveyConstraints and AlignmentScenarios --- .../options/AlignFT_VP_combined_data_v1_1.py | 122 ----- .../options/AlignFT_VP_combined_data_v1_2.py | 1 - .../python/Humboldt/AlignmentScenarios.py | 8 +- .../python/Humboldt/ParticleSelections.py | 26 +- .../Humboldt/alignment_tracking.py.save | 290 ---------- Alignment/Humboldt/python/Humboldt/utils.py | 4 +- .../python/TAlignment/Alignables.py.save | 497 ------------------ .../python/TAlignment/SurveyConstraints.py | 14 +- 8 files changed, 30 insertions(+), 932 deletions(-) delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py delete mode 100644 Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save delete mode 100755 Alignment/TAlignment/python/TAlignment/Alignables.py.save diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py deleted file mode 100644 index 375375a5a..000000000 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py +++ /dev/null @@ -1,122 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc -from RecoConf.event_filters import require_pvs -from Humboldt.options import usePrKalman - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' -from PyConf.application import metainfo_repos, retrieve_encoding_dictionary - -# set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk -#CONDDBTag = "nibreer_giulia_mass_conds" # Giulia's geometry changes, some by hand -#CONDDBTag = "nibreer_globalAlignmentConf" # all 0 starting conditions -CONDDBTag = "nibreer_all0_conds" -options.conditions_version = CONDDBTag - -online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -# gerhard raven's option for removing the metainfo -#def require_keys_in_cvmfs( keys ) : -# no lock file required, as the the /cvmfs repo is read-only -# (modulo syncs of /cvmfs itself, which are assumed to be atomic) -# awol = list( filter( k : not _retrieve_from_repos( k, ( ( FILE_CONTENT_METADATA, 'master' ) ) , keys ) -# if len(awol) : -# raise ConfigurationError( 'key(s) {} not in /cvmfs -- some more instructions go here'.format(''.join( '{:08x}'.format(k) for k in awol ) ) - -#if options.require_keys_in_cvmfs : -# require_keys_in_cvmfs( key_registry.keys() ) - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_1 -config = configureGlobalAlignment_VELO_Rx_V1_1(halfdofs="TxTyTz") - -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf( -) - -filter_pvs = [] -filter_pvs.append(require_pvs(alignmentPVs)) - -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList - -with createAlignAlgorithm.bind( - outputDataFile="humb-vp-ft-halves-modules", - updateInFinalize=False, - onlineMode=False): - runAlignment( - options, - surveyConstraints=config.SurveyConstraints, - lagrangeConstraints=config.LagrangeConstraints, - alignmentTracks=alignmentTracks, - elementsToAlign=config.Elements, - filters=filter_pvs, - odin=odin, - monitorList=monitors, - alignmentPVs=alignmentPVs, - usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py index dc642d247..8e2ac2475 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py @@ -44,7 +44,6 @@ options.data_type = 'Upgrade' # set DDDB and CondDB info options.geometry_version = "trunk" # run3/trunk -#CONDDBTag = "nibreer_giulia_mass_conds" CONDDBTag = "nibreer_all0_conds" options.conditions_version = CONDDBTag diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py index 25314c32c..330c7ffba 100644 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py @@ -67,7 +67,7 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"): def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment_v2_2') + setup = AlignmentScenario('GlobalAlignment_v1_2') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() @@ -89,14 +89,14 @@ def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"): constraints = [] constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz : total") setup.LagrangeConstraints = constraints return setup def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment_v2_3') + setup = AlignmentScenario('GlobalAlignment_v1_3') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() @@ -118,7 +118,7 @@ def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"): constraints = [] constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") + constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz : total") setup.LagrangeConstraints = constraints return setup diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py index 9f915f589..577ae6ed9 100644 --- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py +++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py @@ -29,14 +29,14 @@ def defaultHLT1D0Selection(vertices_v2, loosepions = make_has_rich_long_pions() loosekaons = make_has_rich_long_kaons() - ptmin = 1000 * MeV - minIP = 0.07 * mm + ptmin = 800 * MeV + minIP = 0.06 * mm pmin = 3000 * MeV pions = ParticleFilter( loosepions, F.FILTER( - F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K < 0., + F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K < 5., F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2)))) kaons = ParticleFilter( @@ -49,20 +49,22 @@ def defaultHLT1D0Selection(vertices_v2, combination_code = F.require_all( in_range(1760 * MeV, F.MASS, 1960 * MeV), - F.SUM(F.PT) > 2000 * MeV, + F.MAX(F>PT) > 1200 * MeV, + F.PT > 2000 * MeV, F.MAXDOCACUT(0.1 * mm), ) - vertex_code = F.require_all(F.CHI2DOF < 10., - F.BPVETA(vertices_v2) > 2, - F.BPVETA(vertices_v2) < 5, - in_range(mass_min, F.MASS, mass_max), - F.END_VZ > -341. * mm, - F.BPVLTIME(vertices_v2) > 0.450 * ps, - F.BPVDIRA(vertices_v2) > 0.999) + + vertex_code = F.require_all( + F.CHI2DOF < 10., + in_range(1760 * MeV, F.MASS, 1960 * MeV), + F.END_VZ > -341. * mm, + F.BPVLTIME(vertices_v2) > 0.450 * ps, + F.END_VX < 4 * mm, + F.END_VY < 4 * mm) combinedD0 = ParticleCombiner( [pions, kaons], - name="AlignHLTD0_{hash}", + name="AlignHLTD0", DecayDescriptor="[D0 -> pi+ K-]cc", CombinationCut=combination_code, CompositeCut=vertex_code, diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save deleted file mode 100644 index fd05878a6..000000000 --- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save +++ /dev/null @@ -1,290 +0,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 functools import partial -from RecoConf.hlt1_tracking import ( - all_velo_track_types, - make_VeloClusterTrackingSIMD_hits, - make_VeloClusterTrackingSIMD, - make_RetinaClusters, - get_global_measurement_provider, - make_velo_full_clusters, - make_reco_pvs, - make_PatPV3DFuture_pvs, -) -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT - -from PyConf.Algorithms import ( - PrKalmanFilter_Velo, - TrackSelectionMerger, - TrackListRefiner, - VeloClusterTrackingSIMDFull, - PatPVLeftRightFinderMerger, - VeloRetinaClusterTrackingSIMDFull, - PrKalmanFilter_noUT, - PrStoreUTHitEmptyProducer, - VPRetinaFullClusterDecoder, - VeloRetinaClusterTrackingSIMD, - TrackMonitor_PrKalman, - TrackFitMatchMonitor_PrKalman, - FTTrackMonitor_PrKalman, - TrackVertexMonitor, - TrackParticleMonitor, - ParticleMassMonitor, -) -from PyConf.Algorithms import Deprecated__TrackListRefiner as TrackListRefiner - -from PyConf.Tools import TrackLinearExtrapolator -from RecoConf.core_algorithms import make_unique_id_generator -from Humboldt.TrackSelections import VPBackwardTracks, VPGoodTracks, GoodLongTracks -from Humboldt.VertexSelections import VPPrimaryVertices -from Humboldt.ParticleSelections import defaultHLTD0Selection - -from GaudiKernel.SystemOfUnits import MeV -from PyConf.Tools import TrackSelector, FTTrackSelector - - -def make_pvs(inputtracks): - return PatPVLeftRightFinderMerger(InputTracks=inputtracks).OutputVertices - - -def make_empty_ut_hit_for_meas_provider(): - """Creates an empty container of UT hits, used for the no UT scenario. - Necessary to run with DD4hep while Ut is not there yet. Could be moved to Moore - - Returns: - DataHandle: PrStoreUTHitEmptyProducer' Output. - - """ - return PrStoreUTHitEmptyProducer().Output - - -def make_fitted_velotracks(usePrKalman=True, - MaxOutlierIterations=2, - MaxChi2Dof=5, - MinNVeloLayers=4): - with make_VeloClusterTrackingSIMD.bind( - algorithm=VeloRetinaClusterTrackingSIMDFull): - vp_hits = make_VeloClusterTrackingSIMD_hits() - velo_tracks = all_velo_track_types() - backward_velo_tracks = velo_tracks["Pr::backward"] - forward_velo_tracks = velo_tracks["Pr"] - - if usePrKalman: - kf_template = partial( - PrKalmanFilter_Velo, - MaxOutlierIterations=MaxOutlierIterations, - HitsVP=vp_hits, - FillFitResult=True, - ClassicSmoothing=True, - MinNumVPHitsForOutlierRemoval=4, - ReferenceExtrapolator=TrackLinearExtrapolator(), - InputUniqueIDGenerator=make_unique_id_generator()) - - fitted_velo_bwd = kf_template( - name="PrKalmanFilter_VeloBwd", - Input=backward_velo_tracks).OutputTracks - fitted_velo_fwd = kf_template( - name="PrKalmanFilter_VeloFwd", - Input=forward_velo_tracks).OutputTracks - - selected_bwd_tracks = VPBackwardTracks( - fitted_velo_bwd, - MaxChi2Cut=MaxChi2Dof, - MinNVeloLayers=MinNVeloLayers) - selected_fwd_tracks = VPGoodTracks( - fitted_velo_fwd, - MaxChi2Dof=MaxChi2Dof, - MinNVeloLayers=MinNVeloLayers) - velotracks = TrackSelectionMerger( - InputLocations=[selected_bwd_tracks, selected_fwd_tracks - ]).OutputLocation - else: - from PyConf.Algorithms import TrackEventFitter - from PyConf.Tools import ( - TrackMasterFitter, - TrackSimpleExtraSelector, - TrackMasterExtrapolator, - ) - measprovider = get_global_measurement_provider( - ignoreUT=True, - ignoreFT=True, - ignoreMuon=True, - velo_hits=make_RetinaClusters, - ut_hits=make_empty_ut_hit_for_meas_provider) - #materiallocator = SimplifiedMaterialLocator() this will not work with dd4hep - extrapolatorselector = TrackSimpleExtraSelector( - ExtrapolatorName="TrackLinearExtrapolator") - masterextrapolator = TrackMasterExtrapolator( - ExtraSelector=extrapolatorselector, - ApplyEnergyLossCorr=False, - ApplyElectronEnergyLossCorr=False) - trackfitter = TrackMasterFitter( - MeasProvider=measprovider, - Extrapolator=masterextrapolator, - MaxUpdateTransports=1, - MinNumVPHitsForOutlierRemoval=4, - MaxNumberOutliers=MaxOutlierIterations, - MakeMeasurements=True, - MakeNodes=True, # need to force a refit - FastMaterialApproximation=True) - veloonlyfitter = TrackEventFitter( - TracksInContainer=velo_tracks["v1"], Fitter=trackfitter) - velotracks = VPGoodTracks( - veloonlyfitter.TracksOutContainer, - MaxChi2Dof=MaxChi2Dof, - MinNVeloLayers=MinNVeloLayers) - - return velotracks - - -def make_align_vp_input(usePrKalman=True, - MaxOutlierIterations=2, - MaxChi2Dof=5, - MinNVeloLayers=4): - - align_tracks = make_fitted_velotracks( - usePrKalman=usePrKalman, - MaxOutlierIterations=MaxOutlierIterations, - MaxChi2Dof=MaxChi2Dof, - MinNVeloLayers=MinNVeloLayers) - align_pvs = make_pvs(align_tracks) - return align_tracks, align_pvs - - -def make_align_input_besttracks(usePrKalman=True): - # it seems that we have little choice but just to set up the entire reco sequence ourselves. the moore stuff is close to impossible to work with. - # note that the PVs reconstructed by TrackBeamLineVertexFinderSoA do not store the list of associated tracks. Use PatPV3DFuture instead - from RecoConf.hlt2_tracking import make_hlt2_tracks_without_UT - with make_VeloClusterTrackingSIMD.bind(algorithm=VeloClusterTrackingSIMDFull),\ - PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True): - hlt2_tracks = make_hlt2_tracks_without_UT(use_pr_kf=usePrKalman) - - # this is a bit funny, but we need fitted velo tracks. so we filter from the best track container what we need, then add our own fitted velo tracks - from Humboldt.TrackSelections import GoodLongTracks - goodlongtracks = GoodLongTracks(hlt2_tracks['BestLong']['v1']) - goodvelotracks = make_fitted_velotracks(usePrKalman=usePrKalman) - # combine using AlignTrackCloneRemover - from PyConf.Algorithms import AlignTrackCloneRemover - goodfittedtracks = AlignTrackCloneRemover( - name="AlignBestCloneRemover", - InputLocations=[goodlongtracks, goodvelotracks]).OutputLocation - - # now make the PVs with these tracks - pvs = make_pvs(goodfittedtracks) - - return goodfittedtracks, pvs - - -def monitor_SciFi_tracks(track_group, - tracks_name, - includeQuarters=False, - minHits=10): - monitorlist = [] - myFTTrackMonitor = FTTrackMonitor_PrKalman( - name="FTTrackMonitor_" + tracks_name, - TracksInContainer=track_group, - VerboseMode=True) - monitorlist.append(myFTTrackMonitor) - myTrackMonitor = TrackMonitor_PrKalman( - name="TrackMonitor_" + tracks_name, TracksInContainer=track_group) - monitorlist.append(myTrackMonitor) - - if includeQuarters: - Q0Selector = FTTrackSelector( - MinHitsCSide=minHits, MinHitsBottomHalf=minHits) - Q1Selector = FTTrackSelector( - MinHitsASide=minHits, MinHitsBottomHalf=minHits) - Q2Selector = FTTrackSelector( - MinHitsCSide=minHits, MinHitsTopHalf=minHits) - Q3Selector = FTTrackSelector( - MinHitsASide=minHits, MinHitsTopHalf=minHits) - - for selector, quartername in zip( - [Q0Selector, Q1Selector, Q2Selector, Q3Selector], - ["_Q0", "_Q1", "_Q2", "_Q3"]): - selected_tracks = TrackListRefiner( - inputLocation=track_group, Selector=selector).outputLocation - monitorlist = monitorlist + monitor_SciFi_tracks( - selected_tracks, tracks_name + quartername) - - return monitorlist - - -def make_scifi_tracks_and_particles_prkf(): - with reconstruction.bind(from_file=False),\ - PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\ - make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\ - make_muon_hits.bind(geometry_version=3),\ - make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\ - make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\ - make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\ - get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\ - hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT): - - reco = hlt2_reconstruction() - hlt2_tracks = reco['LongTracks'] - best_tracks = hlt2_tracks - pvs = reco["PVs_v1"] - - particlepvs = reco["PVs"] - from PyConf.application import default_raw_banks - from PyConf.application import make_odin - odin = make_odin() - from Humboldt.ParticleSelections import defaultHLTD0Selection - particles = defaultHLTD0Selection(particlepvs) - - from PyConf.Tools import TrackSelector - from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger - from Humboldt.TrackSelections import GoodLongTracks - from Humboldt.VertexSelections import VPPrimaryVertices - - selected_tracks = GoodLongTracks(best_tracks) - track_name = "GoodLongTracks" - alignmentTracks = TrackSelectionMerger( - InputLocations=[selected_tracks]).OutputLocation - selected_pvs = VPPrimaryVertices(pvs) - from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor - from GaudiKernel.SystemOfUnits import MeV - monitorlist = [] - myFTTrackMonitor = FTTrackMonitor_PrKalman( - name="AlignMoni_FTTrackMonitor_PrKalman", - TracksInContainer=alignmentTracks) - myTrackVertexMonitor = TrackVertexMonitor( - name="AlignMoni_FT_TrackVertexMonitor", - TrackContainer=alignmentTracks, - PVContainer=pvs) - monitorlist.append(myFTTrackMonitor) - monitorlist.append(myTrackVertexMonitor) -# monitorlist = [ -# myFTTrackMonitor, -# myTrackVertexMonitor, -# ] - # ParticleMassMonitor - - monitorlist = monitorlist + monitor_SciFi_tracks( - alignmentTracks, track_name, includeQuarters=True) - monitorlist = monitorlist + monitor_SciFi_tracks( - best_tracks, "BestHLT2Tracks", includeQuarters=True) - - ## particle mass monitor needs replacement or upgrade - #myParticleMonitor = ParticleMassMonitor( - # name="defaultD0MassMonitor", - # ParticleType="D0", - # Particles=particles, - # MassMean=1864.84 * MeV, - # MassSigma=90 * MeV, - # Bins=100) - #monitorlist.append(myParticleMonitor) - - #return alignmentTracks, selected_pvs, particles, odin, monitorlist - return alignmentTracks, selected_pvs, odin, monitorlist diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py index df508c030..c355b17f4 100644 --- a/Alignment/Humboldt/python/Humboldt/utils.py +++ b/Alignment/Humboldt/python/Humboldt/utils.py @@ -191,8 +191,8 @@ def runAlignment(options, top_node = CompositeNode( "filterNode", - # filters + [alignment_node] + [require_pvs(alignmentPVs)], - filters + [alignment_node], + filters + [alignment_node] + [require_pvs(alignmentPVs)], +# filters + [alignment_node], combine_logic=NodeLogic.LAZY_AND, force_order=True) diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py.save b/Alignment/TAlignment/python/TAlignment/Alignables.py.save deleted file mode 100755 index b7a6f51ea..000000000 --- a/Alignment/TAlignment/python/TAlignment/Alignables.py.save +++ /dev/null @@ -1,497 +0,0 @@ -from __future__ import print_function - -############################################################################### -# (c) Copyright 2000-2020 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 DDDB.CheckDD4Hep import UseDD4Hep - - -class Alignables(list): - WORLD = "/dd/Structure/LHCb" if not UseDD4Hep else "/world" - - def __init__(self, elements=None, dofs=""): - self.m_dofs = ["Tx", "Ty", "Tz", "Rx", "Ry", "Rz", "None"] - - self.m_vpBase = self.WORLD + "/BeforeMagnetRegion/VP" - self.m_vp = self.m_vpBase - self.m_vpSideBase = self.m_vpBase + ("/MotionVP(Left|Right)" - if UseDD4Hep else "") - self.m_vpLeft = self.m_vpSideBase + "/VPLeft" - self.m_vpRight = self.m_vpSideBase + "/VPRight" - self.m_vpModules = self.m_vpSideBase + "/VP(Right|Left)/Module.{1,2}" + ( - "WithSupport" if not UseDD4Hep else "") - self.m_vpModulesLeft = self.m_vpSideBase + "/VPLeft/Module.{1,2}" + ( - "WithSupport" if not UseDD4Hep else "") - self.m_vpModulesRight = self.m_vpSideBase + "/VPRight/Module.{1,2}" + ( - "WithSupport" if not UseDD4Hep else "") - self.m_vpSensors = self.m_vpModules + ("/Module.{1,2}/Ladder." if - not UseDD4Hep else "/ladder_.") - - self.m_tt = self.WORLD + "/BeforeMagnetRegion/TT" - self.m_ttStations = ["TTa", "TTb"] - self.m_ttLayers = [ - "TTa/TTaXLayer", - "TTa/TTaULayer", - "TTb/TTbVLayer", - "TTb/TTbXLayer", - ] - - self.m_muon = self.WORLD + "/DownstreamRegion/Muon" - self.m_mustations = ["/M2", "/M3", "/M4", "/M5"] - self.m_muhalfstationsAC = ["/M.ASide", "/M.CSide"] - self.m_muhalfstations = ["/M.{1,2}Side"] - self.m_muchambers = ["/R.{1,2}Side/Cham.{1,3}"] - - if elements and self.__validElements(elements): - self.__append(elements, dofs) - - def __findDOF(self, dof, dofs): - valid = "" - if not dofs.find(dof) == -1: - valid = dof - - return valid - - def __addDoFs(self, elements, dofs): - valid = "" - invalid = dofs - tmp = [] - - for i in range(len(self.m_dofs)): - valid += self.__findDOF(self.m_dofs[i], invalid) - invalid = invalid.replace(self.m_dofs[i], "") - # remove eventual separators - import re - invalid = re.sub("[,:; ]", '', invalid) - - if valid: - if isinstance(elements, list): - for i in range(len(elements)): - tmp.append(elements[i] + ":%s" % valid) - elif isinstance(elements, str): - tmp.append(elements + ":%s" % valid) - - try: ## asserting whether invalid is not empty - assert (not invalid) - except AssertionError: - print("ERROR: Unknown degree of freedom(s) " + '"' + invalid + '"') - print( - " Valid degrees of freedom are Tx, Ty, Tz, Rx, Ry and Rz" - ) - return [] - - return tmp - - def __validElements(self, elements): - try: - assert isinstance(elements, list) or isinstance(elements, str) - except AssertionError: - self.__elementsError(elements) - return None - - ## Paranoia; extend also throws an exception - if isinstance(elements, str): - for i in range(len(elements)): - try: - assert isinstance(elements[i], str) - except AssertionError: - self.__elementsError(elements) - return None - return True - - def __elementsError(self, elements): - print("ERROR: Specify either a string representing a detector element") - print( - " or a list of strings representing a list of detector elements" - ) - print("elements = ", elements) - - def __append(self, elements, dofs): - if dofs: - tmp = self.__addDoFs(elements, dofs) - self.extend(tmp) - else: - if isinstance(elements, list): - self.extend(elements) - elif isinstance(elements, str): - self.append(elements) - assert ValueError() - - ## Some predefined alignables - - ## Global ############################################################################### - def Tracker(self, dofs=""): - elements = [] - elements.append("Tracker : " + self.m_vp) - elements.append("Tracker : " + self._UT) - elements.append("Tracker : " + self._FT) - #elements.append( "Tracker : " + self.m_muon ) - self.__append(elements, dofs) - - ## VP ################################################################################# - def VP(self, dofs=""): - self.__append(self.m_vp, dofs) - - def VPModules(self, dofs=""): - elements = [] - elements.append(self.m_vpModules) - self.__append(elements, dofs) - - def VPModulesLeft(self, dofs=""): - elements = [] - elements.append(self.m_vpModulesLeft) - self.__append(elements, dofs) - - def VPModulesRight(self, dofs=""): - elements = [] - elements.append(self.m_vpModulesRight) - self.__append(elements, dofs) - - def VPSensors(self, dofs=""): - elements = [] - elements.append(self.m_vpSensors) - self.__append(elements, dofs) - - def VPRight(self, dofs=""): - self.__append(self.m_vpRight, dofs) - - def VPLeft(self, dofs=""): - self.__append(self.m_vpLeft, dofs) - - ## TT ################################################################################# - def TT(self, dofs=""): - self.__append(self.m_tt, dofs) - - def TTLayers(self, dofs=""): - self.__append(self.m_tt + "/TT./.{4}Layer", dofs) - - def TTHalfLayers(self, dofs=""): - elements = [] - # we need to do TTa and TTb seperately since they are actually different - ttalayers = ['TTaXLayer', 'TTaULayer'] - for layername in ttalayers: - # A-side - elements.append(layername + "ASide : " + self.m_tt + "/TTa/" + - layername + "/R(3Module.{2}|2Module(3.|2T))") - # C-side - elements.append(layername + "CSide : " + self.m_tt + "/TTa/" + - layername + "/R(1Module.{2}|2Module(1.|2B))") - ttblayers = ['TTbVLayer', 'TTbXLayer'] - for layername in ttblayers: - # A-side - elements.append(layername + "ASide : " + self.m_tt + "/TTb/" + - layername + "/R(3Module.{2}|2Module(3B|4.|5.))") - # C-side - elements.append(layername + "CSide : " + self.m_tt + "/TTb/" + - layername + "/R(1Module.{2}|2Module(1.|2.|3T))") - self.__append(elements, dofs) - - def TTSplitLayers(self, dofs=""): - elements = [] - ttalayers = ['TTaXLayer', 'TTaULayer'] - for layername in ttalayers: - elements.append(layername + "LowZ : " + self.m_tt + "/TTa/" + - layername + - "/R(1Module(1|3|5)|2Module(1|3)|3Module(2|4|6)).") - elements.append(layername + "HighZ : " + self.m_tt + "/TTa/" + - layername + - "/R(1Module(2|4|6)|2Module2|3Module(1|3|5)).") - ttblayers = ['TTbVLayer', 'TTbXLayer'] - for layername in ttblayers: - elements.append( - layername + "LowZ : " + self.m_tt + "/TTb/" + layername + - "/R(1Module(1|3|5)|2Module(1|3|5)|3Module(2|4|6)).") - elements.append(layername + "HighZ : " + self.m_tt + "/TTb/" + - layername + - "/R(1Module(2|4|6)|2Module(2|4)|3Module(1|3|5)).") - self.__append(elements, dofs) - - def TTBoxes(self, dofs=""): - elements = [] - elements.append("TTASide : " + self.m_tt + - "/TTa/TTa.Layer/R(3Module.{2}|2Module(3.|2T))") - elements.append("TTCSide : " + self.m_tt + - "/TTa/TTa.Layer/R(1Module.{2}|2Module(1.|2B))") - elements.append("TTASide : " + self.m_tt + - "/TTb/TTb.Layer/R(3Module.{2}|2Module(3B|4.|5.))") - elements.append("TTCSide : " + self.m_tt + - "/TTb/TTb.Layer/R(1Module.{2}|2Module(1.|2.|3T))") - self.__append(elements, dofs) - - def TTHalfModules(self, dofs=""): - self.__append(self.m_tt + "/TT./.{4}Layer/.{2}Module.{2}", dofs) - - def TTSensors(self, dofs=""): - self.__append( - self.m_tt + "/TT./.{4}Layer/.{2}Module.{2}/Ladder./Sensor.{2}", - dofs) - - def TTLongModules(self, dofs=""): - elements = [] - for layer in ['TTaXLayer', 'TTaULayer']: - # first R1 and R3 - for i in range(1, 7): - elements.append(layer + "R1Module" + str(i) + " : " + - self.m_tt + "/TTa/" + layer + "/R1Module" + - str(i) + ".") - elements.append(layer + "R3Module" + str(i) + " : " + - self.m_tt + "/TTa/" + layer + "/R3Module" + - str(i) + ".") - # now R2 - for i in [1, 3]: - elements.append(layer + "R2Module" + str(i) + " : " + - self.m_tt + "/TTa/" + layer + "/R2Module" + - str(i) + ".") - for layer in ['TTbVLayer', 'TTbXLayer']: - # first R1 and R3 - for i in range(1, 7): - elements.append(layer + "R1Module" + str(i) + " : " + - self.m_tt + "/TTb/" + layer + "/R1Module" + - str(i) + ".") - elements.append(layer + "R3Module" + str(i) + " : " + - self.m_tt + "/TTb/" + layer + "/R3Module" + - str(i) + ".") - # now R2 - for i in [1, 2, 4, 5]: - elements.append(layer + "R2Module" + str(i) + " : " + - self.m_tt + "/TTb/" + layer + "/R2Module" + - str(i) + ".") - self.__append(sorted(elements), dofs) - - def TTShortModules(self, dofs=""): - elements = [] - self.__append(self.m_tt + "/TTa/.{4}Layer/R2Module2.", dofs) - self.__append(self.m_tt + "/TTb/.{4}Layer/R2Module3.", dofs) - self.__append(sorted(elements), dofs) - - def TTModules(self, dofs=""): - self.TTLongModules(dofs) - self.TTShortModules(dofs) - - ## UT ################################################################################# - _UT = WORLD + "/BeforeMagnetRegion/UT" - _UTStations = ["UTa", "UTb"] - _UTLayers = [ - "UTa/UTaXLayer", "UTa/UTaULayer", "UTb/UTbVLayer", "UTb/UTbXLayer" - ] - - def UT(self, dofs=""): - self.__append(self._UT, dofs) - - def UTLayers(self, dofs=""): - self.__append(self._UT + "/UT./.{4}Layer", dofs) - - ## FT ################################################################################# - _FT = WORLD + "/AfterMagnetRegion/T/FT" - _FTStations = ["/T1", "/T2", "/T3"] - _FTLayers = ["/LayerX1", "/LayerU", "/LayerV", "/LayerX2" - ] if not UseDD4Hep else ["/X1", "/U", "/V", "/X2"] - _FTRealQuarters = [ - "/Quarter0", "/Quarter2", "/Quarter1", "/Quarter3" - ] if not UseDD4Hep else ["/HL0/Q0", "/HL0/Q2", "/HL1/Q1", "/HL1/Q3"] - _FTHalfLayerQuarters = { - "/HL0": "/Quarter(0|2)" if not UseDD4Hep else "/HL0/Q(0|2)", - "/HL1": "/Quarter(1|3)" if not UseDD4Hep else "/HL1/Q(1|3)" - } - _FTHalfLayers = { - "/HL0": "/Quarter(0|2)" if not UseDD4Hep else "/HL0", - "/HL1": "/Quarter(1|3)" if not UseDD4Hep else "/HL1" - } - _FTCFrameLayers = { - "/X1U": ("/Layer" if not UseDD4Hep else "/") + "(X1|U)", - "/VX2": ("/Layer" if not UseDD4Hep else "/") + "(V|X2)" - } - - _FTModulesAll = [("/Module%d" if not UseDD4Hep else "/M%d") % i - for i in range(6)] - _FTModulesShort = [("/Module%d" if not UseDD4Hep else "/M%d") % i - for i in range(5)] - _FTMats = ["/Mat%d" % i for i in range(4)] - - def FT(self, dofs=""): - self.__append(self._FT, dofs) - - def FTStations(self, dofs=""): - elements = [] - for i in self._FTStations: - elements.append(self._FT + i) - self.__append(elements, dofs) - - def FTLayers(self, dofs=""): - elements = [] - for station in self._FTStations: - for layer in self._FTLayers: - elements.append(self._FT + station + layer) - self.__append(elements, dofs) - - def FTHalfLayers(self, dofs=""): - elements = [] - for station in self._FTStations: - for layer in self._FTLayers: - for halflayer in self._FTHalfLayers: - elements.append(self._FT + station + layer + halflayer) - self.__append(elements, dofs) - - def FTQuarters(self, dofs=""): - elements = [] - for station in self._FTStations: - for layer in self._FTLayers: - if UseDD4Hep: - for halflayer in self._FTHalfLayers: - if halflayer == "/HL0": - quarters = self._FTQuarters["CSide"] - else: - quarters = self._FTQuarters["ASide"] - for quarter in quarters: - elements.append(self._FT + station + layer + - halflayer + quarter) - else: - for quarter in self._FTRealQuarters: - elements.append(self._FT + station + layer + - halflayer + quarter) - self.__append(elements, dofs) - - def FTCFrames(self, dofs=""): - elements = [] - for station in self._FTStations: - for (cframelayername, cframelayer) in self._FTCFrameLayers.items(): - for (side, halflayer) in self._FTHalfLayers.items(): - elements.append("FT" + station + cframelayername + side + - " : " + self._FT + station + cframelayer + - halflayer) - print('FTCFrames elements:', elements) - self.__append(elements, dofs) - - def FTCFrameLayers(self, dofs=""): - elements = [] - for station in self._FTStations: - for layer in self._FTLayers: - for (side, halflayer) in self._FTHalfLayers.items(): - elements.append("FT" + station + layer + side + " : " + - self._FT + station + layer + halflayer) - print('FTCFrameLayers elements:', elements) - self.__append(elements, dofs) - - def FTModules(self, dofs=""): - elements = [] - for station in self._FTStations: - for layer in self._FTLayers: - for (side, - halflayerquarters) in self._FTHalfLayerQuarters.items(): - for module in self._FTModulesAll if station == "/T3" else self._FTModulesShort: - elements.append("FT" + station + layer + side + - module + ":" + self._FT + station + - layer + halflayerquarters + module) - print('long module elements:', elements) - self.__append(elements, dofs) - - def FTHalfModules(self, dofs=""): - elements = [] - for i in self._FTStations: - for j in self._FTLayers: - for k in self._FTRealQuarters: - for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: - elements.append(self._FT + i + j + k + l) -# print('FTHalfModules elements:', elements) - self.__append(elements, dofs) - - def FTHalfModuleJoints(self, - errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"): -# errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"): -# errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"): - joints = [] - for station in self._FTStations: - for layer in self._FTLayers: - for module in self._FTModulesAll if station == "/T3" else self._FTModulesShort: - combinations = [("/HL0/Q0", "/HL0/Q2"), - ("/HL1/Q1", "/HL1/Q3")] if UseDD4Hep else [ - ("/Quarter0", "/Quarter2"), - ("/Quarter1", "/Quarter3") - ] - for (Qtop, Qbot) in combinations: - modtop = 'FT' + station + layer + Qtop + module - modbot = 'FT' + station + layer + Qbot + module - joints.append(" : ".join( - [modtop, modbot, errors, "0 -1212.75 0"])) -# print(joints) - return joints - - def FTMats(self, dofs=""): - elements = [] - for station in self._FTStations: - for layer in self._FTLayers: - if UseDD4Hep: - for halflayer in self._FTHalfLayers: - if halflayer == "/HL0": - quarters = self._FTQuarters["CSide"] - else: - quarters = self._FTQuarters["ASide"] - for quarter in quarters: - if station == "/T3": - modules = self._FTModulesAll - else: - modules = self._FTModulesShort - for module in modules: - for mat in self._FTMats: - elements.append(self._FT + station + - layer + halflayer + - quarter + module + mat) - else: - for (side, quarter) in self._FTQuarters.items(): - if station == "/T3": - modules = self._FTModulesAll - else: - modules = self._FTModulesShort - for module in modules: - for mat in self._FTMats: - elements.append( - "FT/" + station.strip('/') + side + - layer.strip('/') + module.strip('/') + - mat.strip('/') + " : " + self._FT + - station + layer + quarter + module + mat) - self.__append(elements, dofs) - - ## MUON ############################################################################## - def MuonStations(self, dofs=""): - elements = [] - for i in self.m_mustations: - elements.append(self.m_muon + i) - self.__append(elements, dofs) - - def MuonHalfStations(self, dofs=""): - elements = [] - for i in self.m_mustations: - for j in self.m_muhalfstations: - elements.append(self.m_muon + i + j) - self.__append(elements, dofs) - - def MuonChambers(self, dofs=""): - elements = [] - ## 5 Stations numbered from 1 to 5 - for i in self.m_mustations: - ## There are 2 halves in each station - for j in self.m_muhalfstations: - ## Chambers - for l in self.m_muchambers: - elements.append(self.m_muon + i + j + l) - self.__append(elements, dofs) - - def MuonHalfStationsCside(self, dofs=""): - elements = [] - for i in self.m_mustations: - elements.append(self.m_muon + i + self.m_muhalfstationsAC[1]) - self.__append(elements, dofs) - - def MuonHalfStationsAside(self, dofs=""): - elements = [] - for i in self.m_mustations: - elements.append(self.m_muon + i + self.m_muhalfstationsAC[0]) - self.__append(elements, dofs) diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index 55114ab76..2c569a3e8 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -168,6 +168,13 @@ class SurveyConstraints(LHCbConfigurableUser): self.XmlUncertainties += [ "FT/.*/M. : 0.1 0.1 0.1 0.00004 0.0001 0.00004" ] + self.Constraints += [ + # removed : 0 +1213 0", previous: see below +# "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", +# "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" + "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002", + "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002" + ] else: self.XmlUncertainties += [ "FT/.*/Module. : 0.1 0.1 0.1 0.00004 0.0001 0.00004" @@ -188,10 +195,9 @@ class SurveyConstraints(LHCbConfigurableUser): "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" # added this for 01-26 ] else: - if 'detdesc' in ver: - self.XmlUncertainties += [ - "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" - ] + self.XmlUncertainties += [ + "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" + ] # SciFi test constraints v0.1 # translation constraints (somewhat) realistic -- GitLab From a901fd5851a704d676293e6ca32b0b61d03dc094 Mon Sep 17 00:00:00 2001 From: Gitlab CI <noreply@cern.ch> Date: Thu, 4 Apr 2024 09:54:14 +0000 Subject: [PATCH 09/12] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Alignment/-/jobs/37708861 --- .../Humboldt/python/Humboldt/ParticleSelections.py | 14 ++++++-------- Alignment/Humboldt/python/Humboldt/utils.py | 2 +- .../python/TAlignment/SurveyConstraints.py | 4 ++-- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py index 577ae6ed9..dd7b34b2c 100644 --- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py +++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py @@ -49,18 +49,16 @@ def defaultHLT1D0Selection(vertices_v2, combination_code = F.require_all( in_range(1760 * MeV, F.MASS, 1960 * MeV), - F.MAX(F>PT) > 1200 * MeV, + F.MAX(F > PT) > 1200 * MeV, F.PT > 2000 * MeV, F.MAXDOCACUT(0.1 * mm), ) - vertex_code = F.require_all( - F.CHI2DOF < 10., - in_range(1760 * MeV, F.MASS, 1960 * MeV), - F.END_VZ > -341. * mm, - F.BPVLTIME(vertices_v2) > 0.450 * ps, - F.END_VX < 4 * mm, - F.END_VY < 4 * mm) + vertex_code = F.require_all(F.CHI2DOF < 10., + in_range(1760 * MeV, F.MASS, + 1960 * MeV), F.END_VZ > -341. * mm, + F.BPVLTIME(vertices_v2) > 0.450 * ps, + F.END_VX < 4 * mm, F.END_VY < 4 * mm) combinedD0 = ParticleCombiner( [pions, kaons], diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py index c355b17f4..3c30cfeff 100644 --- a/Alignment/Humboldt/python/Humboldt/utils.py +++ b/Alignment/Humboldt/python/Humboldt/utils.py @@ -192,7 +192,7 @@ def runAlignment(options, top_node = CompositeNode( "filterNode", filters + [alignment_node] + [require_pvs(alignmentPVs)], -# filters + [alignment_node], + # filters + [alignment_node], combine_logic=NodeLogic.LAZY_AND, force_order=True) diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index 2c569a3e8..4906a610f 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -170,8 +170,8 @@ class SurveyConstraints(LHCbConfigurableUser): ] self.Constraints += [ # removed : 0 +1213 0", previous: see below -# "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", -# "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" + # "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", + # "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002", "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002" ] -- GitLab From 131fbf2f67ca73c50fb2577ba9e15916bd000839 Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Thu, 18 Apr 2024 16:11:23 +0200 Subject: [PATCH 10/12] restored utils options and particle selection fixed SurveyConstraint.py back to where it was with commented option added backwards velo + longtracks function in alignment tracking added WIP function in Alignables cleaned up options files and renamed them --- ...> AlignFT_VP_combined_data_halfmodules.py} | 10 +- ...> AlignFT_VP_combined_data_longmodules.py} | 17 ++- .../options/AlignFT_VP_combined_data_v1_3.py | 109 ------------------ .../python/Humboldt/AlignmentScenarios.py | 90 ++++++++------- .../python/Humboldt/ParticleSelections.py | 21 ++-- .../python/Humboldt/alignment_tracking.py | 22 +--- Alignment/Humboldt/python/Humboldt/utils.py | 3 +- .../python/TAlignment/Alignables.py | 21 ++-- .../python/TAlignment/SurveyConstraints.py | 28 ++--- 9 files changed, 96 insertions(+), 225 deletions(-) rename Alignment/Humboldt/options/{AlignFT_VP_combined_data.py => AlignFT_VP_combined_data_halfmodules.py} (92%) rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_v1_2.py => AlignFT_VP_combined_data_longmodules.py} (87%) delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py similarity index 92% rename from Alignment/Humboldt/options/AlignFT_VP_combined_data.py rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py index 0256a6d67..0e6cadde5 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py @@ -76,12 +76,10 @@ from Humboldt.utils import runAlignment from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment -config = configureGlobalAlignment(halfdofs="TxTyTzRy") +from Humboldt.AlignmentScenarios import configureGlobalAlignment_halfmodules +config = configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRxRyRz") -alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf( -) -#alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) @@ -105,5 +103,5 @@ with createAlignAlgorithm.bind( alignmentPVs=alignmentPVs, odin=odin, monitorList=monitors, - particles=particles, +# particles=particles, usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py similarity index 87% rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py index 8e2ac2475..0546a2f93 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py @@ -44,10 +44,11 @@ options.data_type = 'Upgrade' # set DDDB and CondDB info options.geometry_version = "trunk" # run3/trunk -CONDDBTag = "nibreer_all0_conds" +#CONDDBTag = "master" +CONDDBTag = "nibreer_giulia_mass_conds" options.conditions_version = CONDDBTag -online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database' +online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database' if os.path.exists(online_cond_path): DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path @@ -73,15 +74,12 @@ configure_input(options) from Humboldt.utils import runAlignment from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_2 -config = configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz") +from Humboldt.AlignmentScenarios import configureGlobalAlignment_longmodules +config = configureGlobalAlignment_longmodules(halfdofs="TxTyTzRxRyRz") -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf( -) +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) @@ -102,7 +100,8 @@ with createAlignAlgorithm.bind( alignmentTracks=alignmentTracks, elementsToAlign=config.Elements, filters=filter_pvs, + alignmentPVs=alignmentPVs, odin=odin, monitorList=monitors, - alignmentPVs=alignmentPVs, +# particles=particles, usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py deleted file mode 100644 index f18d14317..000000000 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py +++ /dev/null @@ -1,109 +0,0 @@ -############################################################################### -# (c) Copyright 2022 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. # -############################################################################### -""" -Configuration file to test running on data. -""" - -from Moore import options, run_moore -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction -from Hlt2Conf.lines import all_lines -import os -import re -from RecoConf.hlt2_tracking import ( - make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks, - make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks, - get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks) -from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT -from RecoConf.hlt1_tracking import ( - make_VeloClusterTrackingSIMD, make_RetinaClusters, - get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs, - make_PatPV3DFuture_pvs) - -from RecoConf.hlt1_muonid import make_muon_hits -from RecoConf.calorimeter_reconstruction import make_digits, make_calo -from PyConf.application import configure_input -from PRConfig.FilesFromDirac import get_access_urls -from DDDB.CheckDD4Hep import UseDD4Hep -from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc -from RecoConf.event_filters import require_pvs -from Humboldt.options import usePrKalman - -options.input_type = 'MDF' -options.input_raw_format = 0.5 -options.simulation = False # in DD4Hep is False the correct option -options.data_type = 'Upgrade' - -# set DDDB and CondDB info -options.geometry_version = "trunk" # run3/trunk -#CONDDBTag = "nibreer_giulia_mass_conds" -CONDDBTag = "nibreer_all0_conds" -options.conditions_version = CONDDBTag - -online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database' -if os.path.exists(online_cond_path): - DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path - -from glob import glob -from Gaudi.Configuration import * -from GaudiConf import IOHelper - -# run 269045 -files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf") -options.input_files = files[0:4000] - -options.event_store = 'EvtStoreSvc' -options.histo_file = "GoodLongTracks_histo.root" -#options.ntuple_file = "GoodLongTracks_tuple.root" -options.use_iosvc = True # True for data, False for MC -# multithreading not working while creating tuples -options.n_threads = 35 -options.evt_max = -1 - -options.scheduler_legacy_mode = False - -configure_input(options) - -from Humboldt.utils import runAlignment -from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf -from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf -from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer - -from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_3 -config = configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz") - -#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() -alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf( -) - -filter_pvs = [] -filter_pvs.append(require_pvs(alignmentPVs)) - -# add survey constraints -from Configurables import SurveyConstraints -from PyConf.Tools import AlignChisqConstraintTool -from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList - -with createAlignAlgorithm.bind( - outputDataFile="humb-vp-ft-halves-modules", - updateInFinalize=False, - onlineMode=False): - runAlignment( - options, - surveyConstraints=config.SurveyConstraints, - lagrangeConstraints=config.LagrangeConstraints, - alignmentTracks=alignmentTracks, - elementsToAlign=config.Elements, - filters=filter_pvs, - odin=odin, - monitorList=monitors, - alignmentPVs=alignmentPVs, - usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py index 330c7ffba..d307bb107 100644 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py @@ -39,44 +39,16 @@ class AlignmentScenario(): #self.SubDetectors = subdetectors -def configureGlobalAlignment(halfdofs="TxTyTzRy"): - setup = AlignmentScenario('GlobalAlignment') - setup.SubDetectors += ['VP', 'FT'] - - elements = Alignables() - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) - - elements.FTHalfModules("TxRxRz") - setup.Elements += list(elements) - - surveyconstraints = SurveyConstraints() - if UseDD4Hep: - surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) - else: - surveyconstraints.VP(ver='latest') - setup.SurveyConstraints = surveyconstraints - - constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz") - setup.LagrangeConstraints = constraints - - return setup - - -def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment_v1_2') +def configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRy"): + setup = AlignmentScenario('GlobalAlignment_halfmodules') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() elements.VP("Rx") - elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) +# elements.VPRight(halfdofs) +# elements.VPLeft(halfdofs) elements.FTHalfModules("TxRz") - setup.Elements += list(elements) surveyconstraints = SurveyConstraints() @@ -88,37 +60,69 @@ def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"): setup.SurveyConstraints = surveyconstraints constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz : total") + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") + constraints.append("BackFramesFixed_00 : FT/T3/X2/HL0/Q0/M0 : Tx Rz") + constraints.append("BackFramesFixed_01 : FT/T3/X2/HL0/Q0/M1 : Tx Rz") + constraints.append("BackFramesFixed_02 : FT/T3/X2/HL0/Q0/M2 : Tx Rz") + constraints.append("BackFramesFixed_03 : FT/T3/X2/HL0/Q0/M3 : Tx Rz") + constraints.append("BackFramesFixed_04 : FT/T3/X2/HL0/Q0/M4 : Tx Rz") + constraints.append("BackFramesFixed_05 : FT/T3/X2/HL0/Q0/M5 : Tx Rz") + constraints.append("BackFramesFixed_06 : FT/T3/X2/HL0/Q2/M0 : Tx Rz") + constraints.append("BackFramesFixed_07 : FT/T3/X2/HL0/Q2/M1 : Tx Rz") + constraints.append("BackFramesFixed_08 : FT/T3/X2/HL0/Q2/M2 : Tx Rz") + constraints.append("BackFramesFixed_09 : FT/T3/X2/HL0/Q2/M3 : Tx Rz") + constraints.append("BackFramesFixed_10 : FT/T3/X2/HL0/Q2/M4 : Tx Rz") + constraints.append("BackFramesFixed_11 : FT/T3/X2/HL0/Q2/M5 : Tx Rz") + constraints.append("BackFramesFixed_12 : FT/T3/X2/HL1/Q1/M0 : Tx Rz") + constraints.append("BackFramesFixed_13 : FT/T3/X2/HL1/Q1/M1 : Tx Rz") + constraints.append("BackFramesFixed_14 : FT/T3/X2/HL1/Q1/M2 : Tx Rz") + constraints.append("BackFramesFixed_15 : FT/T3/X2/HL1/Q1/M3 : Tx Rz") + constraints.append("BackFramesFixed_16 : FT/T3/X2/HL1/Q1/M4 : Tx Rz") + constraints.append("BackFramesFixed_17 : FT/T3/X2/HL1/Q1/M5 : Tx Rz") + constraints.append("BackFramesFixed_18 : FT/T3/X2/HL1/Q3/M0 : Tx Rz") + constraints.append("BackFramesFixed_19 : FT/T3/X2/HL1/Q3/M1 : Tx Rz") + constraints.append("BackFramesFixed_20 : FT/T3/X2/HL1/Q3/M2 : Tx Rz") + constraints.append("BackFramesFixed_21 : FT/T3/X2/HL1/Q3/M3 : Tx Rz") + constraints.append("BackFramesFixed_22 : FT/T3/X2/HL1/Q3/M4 : Tx Rz") + constraints.append("BackFramesFixed_23 : FT/T3/X2/HL1/Q3/M5 : Tx Rz") setup.LagrangeConstraints = constraints return setup - -def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"): - setup = AlignmentScenario('GlobalAlignment_v1_3') +def configureGlobalAlignment_Longmodules(halfdofs="TxTyTzRxRyRz"): + setup = AlignmentScenario('GlobalAlignment_longmodules') setup.SubDetectors += ['VP', 'FT'] elements = Alignables() - elements.VP("Rx") + elements.VP("RxRyRz") elements.VPRight(halfdofs) - elements.VPLeft(halfdofs) + elements.VPLeft("None") - elements.FTHalfModules("TxRxRz") + elements.FTModules("TxRz") setup.Elements += list(elements) surveyconstraints = SurveyConstraints() if UseDD4Hep: surveyconstraints.VP(ver='2023_dd4hep') - surveyconstraints.FT(addHalfModuleJoints=True) else: surveyconstraints.VP(ver='latest') setup.SurveyConstraints = surveyconstraints constraints = [] - constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz") - constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz : total") + constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz") + constraints.append("BackFramesFixed_00 : FT/T3/X2/HL0/M0 : Tx Rz") + constraints.append("BackFramesFixed_01 : FT/T3/X2/HL0/M1 : Tx Rz") + constraints.append("BackFramesFixed_02 : FT/T3/X2/HL0/M2 : Tx Rz") + constraints.append("BackFramesFixed_03 : FT/T3/X2/HL0/M3 : Tx Rz") + constraints.append("BackFramesFixed_04 : FT/T3/X2/HL0/M4 : Tx Rz") + constraints.append("BackFramesFixed_05 : FT/T3/X2/HL0/M5 : Tx Rz") + constraints.append("BackFramesFixed_10 : FT/T3/X2/HL1/M0 : Tx Rz") + constraints.append("BackFramesFixed_11 : FT/T3/X2/HL1/M1 : Tx Rz") + constraints.append("BackFramesFixed_12 : FT/T3/X2/HL1/M2 : Tx Rz") + constraints.append("BackFramesFixed_13 : FT/T3/X2/HL1/M3 : Tx Rz") + constraints.append("BackFramesFixed_14 : FT/T3/X2/HL1/M4 : Tx Rz") + constraints.append("BackFramesFixed_15 : FT/T3/X2/HL1/M5 : Tx Rz") setup.LagrangeConstraints = constraints return setup diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py index dd7b34b2c..a46c25f21 100644 --- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py +++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py @@ -29,14 +29,14 @@ def defaultHLT1D0Selection(vertices_v2, loosepions = make_has_rich_long_pions() loosekaons = make_has_rich_long_kaons() - ptmin = 800 * MeV - minIP = 0.06 * mm + ptmin = 1000 * MeV + minIP = 0.07 * mm pmin = 3000 * MeV pions = ParticleFilter( loosepions, F.FILTER( - F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K < 5., + F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K < 0., F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2)))) kaons = ParticleFilter( @@ -46,23 +46,22 @@ def defaultHLT1D0Selection(vertices_v2, F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2)))) particles = [pions, kaons] - combination_code = F.require_all( in_range(1760 * MeV, F.MASS, 1960 * MeV), - F.MAX(F > PT) > 1200 * MeV, - F.PT > 2000 * MeV, + F.SUM(F.PT) > 2000 * MeV, F.MAXDOCACUT(0.1 * mm), ) - vertex_code = F.require_all(F.CHI2DOF < 10., - in_range(1760 * MeV, F.MASS, - 1960 * MeV), F.END_VZ > -341. * mm, + F.BPVETA(vertices_v2) > 2, + F.BPVETA(vertices_v2) < 5, + in_range(mass_min, F.MASS, mass_max), + F.END_VZ > -341. * mm, F.BPVLTIME(vertices_v2) > 0.450 * ps, - F.END_VX < 4 * mm, F.END_VY < 4 * mm) + F.BPVDIRA(vertices_v2) > 0.999) combinedD0 = ParticleCombiner( [pions, kaons], - name="AlignHLTD0", + name="AlignHLTD0_{hash}", DecayDescriptor="[D0 -> pi+ K-]cc", CombinationCut=combination_code, CompositeCut=vertex_code, diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py index 0e5bf0c95..add250e80 100644 --- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py +++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py @@ -216,7 +216,7 @@ def monitor_SciFi_tracks(track_group, return monitorlist - +# also uses velo backwards tracks in addition to long tracks, otherwise identical to make_scifi_tracks_and_particles_prkf def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, MaxOutlierIterations=2, MaxChi2Dof=5, @@ -260,9 +260,8 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, from PyConf.application import make_odin odin = make_odin() - from Humboldt.ParticleSelections import defaultHLT1D0Selection, defaultHLTD0Selection - # particles = defaultHLT1D0Selection(particlepvs) - particles = defaultHLTD0Selection(particlepvs) + from Humboldt.ParticleSelections import defaultHLT1D0Selection + particles = defaultHLT1D0Selection(particlepvs) from PyConf.Tools import TrackSelector from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger @@ -332,21 +331,6 @@ def make_scifi_tracks_and_particles_prkf(): from GaudiKernel.SystemOfUnits import MeV monitorlist = [] - # myFTTrackMonitor = FTTrackMonitor_PrKalman( - # name="AlignMoni_FTTrackMonitor_PrKalman", - # TracksInContainer=alignmentTracks) - # myTrackVertexMonitor = TrackVertexMonitor( - # name="AlignMoni_FT_TrackVertexMonitor", - # TrackContainer=alignmentTracks, - # PVContainer=pvs) - # monitorlist.append(myFTTrackMonitor) - # monitorlist.append(myTrackVertexMonitor) - # monitorlist = [ - # myFTTrackMonitor, - # myTrackVertexMonitor, - # ] - # ParticleMassMonitor - monitorlist = monitorlist + monitor_SciFi_tracks( alignmentTracks, "AlignGoodLongTracks", includeQuarters=True) monitorlist = monitorlist + monitor_SciFi_tracks( diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py index 3c30cfeff..25a95df74 100644 --- a/Alignment/Humboldt/python/Humboldt/utils.py +++ b/Alignment/Humboldt/python/Humboldt/utils.py @@ -191,8 +191,7 @@ def runAlignment(options, top_node = CompositeNode( "filterNode", - filters + [alignment_node] + [require_pvs(alignmentPVs)], - # filters + [alignment_node], + filters + [alignment_node], combine_logic=NodeLogic.LAZY_AND, force_order=True) diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py index 0de966f1c..93edc625d 100755 --- a/Alignment/TAlignment/python/TAlignment/Alignables.py +++ b/Alignment/TAlignment/python/TAlignment/Alignables.py @@ -369,7 +369,6 @@ class Alignables(list): elements.append("FT" + station + cframelayername + side + " : " + self._FT + station + cframelayer + halflayer) - print('FTCFrames elements:', elements) self.__append(elements, dofs) def FTCFrameLayers(self, dofs=""): @@ -379,7 +378,6 @@ class Alignables(list): for (side, halflayer) in self._FTHalfLayers.items(): elements.append("FT" + station + layer + side + " : " + self._FT + station + layer + halflayer) - print('FTCFrameLayers elements:', elements) self.__append(elements, dofs) def FTModules(self, dofs=""): @@ -392,7 +390,6 @@ class Alignables(list): elements.append("FT" + station + layer + side + module + ":" + self._FT + station + layer + halflayerquarters + module) - print('long module elements:', elements) self.__append(elements, dofs) def FTHalfModules(self, dofs=""): @@ -402,17 +399,17 @@ class Alignables(list): for k in self._FTRealQuarters: for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: elements.append(self._FT + i + j + k + l) -# print('FTHalfModules elements:', elements) self.__append(elements, dofs) - def FTHalfModulesOuterLayers(self, dofs=""): - elements = [] - for i in self._FTStations: - for j in self._FTOuterLayers: - for k in self._FTRealQuarters: - for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: - elements.append(self._FT + i + j + k + l) - self.__append(elements, dofs) +# WIP: align only the outer layers for each station +# def FTHalfModulesOuterLayers(self, dofs=""): +# elements = [] +# for i in self._FTStations: +# for j in self._FTOuterLayers: +# for k in self._FTRealQuarters: +# for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: +# elements.append(self._FT + i + j + k + l) +# self.__append(elements, dofs) def FTHalfModuleJoints( # self, errors="0.0000074 0.0012 0.0019 0.0004 0.00000044 0.00022"): diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index 4906a610f..fcbab17d4 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -122,9 +122,9 @@ class SurveyConstraints(LHCbConfigurableUser): for f in XmlFilesDict['VP'][ver]: self.XmlFiles += [self.defaultSurveyDir() + "VP/" + f + ".xml"] self.XmlUncertainties += [ - "VP/.*/Module(00|).. : 0.2 0.2 0.2 0.001 0.001 0.001", - "VP/.*/Ladder. : 0.005 0.005 0.01 0.0002 0.0002 0.0001", - "VP/.*/ladder_. : 0.005 0.005 0.01 0.0002 0.0002 0.0001" + ".*/Module(00|).. : 0.2 0.2 0.2 0.001 0.001 0.001", + ".*/Ladder. : 0.005 0.005 0.01 0.0002 0.0002 0.0001", + ".*/ladder_. : 0.005 0.005 0.01 0.0002 0.0002 0.0001" ] if UseDD4Hep: self.Constraints += [ @@ -168,13 +168,11 @@ class SurveyConstraints(LHCbConfigurableUser): self.XmlUncertainties += [ "FT/.*/M. : 0.1 0.1 0.1 0.00004 0.0001 0.00004" ] - self.Constraints += [ - # removed : 0 +1213 0", previous: see below - # "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", - # "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" - "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002", - "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002" - ] +# Use this functionality to constrain the Long- or Halfmodules to the top of the frame +# self.Constraints += [ +# "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", +# "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" +# ] else: self.XmlUncertainties += [ "FT/.*/Module. : 0.1 0.1 0.1 0.00004 0.0001 0.00004" @@ -187,6 +185,8 @@ class SurveyConstraints(LHCbConfigurableUser): else: if UseDD4Hep: self.XmlUncertainties += [ + #".*M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" + #"FT/T3/X2/.*/HL./M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002", ] # maybe remove this bottom constraint @@ -195,9 +195,10 @@ class SurveyConstraints(LHCbConfigurableUser): "FT/T./(X1|X2|U|V)/HL./M. : 0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" # added this for 01-26 ] else: - self.XmlUncertainties += [ - "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" - ] + if 'detdesc' in ver: + self.XmlUncertainties += [ + "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002" + ] # SciFi test constraints v0.1 # translation constraints (somewhat) realistic @@ -222,7 +223,6 @@ class SurveyConstraints(LHCbConfigurableUser): "FT/.*Mat. : 0 0 0 0 0 0 : 0.05 0.05 0.05 0.1 0.1 0.1" ] if addHalfModuleJoints: - print('joints in use') from TAlignment.Alignables import Alignables self.ElementJoints += Alignables().FTHalfModuleJoints() -- GitLab From 7b20fdee71bf1e70166949a60c0f697b753a9c6b Mon Sep 17 00:00:00 2001 From: Nils Breer <nils.breer@cern.ch> Date: Thu, 17 Oct 2024 10:50:27 +0200 Subject: [PATCH 11/12] added object to only align T3X2M5 modules --- .../TAlignment/python/TAlignment/Alignables.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py index 93edc625d..b0cd0491b 100755 --- a/Alignment/TAlignment/python/TAlignment/Alignables.py +++ b/Alignment/TAlignment/python/TAlignment/Alignables.py @@ -401,15 +401,14 @@ class Alignables(list): elements.append(self._FT + i + j + k + l) self.__append(elements, dofs) -# WIP: align only the outer layers for each station -# def FTHalfModulesOuterLayers(self, dofs=""): -# elements = [] -# for i in self._FTStations: -# for j in self._FTOuterLayers: -# for k in self._FTRealQuarters: -# for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: -# elements.append(self._FT + i + j + k + l) -# self.__append(elements, dofs) + def FTT3X2M5(self, dofs=""): + elements = [] + i = "/T3" + for k in self._FTRealQuarters: + for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: + if l == "/M5": + elements.append(self._FT + i + "/X2" + k + l + ";(%s)" % self._FTHalfModuleReadoutSideTranslation) + self.__append(elements, dofs) def FTHalfModuleJoints( # self, errors="0.0000074 0.0012 0.0019 0.0004 0.00000044 0.00022"): -- GitLab From 00c2fd07f7009e959a632236eaeec185d16e6772 Mon Sep 17 00:00:00 2001 From: Gitlab CI <noreply@cern.ch> Date: Thu, 17 Oct 2024 08:52:51 +0000 Subject: [PATCH 12/12] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Alignment/-/jobs/44812882 --- .../Humboldt/options/AlignFT_VP_combined_data_halfmodules.py | 5 +++-- .../Humboldt/options/AlignFT_VP_combined_data_longmodules.py | 5 +++-- Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py | 5 +++-- Alignment/Humboldt/python/Humboldt/alignment_tracking.py | 1 + Alignment/TAlignment/python/TAlignment/Alignables.py | 5 +++-- Alignment/TAlignment/python/TAlignment/SurveyConstraints.py | 2 ++ 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py index 0e6cadde5..479546285 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py @@ -79,7 +79,8 @@ from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer from Humboldt.AlignmentScenarios import configureGlobalAlignment_halfmodules config = configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRxRyRz") -alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf( +) filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) @@ -103,5 +104,5 @@ with createAlignAlgorithm.bind( alignmentPVs=alignmentPVs, odin=odin, monitorList=monitors, -# particles=particles, + # particles=particles, usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py index 0546a2f93..5494d9f26 100644 --- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py +++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py @@ -79,7 +79,8 @@ from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer from Humboldt.AlignmentScenarios import configureGlobalAlignment_longmodules config = configureGlobalAlignment_longmodules(halfdofs="TxTyTzRxRyRz") -alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf() +alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf( +) filter_pvs = [] filter_pvs.append(require_pvs(alignmentPVs)) @@ -103,5 +104,5 @@ with createAlignAlgorithm.bind( alignmentPVs=alignmentPVs, odin=odin, monitorList=monitors, -# particles=particles, + # particles=particles, usePrKalman=usePrKalman) diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py index d307bb107..4b912ee5f 100644 --- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py +++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py @@ -45,8 +45,8 @@ def configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRy"): elements = Alignables() elements.VP("Rx") -# elements.VPRight(halfdofs) -# elements.VPLeft(halfdofs) + # elements.VPRight(halfdofs) + # elements.VPLeft(halfdofs) elements.FTHalfModules("TxRz") setup.Elements += list(elements) @@ -89,6 +89,7 @@ def configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRy"): return setup + def configureGlobalAlignment_Longmodules(halfdofs="TxTyTzRxRyRz"): setup = AlignmentScenario('GlobalAlignment_longmodules') setup.SubDetectors += ['VP', 'FT'] diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py index add250e80..2ad24099b 100644 --- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py +++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py @@ -216,6 +216,7 @@ def monitor_SciFi_tracks(track_group, return monitorlist + # also uses velo backwards tracks in addition to long tracks, otherwise identical to make_scifi_tracks_and_particles_prkf def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True, MaxOutlierIterations=2, diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py index b0cd0491b..ba11e83b6 100755 --- a/Alignment/TAlignment/python/TAlignment/Alignables.py +++ b/Alignment/TAlignment/python/TAlignment/Alignables.py @@ -406,8 +406,9 @@ class Alignables(list): i = "/T3" for k in self._FTRealQuarters: for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort: - if l == "/M5": - elements.append(self._FT + i + "/X2" + k + l + ";(%s)" % self._FTHalfModuleReadoutSideTranslation) + if l == "/M5": + elements.append(self._FT + i + "/X2" + k + l + ";(%s)" % + self._FTHalfModuleReadoutSideTranslation) self.__append(elements, dofs) def FTHalfModuleJoints( diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py index fcbab17d4..7faf333a1 100644 --- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py +++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py @@ -168,6 +168,8 @@ class SurveyConstraints(LHCbConfigurableUser): self.XmlUncertainties += [ "FT/.*/M. : 0.1 0.1 0.1 0.00004 0.0001 0.00004" ] + + # Use this functionality to constrain the Long- or Halfmodules to the top of the frame # self.Constraints += [ # "FT/T./(X1|X2|U|V)/HL./Q./M. : 0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0", -- GitLab