From 69ddef06891c49ab7a1e957977feb3195a302302 Mon Sep 17 00:00:00 2001 From: Miguel Ramos Pernas Date: Thu, 23 May 2019 11:23:04 +0200 Subject: [PATCH 1/8] Add single-muon and di-muon lines --- Hlt/Hlt1Conf/options/with_lines.py | 275 ++++++++++++------ Hlt/Hlt1Conf/python/Hlt1Conf/lines.py | 36 +-- .../python/Hlt1Conf/reconstruction.py | 240 +++++++++------ 3 files changed, 361 insertions(+), 190 deletions(-) diff --git a/Hlt/Hlt1Conf/options/with_lines.py b/Hlt/Hlt1Conf/options/with_lines.py index c408f1f6c2f..ee5cdd2db7b 100644 --- a/Hlt/Hlt1Conf/options/with_lines.py +++ b/Hlt/Hlt1Conf/options/with_lines.py @@ -11,9 +11,10 @@ from __future__ import absolute_import, division, print_function import math +from GaudiKernel.SystemOfUnits import mm, MeV, GeV + from PyConf.smart import ( - configurable, -) + configurable, ) from Hlt1Conf.lines import ( require_all, require_any, @@ -25,11 +26,15 @@ from Hlt1Conf.reconstruction import ( gec, RawData, FilterEmptyPVs, + FilterIP, FTDecoding, make_forward_tracks, + make_muonmatch_param_forward_fitted_tracks, make_param_forward_fitted_tracks, make_pvs, - EmptyFilter + EmptyFilter, + VeloUTTracking, + ForwardTracking, ) from PyConf.core import ( @@ -37,6 +42,7 @@ from PyConf.core import ( EverythingHandler, ) + def patch_hybrid_tool(): """Remove Hybrid modules that require a DVAlgorithm. @@ -45,10 +51,7 @@ def patch_hybrid_tool(): we don't want nor need them, so remove them from the default list. """ # List of modules we will delete from the default list - dv_modules = [ - "LoKiPhys.decorators", - "LoKiArrayFunctors.decorators" - ] + dv_modules = ["LoKiPhys.decorators", "LoKiArrayFunctors.decorators"] from Configurables import LoKi__Hybrid__Tool factory = LoKi__Hybrid__Tool("HybridFactory") @@ -63,96 +66,119 @@ def patch_hybrid_tool(): @configurable def one_track_MVA( - preambulo=["from GaudiKernel.SystemOfUnits import GeV"], - code=require_all( - "TrCHI2PDOF < {max_trchi2dof}", - # "TrGHOSTPROB < {max_trgp}" - require_any( - require_all( - "TrPT > {max_pt}", - "TrMINIPCHI2 > {min_ipchi2}" - ), - require_all( - "in_range({min_pt}, TrPT, {max_pt})", - "log(TrMINIPCHI2) > ({param1} / ((TrPT / GeV - {param2}) ** 2) + " - "({param3} / {max_pt}) * ({max_pt} - TrPT) + " - "{log_min_ipchi2})" - ) - ) - ).format( - # TrackMVALoose cuts from ZombieMoore - max_trchi2dof=2.5, - max_trgp=0.2, - min_pt=2000, - max_pt=26000, - min_ipchi2=7.4, - # For some reason, having the `math.log` in the functor string - # itself gives a recursion error - log_min_ipchi2=math.log(7.4), - param1=1.0, - param2=2.0, - param3=1.248 - ), - make_input_tracks=make_param_forward_fitted_tracks, - make_pvs=make_pvs, + preambulo=["from GaudiKernel.SystemOfUnits import GeV"], + code=require_all( + "TrCHI2PDOF < {max_trchi2dof}", + # "TrGHOSTPROB < {max_trgp}" + require_any( + require_all("TrPT > {max_pt}", "TrMINIPCHI2 > {min_ipchi2}"), + require_all( + "in_range({min_pt}, TrPT, {max_pt})", + "log(TrMINIPCHI2) > ({param1} / ((TrPT / GeV - {param2}) ** 2) + " + "({param3} / {max_pt}) * ({max_pt} - TrPT) + " + "{log_min_ipchi2})"))). + format( + # TrackMVALoose cuts from ZombieMoore + max_trchi2dof=2.5, + max_trgp=0.2, + min_pt=2000, + max_pt=26000, + min_ipchi2=7.4, + # For some reason, having the `math.log` in the functor string + # itself gives a recursion error + log_min_ipchi2=math.log(7.4), + param1=1.0, + param2=2.0, + param3=1.248), + make_input_tracks=make_param_forward_fitted_tracks, + make_pvs=make_pvs, ): - return TrackV1FilterWithPVs(Preambulo=preambulo, - Code=code, - Input=make_input_tracks(), - InputVertices=make_pvs()).Output + return TrackV1FilterWithPVs( + Preambulo=preambulo, + Code=code, + Input=make_input_tracks(), + InputVertices=make_pvs()).Output + + +@configurable +def single_muon_line( + code='TrALL', + make_input_tracks=make_muonmatch_param_forward_fitted_tracks, + make_pvs=make_pvs): + + return TrackV1FilterWithPVs( + Code=code, Input=make_input_tracks(), InputVertices=make_pvs()).Output + + +@configurable +def dimuon_line( + daughter_cuts='TrALL', + CombinationCut=None, + VertexCut='VALL', + combiner_preamble=[ + "from LoKiPhys.decorators import RV_MASS, RV_PT, VCHI2PDOF, VX, VY" + ], + make_input_tracks=make_muonmatch_param_forward_fitted_tracks, + make_pvs=make_pvs): + + pvs = make_pvs() + + daughters = TrackV1FilterWithPVs( + Code=daughter_cuts, Input=make_input_tracks(), + InputVertices=pvs).Output + + return TrackCombinerWithPVs( + NBodies=2, + Preamble=combiner_preamble, + CombinationCut=CombinationCut, + VertexCut=VertexCut, + InputTracks=daughters, + InputVertices=pvs).OutputVertices @configurable def two_track_MVA( - daughter_cuts=require_all( - "TrPT > {min_track_pt}", - "TrP > {min_track_p}", - "TrCHI2PDOF < {max_track_chi2pdof}", - # "TrGHOSTPROB < {max_track_ghostprob}" - ).format( - min_track_pt=500, - min_track_p=3000, - max_track_chi2pdof=3, - max_track_ghostprob=0.2 - ), - CombinationCut=require_all( - "RV_TrNUM(TrMINIPCHI2 > {min_one_track_ipchi2}) > 0", - "RV_PT > {min_vertex_pt}" - ).format( - min_one_track_ipchi2=6, - min_vertex_pt=3000 - ), - VertexCut=require_all( - "VCHI2PDOF < {max_vertex_chi2pdof}" - ).format( - max_vertex_chi2pdof=16 - ), - combiner_preamble = [ - "from LoKiPhys.decorators import RV_TrNUM, RV_PT, VCHI2PDOF" - ], - make_input_tracks=make_param_forward_fitted_tracks, - make_pvs=make_pvs, + daughter_cuts=require_all( + "TrPT > {min_track_pt}", + "TrP > {min_track_p}", + "TrCHI2PDOF < {max_track_chi2pdof}", + # "TrGHOSTPROB < {max_track_ghostprob}" + ).format( + min_track_pt=500, + min_track_p=3000, + max_track_chi2pdof=3, + max_track_ghostprob=0.2), + CombinationCut=require_all( + "RV_TrNUM(TrMINIPCHI2 > {min_one_track_ipchi2}) > 0", + "RV_PT > {min_vertex_pt}").format( + min_one_track_ipchi2=6, min_vertex_pt=3000), + VertexCut=require_all("VCHI2PDOF < {max_vertex_chi2pdof}").format( + max_vertex_chi2pdof=16), + combiner_preamble=[ + "from LoKiPhys.decorators import RV_TrNUM, RV_PT, VCHI2PDOF" + ], + make_input_tracks=make_param_forward_fitted_tracks, + make_pvs=make_pvs, ): preambulo = ["from GaudiKernel.SystemOfUnits import GeV"] daughters = TrackV1FilterWithPVs( - Preambulo=preambulo, Code=daughter_cuts, - Input=make_input_tracks(), InputVertices=make_pvs()).Output + Preambulo=preambulo, + Code=daughter_cuts, + Input=make_input_tracks(), + InputVertices=make_pvs()).Output return TrackCombinerWithPVs( - NBodies=2, - Preamble=combiner_preamble, - CombinationCut=CombinationCut, - VertexCut=VertexCut, - InputTracks=daughters, - InputVertices=make_pvs() - ).OutputVertices - - + NBodies=2, + Preamble=combiner_preamble, + CombinationCut=CombinationCut, + VertexCut=VertexCut, + InputTracks=daughters, + InputVertices=make_pvs()).OutputVertices ftdec_v = 4 -with FTDecoding.bind(DecodingVersion = ftdec_v): +with FTDecoding.bind(DecodingVersion=ftdec_v): gec = gec(FTDecodingVersion=ftdec_v) @@ -161,9 +187,86 @@ with FTDecoding.bind(DecodingVersion = ftdec_v): one_track = one_track_MVA() two_track_filter = EmptyFilter(InputLocation=two_track_MVA()) - env = EverythingHandler(threadPoolSize = 5, nEventSlots = 5, evtMax = 1000, debug=True) - env.registerLine('one_track_mva', algs = [gec, NoPVFilter, make_param_forward_fitted_tracks()]) - # env.registerLine('two_track_mva', algs = [gec, NoPVFilter, two_track_filter]) + # Configure single muon and dimuon lines + single_muon_cuts = require_all( + 'TrPT > {min_pt}', + 'TrP > {min_p}', + 'TrCHI2PDOF < {max_chi2pdof}', + 'TrMINIPCHI2 > {min_ipchi2}', + ) + dimuon_lines_dc = single_muon_cuts + dimuon_lines_cc = require_all( + 'RV_PT > {min_vertex_pt}', + "RV_MASS('mu+', 'mu-') > {min_vertex_mass}", + ) + dimuon_lines_vc = require_all( + 'VCHI2PDOF < {max_vertex_chi2pdof}', + '(VX**2 + VY**2) > {min_vertex_rho2}', + ) + + single_muon = single_muon_line( + code=single_muon_cuts.format( + min_pt=1.5 * GeV, + min_p=3 * GeV, + min_ipchi2=0, + max_chi2pdof=3)) + + dimuon = dimuon_line( + daughter_cuts=dimuon_lines_dc.format( + min_pt=250 * MeV, + min_p=3 * GeV, + min_ipchi2=0, + max_chi2pdof=3), + CombinationCut=dimuon_lines_cc.format( + min_vertex_pt=0 * MeV, min_vertex_mass=220 * MeV), + VertexCut=dimuon_lines_vc.format( + max_vertex_chi2pdof=25, + min_vertex_rho2=0 * mm * mm, + )) + + with VeloUTTracking.bind( + name='PrVeloUTdetached', + minPT=80 * MeV, + minPTFinal=80 * MeV, + minMomentumFinal=2.5 * GeV): + with ForwardTracking.bind( + name='PrForwardTrackingDetached', MinPT=80, + Preselection=False): + with FilterIP.bind(name='PrFilterIPdetached', IPcut=10 * mm): + single_muon_detached = single_muon_line( + code=single_muon_cuts.format( + min_pt=80 * MeV, + min_p=3 * GeV, + min_ipchi2=100, + max_chi2pdof=3)) + with FilterIP.bind(name='PrFilterIPdetached', IPcut=0.4 * mm): + dimuon_detached = dimuon_line( + daughter_cuts=dimuon_lines_dc.format( + min_pt=80 * MeV, + min_p=3 * GeV, + min_ipchi2=9, + max_chi2pdof=4), + CombinationCut=dimuon_lines_cc.format( + min_vertex_pt=0 * MeV, min_vertex_mass=220 * MeV), + VertexCut=dimuon_lines_vc.format( + max_vertex_chi2pdof=25, + min_vertex_rho2=0 * mm * mm, + )) + + env = EverythingHandler( + threadPoolSize=5, nEventSlots=4, evtMax=1000, debug=True) + env.registerLine('one_track_mva', algs=[gec, NoPVFilter, one_track]) + env.registerLine('two_track_mva', algs=[gec, NoPVFilter, two_track_filter]) + env.registerLine('single_muon', algs=[gec, NoPVFilter, single_muon]) + env.registerLine( + 'single_muon_detached', algs=[gec, NoPVFilter, single_muon_detached]) + env.registerLine( + 'dimuon', algs=[gec, NoPVFilter, + EmptyFilter(InputLocation=dimuon)]) + env.registerLine( + 'dimuon_detached', + algs=[gec, NoPVFilter, + EmptyFilter(InputLocation=dimuon_detached)]) env.setupInputFromTestFileDB('MiniBrunel_2018_MinBias_FTv4_MDF') env.configureAllTheFlows() env.plotDataFlow() diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py b/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py index 2365e538bf7..852931df80d 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py @@ -9,15 +9,11 @@ # or submit itself to any jurisdiction. # ############################################################################### from __future__ import absolute_import, division, print_function -from PyConf.smart import ( - configurable -) +from PyConf.smart import (configurable) from Configurables import ( LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertex, - LHCb__Converters__Track__v1__fromV2TrackV1Track, - PrFilter__Track_v1, - TrackCombiner -) + LHCb__Converters__Track__v1__fromV2TrackV1Track, PrFilter__Track_v1, + TrackCombiner) from Hlt1Conf.reconstruction import ( make_param_forward_fitted_tracks, @@ -27,8 +23,7 @@ from Hlt1Conf.reconstruction import ( ) from PyConf.core import ( - Algorithm, -) + Algorithm, ) def require_all(*cuts): @@ -59,14 +54,15 @@ def TrackV1FilterWithPVs(Preambulo=[], **kwargs): return { "Preambulo": [ # TODO define special case for this preambulo shit # Redefine the functor to include the PV location - "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices) + "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices), + "TrMINIP = TrMINIP('{}')".format(InputVertices), ] + Preambulo, - "Input": Input + "Input": + Input } + return Algorithm( - PrFilter__Track_v1, - input_transform=__transform_inputs, - **kwargs) + PrFilter__Track_v1, input_transform=__transform_inputs, **kwargs) @configurable @@ -75,11 +71,11 @@ def TrackCombinerWithPVs(Preamble=[], **kwargs): return { "Preamble": [ # Redefine the functor to include the PV location - "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices) + "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices), + "TrMINIP = TrMINIP('{}')".format(InputVertices), ] + Preamble, - "InputTracks": InputTracks + "InputTracks": + InputTracks } - return Algorithm( - TrackCombiner, - input_transform=transform_inputs, - **kwargs) + + return Algorithm(TrackCombiner, input_transform=transform_inputs, **kwargs) diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py index 160ec1c32a4..d390513dbc3 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py @@ -9,49 +9,34 @@ # or submit itself to any jurisdiction. # ############################################################################### from __future__ import absolute_import, division, print_function -from PyConf.smart import ( - configurable -) +from PyConf.smart import (configurable) -from PyConf.core import ( - composable, - Algorithm, - force_location, - Tool -) +from PyConf.core import (composable, Algorithm, force_location, Tool) from Configurables import ( - VSPClus, - PrPixelTracking, - MakeSelection__Track_v2 as TrackSelection, - PrFilterIP__Track_v2__RecVertex_v2 as PrFilterIP, - PatPV3DFuture, - Gaudi__Hive__FetchDataFromFile, - LHCb__DetDesc__ReserveDetDescForEvent, - LHCb__Tests__FakeEventTimeProducer as DummyEventTime, - FTRawBankDecoder, - VSPClus, - PrGECFilter, - PrStoreUTHit, - PrStoreFTHit, - LoKi__VoidFilter, - PrVeloUT, - PrForwardTracking, - ParameterizedKalmanFit, - MakeSelection__Track_v1 as TrackV1Selection, + VSPClus, PrPixelTracking, MakeSelection__Track_v2 as TrackSelection, + PrFilterIP__Track_v2__RecVertex_v2 as PrFilterIP, PatPV3DFuture, + Gaudi__Hive__FetchDataFromFile, LHCb__DetDesc__ReserveDetDescForEvent, + LHCb__Tests__FakeEventTimeProducer as DummyEventTime, MuonMatchVeloUT, + MuonRawToHits, FTRawBankDecoder, VSPClus, PrGECFilter, PrStoreUTHit, + PrStoreFTHit, LoKi__VoidFilter, PrVeloUT, PrForwardTracking, + ParameterizedKalmanFit, MakeSelection__Track_v1 as TrackV1Selection, LHCb__Converters__Track__v1__fromV2TrackV1Track as fromV2TrackV1Track, - LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertex as fromVectorLHCbRecVertex -) + LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertex as + fromVectorLHCbRecVertex) from GaudiKernel.SystemOfUnits import mm, GeV, MeV + def __rawdata_transform_outputs(RawEvent): - return { "DataKeys" : [RawEvent] } + return {"DataKeys": [RawEvent]} + -RawData=composable(Gaudi__Hive__FetchDataFromFile, - outputs={'RawEvent': force_location('/Event/DAQ/RawEvent')}, - output_transform=__rawdata_transform_outputs, - require_IOVLock = False) +RawData = composable( + Gaudi__Hive__FetchDataFromFile, + outputs={'RawEvent': force_location('/Event/DAQ/RawEvent')}, + output_transform=__rawdata_transform_outputs, + require_IOVLock=False) VeloClustering = composable(VSPClus) @@ -60,11 +45,17 @@ SelTrackV1 = composable(TrackV1Selection) VeloTracking = composable( PrPixelTracking, defaults=dict( - HardFlagging=True, SkipLoopSens=True, MaxMissedOnTrack=2, MaxMissedConsecutive=1, - PhiWindow=2.5, PhiWindowExtrapolation=2.5, ModulesToSkip=[], EarlyKill3HitTracks=True, - UsePhiPerRegionsForward=False, BoostPhysics=False, AlgoConfig="ForwardThenBackward" - ) - ) + HardFlagging=True, + SkipLoopSens=True, + MaxMissedOnTrack=2, + MaxMissedConsecutive=1, + PhiWindow=2.5, + PhiWindowExtrapolation=2.5, + ModulesToSkip=[], + EarlyKill3HitTracks=True, + UsePhiPerRegionsForward=False, + BoostPhysics=False, + AlgoConfig="ForwardThenBackward")) PVFinding = composable( PatPV3DFuture, @@ -77,14 +68,17 @@ PVFinding = composable( V2TrackConvV1 = composable(fromV2TrackV1Track) V2VertexConvV1 = composable(fromVectorLHCbRecVertex) - UTDecoding = composable(PrStoreUTHit, defaults=dict(skipBanksWithErrors=True)) FTDecoding = composable(FTRawBankDecoder) +MuonDecoding = composable(MuonRawToHits) + StoreFT = composable(PrStoreFTHit) -VeloUTTracking = composable(PrVeloUT, defaults=dict(minPT= 300 * MeV)) +VeloUTTracking = composable(PrVeloUT, defaults=dict(minPT=300 * MeV)) + +MuonMatchVeloUTTracking = composable(MuonMatchVeloUT) ForwardTracking = composable( PrForwardTracking, @@ -98,87 +92,128 @@ ForwardTracking = composable( MaxXGap=1., SecondLoop=True)) -ParamForwardFit = composable(ParameterizedKalmanFit, defaults=dict(MaxNumOutlier=2)) +ParamForwardFit = composable( + ParameterizedKalmanFit, defaults=dict(MaxNumOutlier=2)) SelFromVector = composable(TrackSelection) FilterIP = composable(PrFilterIP) + def __emptyfilter_input_transform(InputLocation): - return {"Code" : "SIZE('{}')>0".format(InputLocation)} + return {"Code": "SIZE('{}')>0".format(InputLocation)} + + +EmptyFilter = composable( + LoKi__VoidFilter, input_transform=__emptyfilter_input_transform) -EmptyFilter = composable(LoKi__VoidFilter, input_transform = __emptyfilter_input_transform) ### maker functions @configurable def gec(raw=RawData, FTDecodingVersion=None, **kwargs): # TODO use FTDecodingVersion=smart.REQUIRED above cut = 9750 if FTDecodingVersion == 4 else 11000 - props = dict(NumberFTUTClusters=cut, **kwargs) # kwargs take precedence - return Algorithm(PrGECFilter, RawEventLocations = raw().RawEvent, **props) + props = dict(NumberFTUTClusters=cut, **kwargs) # kwargs take precedence + return Algorithm(PrGECFilter, RawEventLocations=raw().RawEvent, **props) + @configurable -def make_velo_clusters(raw = RawData): +def make_velo_clusters(raw=RawData): return VeloClustering(RawEventLocation=raw().RawEvent).ClusterLocation + @configurable -def make_velo_cluster_offsets(raw = RawData): +def make_velo_cluster_offsets(raw=RawData): return VeloClustering(RawEventLocation=raw().RawEvent).ClusterOffsets + @configurable def make_velo_tracks(make_clusters=make_velo_clusters, make_cluster_offsets=make_velo_cluster_offsets, - convertToSelection = True): + convertToSelection=True): clusters = make_clusters() offsets = make_cluster_offsets() - tracks = VeloTracking(ClusterLocation = clusters, - ClusterOffsets = offsets).OutputTracksName + tracks = VeloTracking( + ClusterLocation=clusters, ClusterOffsets=offsets).OutputTracksName if not convertToSelection: return tracks - return SelFromVector(Input = tracks).Output + return SelFromVector(Input=tracks).Output + @configurable def make_keyed_velo_tracks(make_velo_tracks=make_velo_tracks): - return V2TrackConvV1(InputTracksName=make_velo_tracks(convertToSelection=False)).OutputTracksName + return V2TrackConvV1( + InputTracksName=make_velo_tracks( + convertToSelection=False)).OutputTracksName + @configurable -def make_pvs(make_velo_tracks=make_velo_tracks, needConvertedTracks = False): - tracks = make_velo_tracks(convertToSelection = needConvertedTracks) - return PVFinding(InputTracks = tracks, name = "WURST").OutputVerticesName +def make_pvs(make_velo_tracks=make_velo_tracks, needConvertedTracks=False): + tracks = make_velo_tracks(convertToSelection=needConvertedTracks) + return PVFinding(InputTracks=tracks, name="WURST").OutputVerticesName + @configurable -def make_V1_pvs(make_keyed_velo_tracks=make_keyed_velo_tracks, make_pvs=make_pvs): - return V2VertexConvV1(InputVerticesName=make_pvs(), - InputTracksName=make_keyed_velo_tracks()).OutputVerticesName +def make_V1_pvs(make_keyed_velo_tracks=make_keyed_velo_tracks, + make_pvs=make_pvs): + return V2VertexConvV1( + InputVerticesName=make_pvs(), + InputTracksName=make_keyed_velo_tracks()).OutputVerticesName + @configurable def FilterEmptyPVs(make_pvs=make_pvs): return EmptyFilter(InputLocation=make_pvs()) + +@configurable +def make_IPselectedTracks(make_tracks=make_velo_tracks, + make_pvs=make_pvs, + ip_cut=0.1 * mm): + return FilterIP( + IPcut=ip_cut, Input=make_tracks(), InputVertices=make_pvs()).Output + + @configurable -def make_IPselectedTracks(make_tracks=make_velo_tracks, make_pvs=make_pvs, ip_cut=0.1*mm): - return FilterIP(IPcut=ip_cut, - Input=make_tracks(), - InputVertices=make_pvs()).Output +def make_Muon_hits(raw=RawData): + return MuonDecoding(RawEventLocation=raw().RawEvent).HitContainer + @configurable -def make_UT_clusters(raw = RawData): +def make_UT_clusters(raw=RawData): return UTDecoding(RawEventLocations=raw().RawEvent).UTHitsLocation + @configurable def make_VeloUT_tracks(make_velo_tracks=make_IPselectedTracks, make_ut_clusters=make_UT_clusters, convertToSelection=True): - ut_tracks = VeloUTTracking(InputTracksName=make_velo_tracks(), - UTHits=make_ut_clusters()).OutputTracksName + ut_tracks = VeloUTTracking( + InputTracksName=make_velo_tracks(), + UTHits=make_ut_clusters()).OutputTracksName if not convertToSelection: return ut_tracks - return SelFromVector(Input = ut_tracks).Output + return SelFromVector(Input=ut_tracks).Output + + +@configurable +def make_muonmatchvelout_tracks(make_velout_tracks=make_VeloUT_tracks, + make_muon_hits=make_Muon_hits, + convertToSelection=True): + + tracks = MuonMatchVeloUTTracking( + InputTracks=make_velout_tracks(), + InputMuonHits=make_muon_hits()).OutputTracks + if not convertToSelection: + return tracks + return SelFromVector(Input=tracks).Output + @configurable def make_ft_clusters(raw=RawData): - ft_clusters = FTDecoding(RawEventLocations = raw().RawEvent).OutputLocation - return StoreFT(InputLocation = ft_clusters).FTHitsLocation + ft_clusters = FTDecoding(RawEventLocations=raw().RawEvent).OutputLocation + return StoreFT(InputLocation=ft_clusters).FTHitsLocation + @configurable def make_forward_tracks(make_clusters=make_ft_clusters, @@ -186,12 +221,27 @@ def make_forward_tracks(make_clusters=make_ft_clusters, make_ut_hits=make_UT_clusters): from Configurables import PrAddUTHitsTool - uthitstool = Tool(PrAddUTHitsTool, UTHitsLocation = make_UT_clusters()) - return ForwardTracking(FTHitsLocation = make_clusters(), - InputName = make_tracks(), - AddUTHitsToolName = uthitstool).OutputName - # ).OutputName - # tool is set into a private context here + uthitstool = Tool(PrAddUTHitsTool, UTHitsLocation=make_UT_clusters()) + return ForwardTracking( + FTHitsLocation=make_clusters(), + InputName=make_tracks(), + AddUTHitsToolName=uthitstool).OutputName + # ).OutputName + # tool is set into a private context here + + +@configurable +def make_muonmatch_forward_tracks(make_clusters=make_ft_clusters, + make_tracks=make_muonmatchvelout_tracks, + make_ut_hits=make_UT_clusters): + + from Configurables import PrAddUTHitsTool + uthitstool = Tool(PrAddUTHitsTool, UTHitsLocation=make_ut_hits()) + return ForwardTracking( + FTHitsLocation=make_clusters(), + InputName=make_tracks(), + AddUTHitsToolName=uthitstool).OutputName + @configurable def make_param_forward_fitted_tracks(make_tracks=make_forward_tracks, @@ -199,15 +249,37 @@ def make_param_forward_fitted_tracks(make_tracks=make_forward_tracks, from Configurables import TrackMasterExtrapolator, SimplifiedMaterialLocator materiallocator = Tool(SimplifiedMaterialLocator) - extrapolator = Tool(TrackMasterExtrapolator, - MaterialLocator=materiallocator, - ApplyMultScattCorr = True, - ApplyEnergyLossCorr = False, - ApplyElectronEnergyLossCorr = True) - - fitted_tracks = ParamForwardFit(InputName = make_tracks(), - Extrapolator = extrapolator).OutputName + extrapolator = Tool( + TrackMasterExtrapolator, + MaterialLocator=materiallocator, + ApplyMultScattCorr=True, + ApplyEnergyLossCorr=False, + ApplyElectronEnergyLossCorr=True) + + fitted_tracks = ParamForwardFit( + InputName=make_tracks(), Extrapolator=extrapolator).OutputName # fitted_tracks = ParamForwardFit(InputName = make_tracks()).OutputName if not convertToSelection: return fitted_tracks - return SelTrackV1(Input = fitted_tracks).Output + return SelTrackV1(Input=fitted_tracks).Output + + +@configurable +def make_muonmatch_param_forward_fitted_tracks( + make_tracks=make_muonmatch_forward_tracks, convertToSelection=True): + + from Configurables import TrackMasterExtrapolator, SimplifiedMaterialLocator + materiallocator = Tool(SimplifiedMaterialLocator) + extrapolator = Tool( + TrackMasterExtrapolator, + MaterialLocator=materiallocator, + ApplyMultScattCorr=True, + ApplyEnergyLossCorr=False, + ApplyElectronEnergyLossCorr=True) + + fitted_tracks = ParamForwardFit( + InputName=make_tracks(), Extrapolator=extrapolator).OutputName + + if not convertToSelection: + return fitted_tracks + return SelTrackV1(Input=fitted_tracks).Output -- GitLab From b3efebed09e7aeff310c867510f90d88cc090847 Mon Sep 17 00:00:00 2001 From: Miguel Ramos Pernas Date: Thu, 23 May 2019 18:28:15 +0200 Subject: [PATCH 2/8] Remove avoidable muonmatch configurables --- Hlt/Hlt1Conf/options/with_lines.py | 140 ++++++++++-------- .../python/Hlt1Conf/reconstruction.py | 34 ----- 2 files changed, 80 insertions(+), 94 deletions(-) diff --git a/Hlt/Hlt1Conf/options/with_lines.py b/Hlt/Hlt1Conf/options/with_lines.py index ee5cdd2db7b..07cd9f30586 100644 --- a/Hlt/Hlt1Conf/options/with_lines.py +++ b/Hlt/Hlt1Conf/options/with_lines.py @@ -10,6 +10,9 @@ ############################################################################### from __future__ import absolute_import, division, print_function import math +from collections import namedtuple + +InputSample = namedtuple('InputSample', ['tfdb', 'ftdec_v', 'multi_threading']) from GaudiKernel.SystemOfUnits import mm, MeV, GeV @@ -29,7 +32,8 @@ from Hlt1Conf.reconstruction import ( FilterIP, FTDecoding, make_forward_tracks, - make_muonmatch_param_forward_fitted_tracks, + make_muonmatchvelout_tracks, + make_forward_tracks, make_param_forward_fitted_tracks, make_pvs, EmptyFilter, @@ -103,7 +107,7 @@ def one_track_MVA( @configurable def single_muon_line( code='TrALL', - make_input_tracks=make_muonmatch_param_forward_fitted_tracks, + make_input_tracks=make_param_forward_fitted_tracks, make_pvs=make_pvs): return TrackV1FilterWithPVs( @@ -118,7 +122,7 @@ def dimuon_line( combiner_preamble=[ "from LoKiPhys.decorators import RV_MASS, RV_PT, VCHI2PDOF, VX, VY" ], - make_input_tracks=make_muonmatch_param_forward_fitted_tracks, + make_input_tracks=make_param_forward_fitted_tracks, make_pvs=make_pvs): pvs = make_pvs() @@ -177,17 +181,21 @@ def two_track_MVA( InputVertices=make_pvs()).OutputVertices -ftdec_v = 4 -with FTDecoding.bind(DecodingVersion=ftdec_v): +sample = InputSample('MiniBrunel_2018_MinBias_FTv4_MDF', ftdec_v=4, multi_threading=True) +#sample = InputSample('upgrade-magup-sim10-up01-34112106-xdigi', ftdec_v=6, multi_threading=False) KS0 -> mu+ mu- upgrade MC + +with FTDecoding.bind(DecodingVersion=sample.ftdec_v): - gec = gec(FTDecodingVersion=ftdec_v) + gec = gec(FTDecodingVersion=sample.ftdec_v) NoPVFilter = FilterEmptyPVs() one_track = one_track_MVA() two_track_filter = EmptyFilter(InputLocation=two_track_MVA()) - # Configure single muon and dimuon lines + # + # Configuration of muon lines + # single_muon_cuts = require_all( 'TrPT > {min_pt}', 'TrP > {min_p}', @@ -204,57 +212,68 @@ with FTDecoding.bind(DecodingVersion=ftdec_v): '(VX**2 + VY**2) > {min_vertex_rho2}', ) - single_muon = single_muon_line( - code=single_muon_cuts.format( - min_pt=1.5 * GeV, - min_p=3 * GeV, - min_ipchi2=0, - max_chi2pdof=3)) - - dimuon = dimuon_line( - daughter_cuts=dimuon_lines_dc.format( - min_pt=250 * MeV, - min_p=3 * GeV, - min_ipchi2=0, - max_chi2pdof=3), - CombinationCut=dimuon_lines_cc.format( - min_vertex_pt=0 * MeV, min_vertex_mass=220 * MeV), - VertexCut=dimuon_lines_vc.format( - max_vertex_chi2pdof=25, - min_vertex_rho2=0 * mm * mm, - )) - - with VeloUTTracking.bind( - name='PrVeloUTdetached', - minPT=80 * MeV, - minPTFinal=80 * MeV, - minMomentumFinal=2.5 * GeV): - with ForwardTracking.bind( - name='PrForwardTrackingDetached', MinPT=80, - Preselection=False): - with FilterIP.bind(name='PrFilterIPdetached', IPcut=10 * mm): - single_muon_detached = single_muon_line( - code=single_muon_cuts.format( - min_pt=80 * MeV, - min_p=3 * GeV, - min_ipchi2=100, - max_chi2pdof=3)) - with FilterIP.bind(name='PrFilterIPdetached', IPcut=0.4 * mm): - dimuon_detached = dimuon_line( - daughter_cuts=dimuon_lines_dc.format( - min_pt=80 * MeV, - min_p=3 * GeV, - min_ipchi2=9, - max_chi2pdof=4), - CombinationCut=dimuon_lines_cc.format( - min_vertex_pt=0 * MeV, min_vertex_mass=220 * MeV), - VertexCut=dimuon_lines_vc.format( - max_vertex_chi2pdof=25, - min_vertex_rho2=0 * mm * mm, - )) - - env = EverythingHandler( - threadPoolSize=5, nEventSlots=4, evtMax=1000, debug=True) + with make_forward_tracks.bind(make_tracks=make_muonmatchvelout_tracks): + + single_muon = single_muon_line( + code=single_muon_cuts.format( + min_pt=1.5 * GeV, + min_p=3 * GeV, + min_ipchi2=0, + max_chi2pdof=3)) + + dimuon = dimuon_line( + daughter_cuts=dimuon_lines_dc.format( + min_pt=250 * MeV, + min_p=3 * GeV, + min_ipchi2=0, + max_chi2pdof=3), + CombinationCut=dimuon_lines_cc.format( + min_vertex_pt=0 * MeV, + min_vertex_mass=220 * MeV), + VertexCut=dimuon_lines_vc.format( + max_vertex_chi2pdof=25, + min_vertex_rho2=0 * mm * mm, + )) + + with VeloUTTracking.bind( + name='PrVeloUT_Detached', + minPT=80 * MeV, + minPTFinal=80 * MeV, + minMomentumFinal=2.5 * GeV): + with ForwardTracking.bind( + name='PrForwardTrackingDetached', MinPT=80, + Preselection=False): + with FilterIP.bind(name='FilterIP_SingleMuonDetached', IPcut=10 * mm): + single_muon_detached = single_muon_line( + code=single_muon_cuts.format( + min_pt=80 * MeV, + min_p=3 * GeV, + min_ipchi2=100, + max_chi2pdof=3)) + with FilterIP.bind(name='FilterIP_DiMuonDetached', IPcut=0.4 * mm): + dimuon_detached = dimuon_line( + daughter_cuts=dimuon_lines_dc.format( + min_pt=80 * MeV, + min_p=3 * GeV, + min_ipchi2=9, + max_chi2pdof=4), + CombinationCut=dimuon_lines_cc.format( + min_vertex_pt=0 * MeV, + min_vertex_mass=220 * MeV), + VertexCut=dimuon_lines_vc.format( + max_vertex_chi2pdof=25, + min_vertex_rho2=0 * mm * mm, + )) + + # + # Register the lines + # + if sample.multi_threading: + mt_opts=dict(threadPoolSize=5, nEventSlots=4) + else: + mt_opts=dict(threadPoolSize=1, nEventSlots=1) + + env = EverythingHandler(evtMax=1000, debug=True, **mt_opts) env.registerLine('one_track_mva', algs=[gec, NoPVFilter, one_track]) env.registerLine('two_track_mva', algs=[gec, NoPVFilter, two_track_filter]) env.registerLine('single_muon', algs=[gec, NoPVFilter, single_muon]) @@ -267,8 +286,9 @@ with FTDecoding.bind(DecodingVersion=ftdec_v): 'dimuon_detached', algs=[gec, NoPVFilter, EmptyFilter(InputLocation=dimuon_detached)]) - env.setupInputFromTestFileDB('MiniBrunel_2018_MinBias_FTv4_MDF') + + env.setupInputFromTestFileDB(sample.tfdb) env.configureAllTheFlows() - env.plotDataFlow() + #env.plotDataFlow() # only if you have graphivz available patch_hybrid_tool() diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py index d390513dbc3..5654db69e94 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py @@ -230,19 +230,6 @@ def make_forward_tracks(make_clusters=make_ft_clusters, # tool is set into a private context here -@configurable -def make_muonmatch_forward_tracks(make_clusters=make_ft_clusters, - make_tracks=make_muonmatchvelout_tracks, - make_ut_hits=make_UT_clusters): - - from Configurables import PrAddUTHitsTool - uthitstool = Tool(PrAddUTHitsTool, UTHitsLocation=make_ut_hits()) - return ForwardTracking( - FTHitsLocation=make_clusters(), - InputName=make_tracks(), - AddUTHitsToolName=uthitstool).OutputName - - @configurable def make_param_forward_fitted_tracks(make_tracks=make_forward_tracks, convertToSelection=True): @@ -262,24 +249,3 @@ def make_param_forward_fitted_tracks(make_tracks=make_forward_tracks, if not convertToSelection: return fitted_tracks return SelTrackV1(Input=fitted_tracks).Output - - -@configurable -def make_muonmatch_param_forward_fitted_tracks( - make_tracks=make_muonmatch_forward_tracks, convertToSelection=True): - - from Configurables import TrackMasterExtrapolator, SimplifiedMaterialLocator - materiallocator = Tool(SimplifiedMaterialLocator) - extrapolator = Tool( - TrackMasterExtrapolator, - MaterialLocator=materiallocator, - ApplyMultScattCorr=True, - ApplyEnergyLossCorr=False, - ApplyElectronEnergyLossCorr=True) - - fitted_tracks = ParamForwardFit( - InputName=make_tracks(), Extrapolator=extrapolator).OutputName - - if not convertToSelection: - return fitted_tracks - return SelTrackV1(Input=fitted_tracks).Output -- GitLab From 6db6735bbfb7602b0c54b647eaedb89df756b966 Mon Sep 17 00:00:00 2001 From: Miguel Ramos Pernas Date: Thu, 23 May 2019 18:31:27 +0200 Subject: [PATCH 3/8] Fix comment --- Hlt/Hlt1Conf/options/with_lines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hlt/Hlt1Conf/options/with_lines.py b/Hlt/Hlt1Conf/options/with_lines.py index 07cd9f30586..77d41b0370d 100644 --- a/Hlt/Hlt1Conf/options/with_lines.py +++ b/Hlt/Hlt1Conf/options/with_lines.py @@ -182,7 +182,7 @@ def two_track_MVA( sample = InputSample('MiniBrunel_2018_MinBias_FTv4_MDF', ftdec_v=4, multi_threading=True) -#sample = InputSample('upgrade-magup-sim10-up01-34112106-xdigi', ftdec_v=6, multi_threading=False) KS0 -> mu+ mu- upgrade MC +#sample = InputSample('upgrade-magup-sim10-up01-34112106-xdigi', ftdec_v=6, multi_threading=False) # KS0 -> mu+ mu- upgrade MC with FTDecoding.bind(DecodingVersion=sample.ftdec_v): -- GitLab From d135562f7019bc7ea5c8cb5457eb91459010c8f6 Mon Sep 17 00:00:00 2001 From: Miguel Ramos Pernas Date: Sat, 1 Jun 2019 20:26:22 +0200 Subject: [PATCH 4/8] Remove IP functor --- Hlt/Hlt1Conf/python/Hlt1Conf/lines.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py b/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py index 852931df80d..48344870736 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py @@ -55,7 +55,6 @@ def TrackV1FilterWithPVs(Preambulo=[], **kwargs): "Preambulo": [ # TODO define special case for this preambulo shit # Redefine the functor to include the PV location "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices), - "TrMINIP = TrMINIP('{}')".format(InputVertices), ] + Preambulo, "Input": Input @@ -72,7 +71,6 @@ def TrackCombinerWithPVs(Preamble=[], **kwargs): "Preamble": [ # Redefine the functor to include the PV location "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices), - "TrMINIP = TrMINIP('{}')".format(InputVertices), ] + Preamble, "InputTracks": InputTracks -- GitLab From 1fab9c8fdce9d324ee0be84563d675c37047ba43 Mon Sep 17 00:00:00 2001 From: Miguel Ramos Pernas Date: Mon, 3 Jun 2019 17:24:51 +0200 Subject: [PATCH 5/8] Revert formatting --- Hlt/Hlt1Conf/options/with_lines.py | 144 +++++++------ Hlt/Hlt1Conf/python/Hlt1Conf/lines.py | 34 ++-- .../python/Hlt1Conf/reconstruction.py | 190 ++++++++---------- 3 files changed, 186 insertions(+), 182 deletions(-) diff --git a/Hlt/Hlt1Conf/options/with_lines.py b/Hlt/Hlt1Conf/options/with_lines.py index c4f1021d44a..5e98de299b5 100644 --- a/Hlt/Hlt1Conf/options/with_lines.py +++ b/Hlt/Hlt1Conf/options/with_lines.py @@ -17,7 +17,8 @@ InputSample = namedtuple('InputSample', ['tfdb', 'ftdec_v', 'multi_threading']) from GaudiKernel.SystemOfUnits import mm, MeV, GeV from PyConf.smart import ( - configurable, ) + configurable, +) from Hlt1Conf.lines import ( require_all, require_any, @@ -46,7 +47,6 @@ from PyConf.core import ( EverythingHandler, ) - def patch_hybrid_tool(): """Remove Hybrid modules that require a DVAlgorithm. @@ -55,7 +55,10 @@ def patch_hybrid_tool(): we don't want nor need them, so remove them from the default list. """ # List of modules we will delete from the default list - dv_modules = ["LoKiPhys.decorators", "LoKiArrayFunctors.decorators"] + dv_modules = [ + "LoKiPhys.decorators", + "LoKiArrayFunctors.decorators" + ] from Configurables import LoKi__Hybrid__Tool factory = LoKi__Hybrid__Tool("HybridFactory") @@ -70,38 +73,43 @@ def patch_hybrid_tool(): @configurable def one_track_MVA( - preambulo=["from GaudiKernel.SystemOfUnits import GeV"], - code=require_all( - "TrCHI2PDOF < {max_trchi2dof}", - # "TrGHOSTPROB < {max_trgp}" - require_any( - require_all("TrPT > {max_pt}", "TrMINIPCHI2 > {min_ipchi2}"), - require_all( - "in_range({min_pt}, TrPT, {max_pt})", - "log(TrMINIPCHI2) > ({param1} / ((TrPT / GeV - {param2}) ** 2) + " - "({param3} / {max_pt}) * ({max_pt} - TrPT) + " - "{log_min_ipchi2})"))). - format( - # TrackMVALoose cuts from ZombieMoore - max_trchi2dof=2.5, - max_trgp=0.2, - min_pt=2000, - max_pt=26000, - min_ipchi2=7.4, - # For some reason, having the `math.log` in the functor string - # itself gives a recursion error - log_min_ipchi2=math.log(7.4), - param1=1.0, - param2=2.0, - param3=1.248), - make_input_tracks=make_param_forward_fitted_tracks, - make_pvs=make_pvs, + preambulo=["from GaudiKernel.SystemOfUnits import GeV"], + code=require_all( + "TrCHI2PDOF < {max_trchi2dof}", + # "TrGHOSTPROB < {max_trgp}" + require_any( + require_all( + "TrPT > {max_pt}", + "TrMINIPCHI2 > {min_ipchi2}" + ), + require_all( + "in_range({min_pt}, TrPT, {max_pt})", + "log(TrMINIPCHI2) > ({param1} / ((TrPT / GeV - {param2}) ** 2) + " + "({param3} / {max_pt}) * ({max_pt} - TrPT) + " + "{log_min_ipchi2})" + ) + ) + ).format( + # TrackMVALoose cuts from ZombieMoore + max_trchi2dof=2.5, + max_trgp=0.2, + min_pt=2000, + max_pt=26000, + min_ipchi2=7.4, + # For some reason, having the `math.log` in the functor string + # itself gives a recursion error + log_min_ipchi2=math.log(7.4), + param1=1.0, + param2=2.0, + param3=1.248 + ), + make_input_tracks=make_param_forward_fitted_tracks, + make_pvs=make_pvs, ): - return TrackV1FilterWithPVs( - Preambulo=preambulo, - Code=code, - Input=make_input_tracks(), - InputVertices=make_pvs()).Output + return TrackV1FilterWithPVs(Preambulo=preambulo, + Code=code, + Input=make_input_tracks(), + InputVertices=make_pvs()).Output @configurable @@ -142,43 +150,49 @@ def dimuon_line( @configurable def two_track_MVA( - daughter_cuts=require_all( - "TrPT > {min_track_pt}", - "TrP > {min_track_p}", - "TrCHI2PDOF < {max_track_chi2pdof}", - # "TrGHOSTPROB < {max_track_ghostprob}" - ).format( - min_track_pt=500, - min_track_p=3000, - max_track_chi2pdof=3, - max_track_ghostprob=0.2), - CombinationCut=require_all( - "RV_TrNUM(TrMINIPCHI2 > {min_one_track_ipchi2}) > 0", - "RV_PT > {min_vertex_pt}").format( - min_one_track_ipchi2=6, min_vertex_pt=3000), - VertexCut=require_all("VCHI2PDOF < {max_vertex_chi2pdof}").format( - max_vertex_chi2pdof=16), - combiner_preamble=[ - "from LoKiPhys.decorators import RV_TrNUM, RV_PT, VCHI2PDOF" - ], - make_input_tracks=make_param_forward_fitted_tracks, - make_pvs=make_pvs, + daughter_cuts=require_all( + "TrPT > {min_track_pt}", + "TrP > {min_track_p}", + "TrCHI2PDOF < {max_track_chi2pdof}", + # "TrGHOSTPROB < {max_track_ghostprob}" + ).format( + min_track_pt=500, + min_track_p=3000, + max_track_chi2pdof=3, + max_track_ghostprob=0.2 + ), + CombinationCut=require_all( + "RV_TrNUM(TrMINIPCHI2 > {min_one_track_ipchi2}) > 0", + "RV_PT > {min_vertex_pt}" + ).format( + min_one_track_ipchi2=6, + min_vertex_pt=3000 + ), + VertexCut=require_all( + "VCHI2PDOF < {max_vertex_chi2pdof}" + ).format( + max_vertex_chi2pdof=16 + ), + combiner_preamble = [ + "from LoKiPhys.decorators import RV_TrNUM, RV_PT, VCHI2PDOF" + ], + make_input_tracks=make_param_forward_fitted_tracks, + make_pvs=make_pvs, ): preambulo = ["from GaudiKernel.SystemOfUnits import GeV"] daughters = TrackV1FilterWithPVs( - Preambulo=preambulo, - Code=daughter_cuts, - Input=make_input_tracks(), - InputVertices=make_pvs()).Output + Preambulo=preambulo, Code=daughter_cuts, + Input=make_input_tracks(), InputVertices=make_pvs()).Output return TrackCombinerWithPVs( - NBodies=2, - Preamble=combiner_preamble, - CombinationCut=CombinationCut, - VertexCut=VertexCut, - InputTracks=daughters, - InputVertices=make_pvs()).OutputVertices + NBodies=2, + Preamble=combiner_preamble, + CombinationCut=CombinationCut, + VertexCut=VertexCut, + InputTracks=daughters, + InputVertices=make_pvs() + ).OutputVertices sample = InputSample('MiniBrunel_2018_MinBias_FTv4_MDF', ftdec_v=4, multi_threading=True) diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py b/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py index 48344870736..2365e538bf7 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/lines.py @@ -9,11 +9,15 @@ # or submit itself to any jurisdiction. # ############################################################################### from __future__ import absolute_import, division, print_function -from PyConf.smart import (configurable) +from PyConf.smart import ( + configurable +) from Configurables import ( LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertex, - LHCb__Converters__Track__v1__fromV2TrackV1Track, PrFilter__Track_v1, - TrackCombiner) + LHCb__Converters__Track__v1__fromV2TrackV1Track, + PrFilter__Track_v1, + TrackCombiner +) from Hlt1Conf.reconstruction import ( make_param_forward_fitted_tracks, @@ -23,7 +27,8 @@ from Hlt1Conf.reconstruction import ( ) from PyConf.core import ( - Algorithm, ) + Algorithm, +) def require_all(*cuts): @@ -54,14 +59,14 @@ def TrackV1FilterWithPVs(Preambulo=[], **kwargs): return { "Preambulo": [ # TODO define special case for this preambulo shit # Redefine the functor to include the PV location - "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices), + "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices) ] + Preambulo, - "Input": - Input + "Input": Input } - return Algorithm( - PrFilter__Track_v1, input_transform=__transform_inputs, **kwargs) + PrFilter__Track_v1, + input_transform=__transform_inputs, + **kwargs) @configurable @@ -70,10 +75,11 @@ def TrackCombinerWithPVs(Preamble=[], **kwargs): return { "Preamble": [ # Redefine the functor to include the PV location - "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices), + "TrMINIPCHI2 = TrMINIPCHI2('{}')".format(InputVertices) ] + Preamble, - "InputTracks": - InputTracks + "InputTracks": InputTracks } - - return Algorithm(TrackCombiner, input_transform=transform_inputs, **kwargs) + return Algorithm( + TrackCombiner, + input_transform=transform_inputs, + **kwargs) diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py index 5654db69e94..a47549bd920 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py @@ -9,34 +9,51 @@ # or submit itself to any jurisdiction. # ############################################################################### from __future__ import absolute_import, division, print_function -from PyConf.smart import (configurable) +from PyConf.smart import ( + configurable +) -from PyConf.core import (composable, Algorithm, force_location, Tool) +from PyConf.core import ( + composable, + Algorithm, + force_location, + Tool +) from Configurables import ( - VSPClus, PrPixelTracking, MakeSelection__Track_v2 as TrackSelection, - PrFilterIP__Track_v2__RecVertex_v2 as PrFilterIP, PatPV3DFuture, - Gaudi__Hive__FetchDataFromFile, LHCb__DetDesc__ReserveDetDescForEvent, - LHCb__Tests__FakeEventTimeProducer as DummyEventTime, MuonMatchVeloUT, - MuonRawToHits, FTRawBankDecoder, VSPClus, PrGECFilter, PrStoreUTHit, - PrStoreFTHit, LoKi__VoidFilter, PrVeloUT, PrForwardTracking, - ParameterizedKalmanFit, MakeSelection__Track_v1 as TrackV1Selection, + VSPClus, + PrPixelTracking, + MakeSelection__Track_v2 as TrackSelection, + PrFilterIP__Track_v2__RecVertex_v2 as PrFilterIP, + PatPV3DFuture, + Gaudi__Hive__FetchDataFromFile, + LHCb__DetDesc__ReserveDetDescForEvent, + LHCb__Tests__FakeEventTimeProducer as DummyEventTime, + MuonMatchVeloUT, + MuonRawToHits, + FTRawBankDecoder, + VSPClus, + PrGECFilter, + PrStoreUTHit, + PrStoreFTHit, + LoKi__VoidFilter, + PrVeloUT, + PrForwardTracking, + ParameterizedKalmanFit, + MakeSelection__Track_v1 as TrackV1Selection, LHCb__Converters__Track__v1__fromV2TrackV1Track as fromV2TrackV1Track, - LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertex as - fromVectorLHCbRecVertex) + LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertex as fromVectorLHCbRecVertex +) from GaudiKernel.SystemOfUnits import mm, GeV, MeV - def __rawdata_transform_outputs(RawEvent): - return {"DataKeys": [RawEvent]} - + return { "DataKeys" : [RawEvent] } -RawData = composable( - Gaudi__Hive__FetchDataFromFile, - outputs={'RawEvent': force_location('/Event/DAQ/RawEvent')}, - output_transform=__rawdata_transform_outputs, - require_IOVLock=False) +RawData=composable(Gaudi__Hive__FetchDataFromFile, + outputs={'RawEvent': force_location('/Event/DAQ/RawEvent')}, + output_transform=__rawdata_transform_outputs, + require_IOVLock = False) VeloClustering = composable(VSPClus) @@ -45,17 +62,11 @@ SelTrackV1 = composable(TrackV1Selection) VeloTracking = composable( PrPixelTracking, defaults=dict( - HardFlagging=True, - SkipLoopSens=True, - MaxMissedOnTrack=2, - MaxMissedConsecutive=1, - PhiWindow=2.5, - PhiWindowExtrapolation=2.5, - ModulesToSkip=[], - EarlyKill3HitTracks=True, - UsePhiPerRegionsForward=False, - BoostPhysics=False, - AlgoConfig="ForwardThenBackward")) + HardFlagging=True, SkipLoopSens=True, MaxMissedOnTrack=2, MaxMissedConsecutive=1, + PhiWindow=2.5, PhiWindowExtrapolation=2.5, ModulesToSkip=[], EarlyKill3HitTracks=True, + UsePhiPerRegionsForward=False, BoostPhysics=False, AlgoConfig="ForwardThenBackward" + ) + ) PVFinding = composable( PatPV3DFuture, @@ -68,6 +79,7 @@ PVFinding = composable( V2TrackConvV1 = composable(fromV2TrackV1Track) V2VertexConvV1 = composable(fromVectorLHCbRecVertex) + UTDecoding = composable(PrStoreUTHit, defaults=dict(skipBanksWithErrors=True)) FTDecoding = composable(FTRawBankDecoder) @@ -76,7 +88,7 @@ MuonDecoding = composable(MuonRawToHits) StoreFT = composable(PrStoreFTHit) -VeloUTTracking = composable(PrVeloUT, defaults=dict(minPT=300 * MeV)) +VeloUTTracking = composable(PrVeloUT, defaults=dict(minPT= 300 * MeV)) MuonMatchVeloUTTracking = composable(MuonMatchVeloUT) @@ -92,109 +104,86 @@ ForwardTracking = composable( MaxXGap=1., SecondLoop=True)) -ParamForwardFit = composable( - ParameterizedKalmanFit, defaults=dict(MaxNumOutlier=2)) +ParamForwardFit = composable(ParameterizedKalmanFit, defaults=dict(MaxNumOutlier=2)) SelFromVector = composable(TrackSelection) FilterIP = composable(PrFilterIP) - def __emptyfilter_input_transform(InputLocation): - return {"Code": "SIZE('{}')>0".format(InputLocation)} - - -EmptyFilter = composable( - LoKi__VoidFilter, input_transform=__emptyfilter_input_transform) + return {"Code" : "SIZE('{}')>0".format(InputLocation)} +EmptyFilter = composable(LoKi__VoidFilter, input_transform = __emptyfilter_input_transform) ### maker functions @configurable def gec(raw=RawData, FTDecodingVersion=None, **kwargs): # TODO use FTDecodingVersion=smart.REQUIRED above cut = 9750 if FTDecodingVersion == 4 else 11000 - props = dict(NumberFTUTClusters=cut, **kwargs) # kwargs take precedence - return Algorithm(PrGECFilter, RawEventLocations=raw().RawEvent, **props) - + props = dict(NumberFTUTClusters=cut, **kwargs) # kwargs take precedence + return Algorithm(PrGECFilter, RawEventLocations = raw().RawEvent, **props) @configurable -def make_velo_clusters(raw=RawData): +def make_velo_clusters(raw = RawData): return VeloClustering(RawEventLocation=raw().RawEvent).ClusterLocation - @configurable -def make_velo_cluster_offsets(raw=RawData): +def make_velo_cluster_offsets(raw = RawData): return VeloClustering(RawEventLocation=raw().RawEvent).ClusterOffsets - @configurable def make_velo_tracks(make_clusters=make_velo_clusters, make_cluster_offsets=make_velo_cluster_offsets, - convertToSelection=True): + convertToSelection = True): clusters = make_clusters() offsets = make_cluster_offsets() - tracks = VeloTracking( - ClusterLocation=clusters, ClusterOffsets=offsets).OutputTracksName + tracks = VeloTracking(ClusterLocation = clusters, + ClusterOffsets = offsets).OutputTracksName if not convertToSelection: return tracks - return SelFromVector(Input=tracks).Output - + return SelFromVector(Input = tracks).Output @configurable def make_keyed_velo_tracks(make_velo_tracks=make_velo_tracks): - return V2TrackConvV1( - InputTracksName=make_velo_tracks( - convertToSelection=False)).OutputTracksName - + return V2TrackConvV1(InputTracksName=make_velo_tracks(convertToSelection=False)).OutputTracksName @configurable -def make_pvs(make_velo_tracks=make_velo_tracks, needConvertedTracks=False): - tracks = make_velo_tracks(convertToSelection=needConvertedTracks) - return PVFinding(InputTracks=tracks, name="WURST").OutputVerticesName - +def make_pvs(make_velo_tracks=make_velo_tracks, needConvertedTracks = False): + tracks = make_velo_tracks(convertToSelection = needConvertedTracks) + return PVFinding(InputTracks = tracks, name = "WURST").OutputVerticesName @configurable -def make_V1_pvs(make_keyed_velo_tracks=make_keyed_velo_tracks, - make_pvs=make_pvs): - return V2VertexConvV1( - InputVerticesName=make_pvs(), - InputTracksName=make_keyed_velo_tracks()).OutputVerticesName - +def make_V1_pvs(make_keyed_velo_tracks=make_keyed_velo_tracks, make_pvs=make_pvs): + return V2VertexConvV1(InputVerticesName=make_pvs(), + InputTracksName=make_keyed_velo_tracks()).OutputVerticesName @configurable def FilterEmptyPVs(make_pvs=make_pvs): return EmptyFilter(InputLocation=make_pvs()) - @configurable -def make_IPselectedTracks(make_tracks=make_velo_tracks, - make_pvs=make_pvs, - ip_cut=0.1 * mm): - return FilterIP( - IPcut=ip_cut, Input=make_tracks(), InputVertices=make_pvs()).Output - +def make_IPselectedTracks(make_tracks=make_velo_tracks, make_pvs=make_pvs, ip_cut=0.1*mm): + return FilterIP(IPcut=ip_cut, + Input=make_tracks(), + InputVertices=make_pvs()).Output @configurable -def make_Muon_hits(raw=RawData): +def make_Muon_hits(raw = RawData): return MuonDecoding(RawEventLocation=raw().RawEvent).HitContainer - @configurable -def make_UT_clusters(raw=RawData): +def make_UT_clusters(raw = RawData): return UTDecoding(RawEventLocations=raw().RawEvent).UTHitsLocation - @configurable def make_VeloUT_tracks(make_velo_tracks=make_IPselectedTracks, make_ut_clusters=make_UT_clusters, convertToSelection=True): - ut_tracks = VeloUTTracking( - InputTracksName=make_velo_tracks(), - UTHits=make_ut_clusters()).OutputTracksName + ut_tracks = VeloUTTracking(InputTracksName=make_velo_tracks(), + UTHits=make_ut_clusters()).OutputTracksName if not convertToSelection: return ut_tracks - return SelFromVector(Input=ut_tracks).Output - + return SelFromVector(Input = ut_tracks).Output @configurable def make_muonmatchvelout_tracks(make_velout_tracks=make_VeloUT_tracks, @@ -208,12 +197,10 @@ def make_muonmatchvelout_tracks(make_velout_tracks=make_VeloUT_tracks, return tracks return SelFromVector(Input=tracks).Output - @configurable def make_ft_clusters(raw=RawData): - ft_clusters = FTDecoding(RawEventLocations=raw().RawEvent).OutputLocation - return StoreFT(InputLocation=ft_clusters).FTHitsLocation - + ft_clusters = FTDecoding(RawEventLocations = raw().RawEvent).OutputLocation + return StoreFT(InputLocation = ft_clusters).FTHitsLocation @configurable def make_forward_tracks(make_clusters=make_ft_clusters, @@ -221,14 +208,12 @@ def make_forward_tracks(make_clusters=make_ft_clusters, make_ut_hits=make_UT_clusters): from Configurables import PrAddUTHitsTool - uthitstool = Tool(PrAddUTHitsTool, UTHitsLocation=make_UT_clusters()) - return ForwardTracking( - FTHitsLocation=make_clusters(), - InputName=make_tracks(), - AddUTHitsToolName=uthitstool).OutputName - # ).OutputName - # tool is set into a private context here - + uthitstool = Tool(PrAddUTHitsTool, UTHitsLocation = make_UT_clusters()) + return ForwardTracking(FTHitsLocation = make_clusters(), + InputName = make_tracks(), + AddUTHitsToolName = uthitstool).OutputName + # ).OutputName + # tool is set into a private context here @configurable def make_param_forward_fitted_tracks(make_tracks=make_forward_tracks, @@ -236,16 +221,15 @@ def make_param_forward_fitted_tracks(make_tracks=make_forward_tracks, from Configurables import TrackMasterExtrapolator, SimplifiedMaterialLocator materiallocator = Tool(SimplifiedMaterialLocator) - extrapolator = Tool( - TrackMasterExtrapolator, - MaterialLocator=materiallocator, - ApplyMultScattCorr=True, - ApplyEnergyLossCorr=False, - ApplyElectronEnergyLossCorr=True) - - fitted_tracks = ParamForwardFit( - InputName=make_tracks(), Extrapolator=extrapolator).OutputName + extrapolator = Tool(TrackMasterExtrapolator, + MaterialLocator=materiallocator, + ApplyMultScattCorr = True, + ApplyEnergyLossCorr = False, + ApplyElectronEnergyLossCorr = True) + + fitted_tracks = ParamForwardFit(InputName = make_tracks(), + Extrapolator = extrapolator).OutputName # fitted_tracks = ParamForwardFit(InputName = make_tracks()).OutputName if not convertToSelection: return fitted_tracks - return SelTrackV1(Input=fitted_tracks).Output + return SelTrackV1(Input = fitted_tracks).Output -- GitLab From 29f63a4b166519baa150801af56de895cb96196e Mon Sep 17 00:00:00 2001 From: "claire.prouve" Date: Mon, 15 Jul 2019 14:08:05 +0200 Subject: [PATCH 6/8] merge master in --- ...ith_lines.py => hlt1_example_muon_lines.py} | 0 Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py | 18 ++++++------------ 2 files changed, 6 insertions(+), 12 deletions(-) rename Hlt/Hlt1Conf/options/{with_lines.py => hlt1_example_muon_lines.py} (100%) diff --git a/Hlt/Hlt1Conf/options/with_lines.py b/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py similarity index 100% rename from Hlt/Hlt1Conf/options/with_lines.py rename to Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py index 8b8994b1453..de02561020b 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py @@ -23,8 +23,6 @@ from Configurables import ( LoKi__VoidFilter, PrVeloUT, ParameterizedKalmanFit, - MuonMatchVeloUT, - MuonRawToHits, ) # all trivial (not changing default) and fully datahandly imports can be done from here @@ -44,6 +42,8 @@ from PyConf.Algorithms import ( TrackBeamLineVertexFinderSoA, SciFiTrackForwardingStoreHit, VeloKalman, + MuonRawToHits, + MuonMatchVeloUTSoA, ) from GaudiKernel.SystemOfUnits import mm, MeV @@ -73,7 +73,6 @@ EmptyFilter = make_algorithm( LoKi__VoidFilter, input_transform=__emptyfilter_input_transform) -MuonDecoding = composable(MuonRawToHits) # maker functions @configurable @@ -84,8 +83,6 @@ def gec(raw=RawData, FTDecodingVersion=None, **kwargs): return Algorithm(PrGECFilter, RawEventLocations=raw().RawEvent, **props) -MuonMatchVeloUTTracking = composable(MuonMatchVeloUT) - @configurable def make_velo_hits(raw=RawData): return VeloClusterTrackingSIMD( @@ -175,7 +172,7 @@ def convert_tracksVP_to_v2tracks( @configurable def make_Muon_hits(raw = RawData): - return MuonDecoding(RawEventLocation=raw().RawEvent).HitContainer + return MuonRawToHits(RawEventLocation=raw().RawEvent).HitContainer @configurable def convert_IPselectedTracks_to_v2tracks(make_tracks=make_IPselectedTracks, @@ -199,15 +196,12 @@ def convert_tracksUT_to_v2tracks( @configurable def make_muonmatchvelout_tracks(make_velout_tracks=make_VeloUT_tracks, - make_muon_hits=make_Muon_hits, - convertToSelection=True): + make_muon_hits=make_Muon_hits): - tracks = MuonMatchVeloUTTracking( + tracks = MuonMatchVeloUTSoA( InputTracks=make_velout_tracks(), InputMuonHits=make_muon_hits()).OutputTracks - if not convertToSelection: - return tracks - return SelFromVector(Input=tracks).Output + return tracks @configurable def make_param_forward_fitted_tracks(make_tracks=make_forward_tracks, -- GitLab From adf3e8b73972ab6e2ec023fbd8c887799b7a1e8d Mon Sep 17 00:00:00 2001 From: "claire.prouve" Date: Mon, 15 Jul 2019 16:20:22 +0200 Subject: [PATCH 7/8] added qmtest for HLT1 muon lines and fixed single_muon and dimuon lines --- .../options/hlt1_example_muon_lines.py | 220 ++++++------------ .../python/Hlt1Conf/reconstruction.py | 2 +- .../qmtest/test_hlt1_example_muon_lines.qmt | 42 ++++ 3 files changed, 110 insertions(+), 154 deletions(-) create mode 100644 Hlt/Hlt1Conf/tests/qmtest/test_hlt1_example_muon_lines.qmt diff --git a/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py b/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py index 5e98de299b5..4cfa5c40776 100644 --- a/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py +++ b/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py @@ -16,7 +16,7 @@ InputSample = namedtuple('InputSample', ['tfdb', 'ftdec_v', 'multi_threading']) from GaudiKernel.SystemOfUnits import mm, MeV, GeV -from PyConf.smart import ( +from PyConf import ( configurable, ) from Hlt1Conf.lines import ( @@ -30,22 +30,24 @@ from Hlt1Conf.reconstruction import ( gec, RawData, FilterEmptyPVs, - FilterIP, - FTDecoding, + make_velo_tracks, + make_VeloUT_tracks, + make_IPselectedTracks, make_forward_tracks, make_muonmatchvelout_tracks, - make_forward_tracks, make_param_forward_fitted_tracks, make_pvs, EmptyFilter, VeloUTTracking, - ForwardTracking, + SciFiTrackForwarding, + convert_tracksUT_to_v2tracks, + convert_IPselectedTracks_to_v2tracks, ) -from PyConf.core import ( - Algorithm, - EverythingHandler, -) +from PyConf.components import Algorithm +from PyConf.environment import EverythingHandler + +from PyConf.Algorithms import FTRawBankDecoder def patch_hybrid_tool(): """Remove Hybrid modules that require a DVAlgorithm. @@ -71,47 +73,6 @@ def patch_hybrid_tool(): factory.Modules.append('LoKiTrack.decorators') -@configurable -def one_track_MVA( - preambulo=["from GaudiKernel.SystemOfUnits import GeV"], - code=require_all( - "TrCHI2PDOF < {max_trchi2dof}", - # "TrGHOSTPROB < {max_trgp}" - require_any( - require_all( - "TrPT > {max_pt}", - "TrMINIPCHI2 > {min_ipchi2}" - ), - require_all( - "in_range({min_pt}, TrPT, {max_pt})", - "log(TrMINIPCHI2) > ({param1} / ((TrPT / GeV - {param2}) ** 2) + " - "({param3} / {max_pt}) * ({max_pt} - TrPT) + " - "{log_min_ipchi2})" - ) - ) - ).format( - # TrackMVALoose cuts from ZombieMoore - max_trchi2dof=2.5, - max_trgp=0.2, - min_pt=2000, - max_pt=26000, - min_ipchi2=7.4, - # For some reason, having the `math.log` in the functor string - # itself gives a recursion error - log_min_ipchi2=math.log(7.4), - param1=1.0, - param2=2.0, - param3=1.248 - ), - make_input_tracks=make_param_forward_fitted_tracks, - make_pvs=make_pvs, -): - return TrackV1FilterWithPVs(Preambulo=preambulo, - Code=code, - Input=make_input_tracks(), - InputVertices=make_pvs()).Output - - @configurable def single_muon_line( code='TrALL', @@ -148,64 +109,14 @@ def dimuon_line( InputVertices=pvs).OutputVertices -@configurable -def two_track_MVA( - daughter_cuts=require_all( - "TrPT > {min_track_pt}", - "TrP > {min_track_p}", - "TrCHI2PDOF < {max_track_chi2pdof}", - # "TrGHOSTPROB < {max_track_ghostprob}" - ).format( - min_track_pt=500, - min_track_p=3000, - max_track_chi2pdof=3, - max_track_ghostprob=0.2 - ), - CombinationCut=require_all( - "RV_TrNUM(TrMINIPCHI2 > {min_one_track_ipchi2}) > 0", - "RV_PT > {min_vertex_pt}" - ).format( - min_one_track_ipchi2=6, - min_vertex_pt=3000 - ), - VertexCut=require_all( - "VCHI2PDOF < {max_vertex_chi2pdof}" - ).format( - max_vertex_chi2pdof=16 - ), - combiner_preamble = [ - "from LoKiPhys.decorators import RV_TrNUM, RV_PT, VCHI2PDOF" - ], - make_input_tracks=make_param_forward_fitted_tracks, - make_pvs=make_pvs, -): +#sample = InputSample('MiniBrunel_2018_MinBias_FTv4_MDF', ftdec_v=4, multi_threading=True) +sample = InputSample('upgrade-magup-sim10-up01-34112106-xdigi', ftdec_v=6, multi_threading=False) # KS0 -> mu+ mu- upgrade MC - preambulo = ["from GaudiKernel.SystemOfUnits import GeV"] - daughters = TrackV1FilterWithPVs( - Preambulo=preambulo, Code=daughter_cuts, - Input=make_input_tracks(), InputVertices=make_pvs()).Output - - return TrackCombinerWithPVs( - NBodies=2, - Preamble=combiner_preamble, - CombinationCut=CombinationCut, - VertexCut=VertexCut, - InputTracks=daughters, - InputVertices=make_pvs() - ).OutputVertices - - -sample = InputSample('MiniBrunel_2018_MinBias_FTv4_MDF', ftdec_v=4, multi_threading=True) -#sample = InputSample('upgrade-magup-sim10-up01-34112106-xdigi', ftdec_v=6, multi_threading=False) # KS0 -> mu+ mu- upgrade MC - -with FTDecoding.bind(DecodingVersion=sample.ftdec_v): +with FTRawBankDecoder.bind(DecodingVersion=sample.ftdec_v): gec = gec(FTDecodingVersion=sample.ftdec_v) NoPVFilter = FilterEmptyPVs() - one_track = one_track_MVA() - two_track_filter = EmptyFilter(InputLocation=two_track_MVA()) - # # Configuration of muon lines # @@ -227,56 +138,61 @@ with FTDecoding.bind(DecodingVersion=sample.ftdec_v): with make_forward_tracks.bind(make_tracks=make_muonmatchvelout_tracks): - single_muon = single_muon_line( - code=single_muon_cuts.format( - min_pt=1.5 * GeV, - min_p=3 * GeV, - min_ipchi2=0, - max_chi2pdof=3)) - - dimuon = dimuon_line( - daughter_cuts=dimuon_lines_dc.format( - min_pt=250 * MeV, - min_p=3 * GeV, - min_ipchi2=0, - max_chi2pdof=3), - CombinationCut=dimuon_lines_cc.format( - min_vertex_pt=0 * MeV, - min_vertex_mass=220 * MeV), - VertexCut=dimuon_lines_vc.format( - max_vertex_chi2pdof=25, - min_vertex_rho2=0 * mm * mm, - )) + with make_VeloUT_tracks.bind(make_velo_tracks=make_velo_tracks), \ + convert_IPselectedTracks_to_v2tracks.bind(make_tracks=make_velo_tracks): + single_muon = single_muon_line( + code=single_muon_cuts.format( + min_pt=1.5 * GeV, + min_p=3 * GeV, + min_ipchi2=0, + max_chi2pdof=3)) + + dimuon = dimuon_line( + daughter_cuts=dimuon_lines_dc.format( + min_pt=250 * MeV, + min_p=3 * GeV, + min_ipchi2=0, + max_chi2pdof=3), + CombinationCut=dimuon_lines_cc.format( + min_vertex_pt=0 * MeV, + min_vertex_mass=220 * MeV), + VertexCut=dimuon_lines_vc.format( + max_vertex_chi2pdof=25, + min_vertex_rho2=0 * mm * mm, + )) with VeloUTTracking.bind( - name='PrVeloUT_Detached', + name='VeloUTDetached', minPT=80 * MeV, minPTFinal=80 * MeV, - minMomentumFinal=2.5 * GeV): - with ForwardTracking.bind( - name='PrForwardTrackingDetached', MinPT=80, - Preselection=False): - with FilterIP.bind(name='FilterIP_SingleMuonDetached', IPcut=10 * mm): - single_muon_detached = single_muon_line( - code=single_muon_cuts.format( - min_pt=80 * MeV, - min_p=3 * GeV, - min_ipchi2=100, - max_chi2pdof=3)) - with FilterIP.bind(name='FilterIP_DiMuonDetached', IPcut=0.4 * mm): - dimuon_detached = dimuon_line( - daughter_cuts=dimuon_lines_dc.format( - min_pt=80 * MeV, - min_p=3 * GeV, - min_ipchi2=9, - max_chi2pdof=4), - CombinationCut=dimuon_lines_cc.format( - min_vertex_pt=0 * MeV, - min_vertex_mass=220 * MeV), - VertexCut=dimuon_lines_vc.format( - max_vertex_chi2pdof=25, - min_vertex_rho2=0 * mm * mm, - )) + minMomentumFinal=2.5 * GeV), \ + SciFiTrackForwarding.bind( + name='ForwardTrackingDetached', + MinPt=80, + PreSelectionPT=0.): + with make_IPselectedTracks.bind( + ip_cut=10 * mm): + single_muon_detached = single_muon_line( + code=single_muon_cuts.format( + min_pt=80 * MeV, + min_p=3 * GeV, + min_ipchi2=100, + max_chi2pdof=3)) + with make_IPselectedTracks.bind( + ip_cut=0.4 * mm): + dimuon_detached = dimuon_line( + daughter_cuts=dimuon_lines_dc.format( + min_pt=80 * MeV, + min_p=3 * GeV, + min_ipchi2=9, + max_chi2pdof=4), + CombinationCut=dimuon_lines_cc.format( + min_vertex_pt=0 * MeV, + min_vertex_mass=220 * MeV), + VertexCut=dimuon_lines_vc.format( + max_vertex_chi2pdof=25, + min_vertex_rho2=0 * mm * mm, + )) # # Register the lines @@ -287,9 +203,7 @@ with FTDecoding.bind(DecodingVersion=sample.ftdec_v): mt_opts=dict(threadPoolSize=1, nEventSlots=1) env = EverythingHandler(evtMax=1000, debug=True, **mt_opts) - env.registerLine('one_track_mva', algs=[gec, NoPVFilter, one_track]) - env.registerLine('two_track_mva', algs=[gec, NoPVFilter, two_track_filter]) - env.registerLine('single_muon', algs=[gec, NoPVFilter, single_muon]) + env.registerLine('single_muon', algs=[gec, NoPVFilter, EmptyFilter(InputLocation=make_velo_tracks()), single_muon]) env.registerLine( 'single_muon_detached', algs=[gec, NoPVFilter, single_muon_detached]) env.registerLine( @@ -301,7 +215,7 @@ with FTDecoding.bind(DecodingVersion=sample.ftdec_v): EmptyFilter(InputLocation=dimuon_detached)]) env.setupInputFromTestFileDB(sample.tfdb) - env.configureAllTheFlows() + env.configure() #env.plotDataFlow() # only if you have graphivz available patch_hybrid_tool() diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py index de02561020b..aff64ee78f7 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py @@ -254,7 +254,7 @@ def convert_fitted_tracks_to_v2tracks( @configurable def make_param_forward_fitted_tracks( - make_tracks=convert_fitted_tracks_to_v2tracks): + make_tracks=convert_tracksFT_to_v2tracks): track_v1 = fromV2TrackV1TrackVector( InputTracksName=make_tracks()).OutputTracksName return TrackV1Selection(Input=track_v1).Output diff --git a/Hlt/Hlt1Conf/tests/qmtest/test_hlt1_example_muon_lines.qmt b/Hlt/Hlt1Conf/tests/qmtest/test_hlt1_example_muon_lines.qmt new file mode 100644 index 00000000000..98cb7bdd300 --- /dev/null +++ b/Hlt/Hlt1Conf/tests/qmtest/test_hlt1_example_muon_lines.qmt @@ -0,0 +1,42 @@ + + + + +gaudirun.py + + $HLT1CONFROOT/options/hlt1_example_muon_lines.py + --output=hlt1_example_muon_lines.opts.py + --all-opt + + +from Configurables import HiveDataBrokerSvc +HiveDataBrokerSvc().OutputLevel = 5 + +true + + +countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 0}) + +# test that at least one event fires +import re +m = re.search('NONLAZY_OR: hlt_decision .*Sum=(\d+)', stdout) +if m: + result['hlt_decision_sum'] = result.Quote(m.group(1)) + if int(m.group(1)) < 1: + causes.append('no positive decisions found') +else: + causes.append('hlt_decision counter not found') + + + -- GitLab From 9e3e6514657cabf029f9b2d1839aa9925fc32d39 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Mon, 15 Jul 2019 15:24:44 +0000 Subject: [PATCH 8/8] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/4831136 --- .../options/hlt1_example_muon_lines.py | 46 +++++++++---------- .../python/Hlt1Conf/reconstruction.py | 29 ++++++------ 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py b/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py index 4cfa5c40776..e33ca483769 100644 --- a/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py +++ b/Hlt/Hlt1Conf/options/hlt1_example_muon_lines.py @@ -17,8 +17,7 @@ InputSample = namedtuple('InputSample', ['tfdb', 'ftdec_v', 'multi_threading']) from GaudiKernel.SystemOfUnits import mm, MeV, GeV from PyConf import ( - configurable, -) + configurable, ) from Hlt1Conf.lines import ( require_all, require_any, @@ -49,6 +48,7 @@ from PyConf.environment import EverythingHandler from PyConf.Algorithms import FTRawBankDecoder + def patch_hybrid_tool(): """Remove Hybrid modules that require a DVAlgorithm. @@ -57,10 +57,7 @@ def patch_hybrid_tool(): we don't want nor need them, so remove them from the default list. """ # List of modules we will delete from the default list - dv_modules = [ - "LoKiPhys.decorators", - "LoKiArrayFunctors.decorators" - ] + dv_modules = ["LoKiPhys.decorators", "LoKiArrayFunctors.decorators"] from Configurables import LoKi__Hybrid__Tool factory = LoKi__Hybrid__Tool("HybridFactory") @@ -74,10 +71,9 @@ def patch_hybrid_tool(): @configurable -def single_muon_line( - code='TrALL', - make_input_tracks=make_param_forward_fitted_tracks, - make_pvs=make_pvs): +def single_muon_line(code='TrALL', + make_input_tracks=make_param_forward_fitted_tracks, + make_pvs=make_pvs): return TrackV1FilterWithPVs( Code=code, Input=make_input_tracks(), InputVertices=make_pvs()).Output @@ -110,7 +106,10 @@ def dimuon_line( #sample = InputSample('MiniBrunel_2018_MinBias_FTv4_MDF', ftdec_v=4, multi_threading=True) -sample = InputSample('upgrade-magup-sim10-up01-34112106-xdigi', ftdec_v=6, multi_threading=False) # KS0 -> mu+ mu- upgrade MC +sample = InputSample( + 'upgrade-magup-sim10-up01-34112106-xdigi', + ftdec_v=6, + multi_threading=False) # KS0 -> mu+ mu- upgrade MC with FTRawBankDecoder.bind(DecodingVersion=sample.ftdec_v): @@ -154,8 +153,7 @@ with FTRawBankDecoder.bind(DecodingVersion=sample.ftdec_v): min_ipchi2=0, max_chi2pdof=3), CombinationCut=dimuon_lines_cc.format( - min_vertex_pt=0 * MeV, - min_vertex_mass=220 * MeV), + min_vertex_pt=0 * MeV, min_vertex_mass=220 * MeV), VertexCut=dimuon_lines_vc.format( max_vertex_chi2pdof=25, min_vertex_rho2=0 * mm * mm, @@ -167,19 +165,17 @@ with FTRawBankDecoder.bind(DecodingVersion=sample.ftdec_v): minPTFinal=80 * MeV, minMomentumFinal=2.5 * GeV), \ SciFiTrackForwarding.bind( - name='ForwardTrackingDetached', + name='ForwardTrackingDetached', MinPt=80, PreSelectionPT=0.): - with make_IPselectedTracks.bind( - ip_cut=10 * mm): + with make_IPselectedTracks.bind(ip_cut=10 * mm): single_muon_detached = single_muon_line( code=single_muon_cuts.format( min_pt=80 * MeV, min_p=3 * GeV, min_ipchi2=100, max_chi2pdof=3)) - with make_IPselectedTracks.bind( - ip_cut=0.4 * mm): + with make_IPselectedTracks.bind(ip_cut=0.4 * mm): dimuon_detached = dimuon_line( daughter_cuts=dimuon_lines_dc.format( min_pt=80 * MeV, @@ -187,8 +183,7 @@ with FTRawBankDecoder.bind(DecodingVersion=sample.ftdec_v): min_ipchi2=9, max_chi2pdof=4), CombinationCut=dimuon_lines_cc.format( - min_vertex_pt=0 * MeV, - min_vertex_mass=220 * MeV), + min_vertex_pt=0 * MeV, min_vertex_mass=220 * MeV), VertexCut=dimuon_lines_vc.format( max_vertex_chi2pdof=25, min_vertex_rho2=0 * mm * mm, @@ -198,12 +193,17 @@ with FTRawBankDecoder.bind(DecodingVersion=sample.ftdec_v): # Register the lines # if sample.multi_threading: - mt_opts=dict(threadPoolSize=5, nEventSlots=4) + mt_opts = dict(threadPoolSize=5, nEventSlots=4) else: - mt_opts=dict(threadPoolSize=1, nEventSlots=1) + mt_opts = dict(threadPoolSize=1, nEventSlots=1) env = EverythingHandler(evtMax=1000, debug=True, **mt_opts) - env.registerLine('single_muon', algs=[gec, NoPVFilter, EmptyFilter(InputLocation=make_velo_tracks()), single_muon]) + env.registerLine( + 'single_muon', + algs=[ + gec, NoPVFilter, + EmptyFilter(InputLocation=make_velo_tracks()), single_muon + ]) env.registerLine( 'single_muon_detached', algs=[gec, NoPVFilter, single_muon_detached]) env.registerLine( diff --git a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py index aff64ee78f7..8486a0b55cc 100644 --- a/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py +++ b/Hlt/Hlt1Conf/python/Hlt1Conf/reconstruction.py @@ -73,7 +73,6 @@ EmptyFilter = make_algorithm( LoKi__VoidFilter, input_transform=__emptyfilter_input_transform) - # maker functions @configurable def gec(raw=RawData, FTDecodingVersion=None, **kwargs): @@ -171,9 +170,10 @@ def convert_tracksVP_to_v2tracks( @configurable -def make_Muon_hits(raw = RawData): +def make_Muon_hits(raw=RawData): return MuonRawToHits(RawEventLocation=raw().RawEvent).HitContainer + @configurable def convert_IPselectedTracks_to_v2tracks(make_tracks=make_IPselectedTracks, make_hits=make_velo_hits): @@ -203,24 +203,28 @@ def make_muonmatchvelout_tracks(make_velout_tracks=make_VeloUT_tracks, InputMuonHits=make_muon_hits()).OutputTracks return tracks + @configurable def make_param_forward_fitted_tracks(make_tracks=make_forward_tracks, convertToSelection=True): from Configurables import TrackMasterExtrapolator, SimplifiedMaterialLocator materiallocator = Tool(SimplifiedMaterialLocator) - extrapolator = Tool(TrackMasterExtrapolator, - MaterialLocator=materiallocator, - ApplyMultScattCorr = True, - ApplyEnergyLossCorr = False, - ApplyElectronEnergyLossCorr = True) - - fitted_tracks = ParamForwardFit(InputName = make_tracks(), - Extrapolator = extrapolator).OutputName + extrapolator = Tool( + TrackMasterExtrapolator, + MaterialLocator=materiallocator, + ApplyMultScattCorr=True, + ApplyEnergyLossCorr=False, + ApplyElectronEnergyLossCorr=True) + + fitted_tracks = ParamForwardFit( + InputName=make_tracks(), Extrapolator=extrapolator).OutputName # fitted_tracks = ParamForwardFit(InputName = make_tracks()).OutputName if not convertToSelection: return fitted_tracks - return SelTrackV1(Input = fitted_tracks).Output + return SelTrackV1(Input=fitted_tracks).Output + + def convert_tracksFT_to_v2tracks( make_velout_tracks=convert_tracksUT_to_v2tracks, make_forward_tracks=make_forward_tracks): @@ -253,8 +257,7 @@ def convert_fitted_tracks_to_v2tracks( @configurable -def make_param_forward_fitted_tracks( - make_tracks=convert_tracksFT_to_v2tracks): +def make_param_forward_fitted_tracks(make_tracks=convert_tracksFT_to_v2tracks): track_v1 = fromV2TrackV1TrackVector( InputTracksName=make_tracks()).OutputTracksName return TrackV1Selection(Input=track_v1).Output -- GitLab