ATLAS Offline Software
Loading...
Searching...
No Matches
TrigHitDVHypoConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaCommon.Logging import logging
4from AthenaMonitoringKernel.GenericMonitoringTool import GenericMonitoringTool
5from AthenaConfiguration.ComponentFactory import CompFactory
6from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
7from AthenaConfiguration.AthConfigFlags import AthConfigFlags
8
9# Default name of HitDV output
10hitDVName = "HLT_HitDV"
11
12def TrigHitDVHypoAlgCfg(flags : AthConfigFlags, name : str) -> ComponentAccumulator:
13 acc = ComponentAccumulator()
14
15 # Setup the hypothesis algorithm
16 theHitDVHypo = CompFactory.TrigHitDVHypoAlg(name)
17
18 from TrigEDMConfig.TriggerEDM import recordable
19 theHitDVHypo.HitDV = recordable(hitDVName)
20
21 theHitDVHypo.isMC = flags.Input.isMC
22
23 # monitoring
24 monTool = GenericMonitoringTool(flags, "IM_MonTool"+name,
25 HistPath = 'HitDVHypoAlg')
26
27 monTool.defineHistogram('jet_pt', type='TH1F', path='EXPERT', title="p_{T}^{jet} [GeV];p_{T}^{jet} [GeV];Nevents", xbins=50, xmin=0, xmax=200)
28 monTool.defineHistogram('jet_eta', type='TH1F', path='EXPERT', title="#eta^{jet};#eta^{jet};Nevents", xbins=50, xmin=-5.0, xmax=5.0)
29 #
30 monTool.defineHistogram('n_dvtrks', type='TH1F', path='EXPERT', title="Nr of HitDVTrks;N HitDVTrks size;Nevents", xbins=50, xmin=0, xmax=1000)
31 monTool.defineHistogram('n_dvsps', type='TH1F', path='EXPERT', title="Nr of HitDVSPs;N HitDVSPs size;Nevents", xbins=50, xmin=0, xmax=100000)
32 monTool.defineHistogram('n_jetseeds', type='TH1F', path='EXPERT', title="Nr of Jet Seeds;N jet seeds;Nevents", xbins=25, xmin=0, xmax=25)
33 monTool.defineHistogram('n_jetseedsdel', type='TH1F', path='EXPERT', title="Nr of deleted jet seeds;N jet seeds;Nevents", xbins=25, xmin=0, xmax=25)
34 monTool.defineHistogram('n_spseeds', type='TH1F', path='EXPERT', title="Nr of Ly6/Ly7 SP-doublet Seeds;N SP seeds;Nevents", xbins=25, xmin=0, xmax=25)
35 monTool.defineHistogram('n_spseedsdel', type='TH1F', path='EXPERT', title="Nr of deleted Ly6/Ly7 SP-doublet seeds;N SP seeds;Nevents", xbins=25, xmin=0, xmax=25)
36 monTool.defineHistogram('average_mu', type='TH1F', path='EXPERT', title="Average mu;Average mu;Nevents", xbins=50, xmin=0, xmax=100)
37 #
38
39 # Layer histograms for both eta bins
40 for i in range(8):
41 monTool.defineHistogram(f'ly{i}_spfr;eta1_ly{i}_spfr', type='TH1F', path='EXPERT',
42 title=f"Layer#{i} hit fraction (|#eta|<1);Hit fraction;Nevents",
43 xbins=50, xmin=0.0, xmax=1.0, cutmask='cutEta1')
44 monTool.defineHistogram(f'ly{i}_spfr;1eta2_ly{i}_spfr', type='TH1F', path='EXPERT',
45 title=f"Layer#{i} hit fraction (1<|#eta|<2);Hit fraction;Nevents",
46 xbins=50, xmin=0.0, xmax=1.0, cutmask='cut1Eta2')
47
48 # |eta|<1
49 monTool.defineHistogram('n_qtrk;eta1_n_qtrk', type='TH1F', path='EXPERT', title="Nr of quality tracks (|#eta|<1);Nr of quality tracks;Nevents", xbins=20, xmin=0, xmax=20, cutmask='cutEta1')
50 monTool.defineHistogram('bdtscore;eta1_bdtscore', type='TH1F', path='EXPERT', title="BDT score (|#eta|<1);BDT score;Nevents", xbins=50, xmin=-1.0, xmax=1.0, cutmask='cutEta1')
51
52 # 1<|eta|<2
53 monTool.defineHistogram('n_qtrk;1eta2_n_qtrk', type='TH1F', path='EXPERT', title="Nr of quality tracks (1<|#eta|<2);Nr of quality tracks;Nevents", xbins=20, xmin=0, xmax=20, cutmask='cut1Eta2')
54 monTool.defineHistogram('bdtscore;1eta2_bdtscore', type='TH1F', path='EXPERT', title="BDT score (1<|#eta|<2);BDT score;Nevents", xbins=50, xmin=-1.0, xmax=1.0, cutmask='cut1Eta2')
55
56 theHitDVHypo.MonTool = monTool
57 theHitDVHypo.jFexSRJetRoI = "L1_jFexSRJetRoI"
58
59 useNewLayerNumberScheme = False
60 from TrigFastTrackFinder.TrigFastTrackFinderConfig import TrigSpacePointConversionToolCfg
61 spTool = acc.popToolsAndMerge(TrigSpacePointConversionToolCfg(flags,
62 UseNewLayerScheme=useNewLayerNumberScheme,
63 DoPhiFiltering = False,
64 UseBeamTilt = False, ))
65
66 theHitDVHypo.SpacePointProviderTool = spTool
67
68 acc.addEventAlgo(theHitDVHypo)
69 return acc
70
71
72def TrigHitDVHypoToolFromDict( flags, chainDict ):
73
74 log = logging.getLogger('TrigHitDVHypoTool')
75
76 """ Use menu decoded chain dictionary to configure the tool """
77 cparts = [i for i in chainDict['chainParts'] if i['signature']=='UnconventionalTracking']
78 thresholds = sum([ [cpart['threshold']]*int(cpart['multiplicity']) for cpart in cparts], [])
79
80 name = chainDict['chainName']
81 from AthenaConfiguration.ComponentFactory import CompFactory
82 tool = CompFactory.TrigHitDVHypoTool(name)
83
84 # set thresholds
85
86 strThr = ""
87
88 thresholds = [ float(THR) for THR in thresholds]
89
90 for THR in thresholds:
91 strThr += str(THR)+", "
92
93 log.debug("Threshold Values are: %s",strThr)
94
95 tool.cutJetPtGeV = thresholds
96
97 jetEta=[]
98 doSPseed=[]
99 effBDT=[]
100
101 for cpart in cparts:
102 if cpart['IDinfo'] =="loose":
103 log.debug("Loose ID working point is set")
104 jetEta.append(2.0)
105 doSPseed.append(True)
106 effBDT.append(0.9)
107 elif cpart['IDinfo'] =="tight":
108 log.debug("Tight ID working point is set")
109 jetEta.append(1.0)
110 doSPseed.append(False)
111 effBDT.append(0.75)
112 else:
113 if cpart['IDinfo'] =="medium":
114 log.debug("Medium ID working point is set")
115 else:
116 log.info("no working point specificed. setting medium working point")
117 jetEta.append(2.0)
118 doSPseed.append(False)
119 effBDT.append(0.75)
120
121 tool.cutJetEta = jetEta
122 tool.doSPseed = doSPseed
123 tool.effBDT = effBDT
124
125 return tool
ComponentAccumulator TrigHitDVHypoAlgCfg(AthConfigFlags flags, str name)
TrigHitDVHypoToolFromDict(flags, chainDict)