32def SCTVALIDKernelCfg(flags, name='SCTVALIDKernel', **kwargs):
33 """Configure the derivation framework driving algorithm (kernel) for SCTVALID"""
34 acc = ComponentAccumulator()
35
36
39 skimmingTools = []
40
41 SCTVALIDSequenceName='SCTVALIDSequence'
42 acc.addSequence(seqAND(SCTVALIDSequenceName))
43
44
45
46
47 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import PrescaleToolCfg
48
49 prescaleTool = acc.getPrimaryAndMerge(PrescaleToolCfg(
50 flags, name="SCTxAOD_PrescaleTool", Prescale=flags.InDet.SCTxAODPrescale))
51
52 skimmingTools += [prescaleTool]
53
54 SCTVALIDKernelPresel = CompFactory.DerivationFramework.DerivationKernel("SCTVALIDKernelPresel",
55 SkimmingTools=skimmingTools)
56 acc.addEventAlgo(SCTVALIDKernelPresel, sequenceName="SCTVALIDSequence")
57
58 from InDetConfig.InDetPrepRawDataToxAODConfig import InDetSCT_PrepDataToxAODCfg
59 acc.merge(InDetSCT_PrepDataToxAODCfg(flags,name="xAOD_SCT_PrepDataToxAOD",
60 OutputLevel=INFO,
61 WriteRDOinformation=True,
62 WriteSiHits=False,
63 WriteSDOs=False,
64 UseTruthInfo=flags.Input.isMC),
65 sequenceName=SCTVALIDSequenceName)
66
67
68 from InDetConfig.InDetPrepRawDataToxAODConfig import InDetSCT_RawDataToxAODCfg
69 acc.merge(InDetSCT_RawDataToxAODCfg(flags, name = "xAOD_SCT_RawDataToxAOD"),
70 sequenceName=SCTVALIDSequenceName)
71
72
73 augmentationTools=[]
74
75 if flags.Reco.EnableTracking is True:
76 MSOSThinningSelectionString = ""
77 if flags.InDet.SCTxAODZmumuSkimming:
78 MSOSThinningSelectionString = "InDetTrackParticles.pt>10*GeV"
79 from DerivationFrameworkInDet.InDetToolsConfig import TrackStateOnSurfaceDecoratorCfg
80 DFTSOS = acc.getPrimaryAndMerge(TrackStateOnSurfaceDecoratorCfg(flags, name="SCTVALID_DFTrackStateOnSurfaceDecorator",
81 DecorationPrefix = "SCTVALID_",
82 StoreTRT=True,
83 StoreSCT=True,
84 StorePixel=True,
85 PRDtoTrackMap="",
86 SelectionString=MSOSThinningSelectionString)
87 )
88 augmentationTools.append(DFTSOS)
89
90 from DerivationFrameworkInDet.InDetToolsConfig import EventInfoBSErrDecoratorCfg
91 DFEI = acc.getPrimaryAndMerge(EventInfoBSErrDecoratorCfg(flags, name = "SCTxAOD_DFEventInfoBSErrDecorator"))
92 augmentationTools.append(DFEI)
93
94
95 from IsolationAlgs.IsoToolsConfig import TrackIsolationToolCfg, CaloIsolationToolCfg
96 TrackIsoToolStd = acc.popToolsAndMerge(TrackIsolationToolCfg(flags))
97
98 from CaloIdentifier import SUBCALO
99 CaloIsoTool = acc.popToolsAndMerge(CaloIsolationToolCfg(flags,
100 name = "CaloIsoTool",
101 EMCaloNums = [SUBCALO.LAREM],
102 HadCaloNums = [SUBCALO.LARHEC, SUBCALO.TILE],
103 UseEMScale = True,
104 UseCaloExtensionCaching = False,
105 saveOnlyRequestedCorrections = True))
106
107 import ROOT
108 isoPar = ROOT.xAOD.Iso.IsolationType
109 from DerivationFrameworkInDet.InDetToolsConfig import IsolationTrackDecoratorCfg
110 IsolationTrackDecoratorTool = acc.getPrimaryAndMerge(IsolationTrackDecoratorCfg(flags,
111 name = "SCTVALID_IsolationTrackDecorator",
112 TrackIsolationTool = TrackIsoToolStd,
113 CaloIsolationTool = CaloIsoTool,
114 TargetContainer = "InDetTrackParticles",
115 SelectionString = "InDetTrackParticles.pt>10*GeV",
116 iso = [isoPar.ptcone40, isoPar.ptcone30, isoPar.ptcone20],
117 isoSuffix = ["ptcone40", "ptcone30", "ptcone20"],
118 Prefix = "SCTVALID_"))
119 augmentationTools.append(IsolationTrackDecoratorTool)
120
121 from DerivationFrameworkInDet.InDetToolsConfig import UnassociatedHitsGetterToolCfg
122 unassociatedHitsGetterTool = acc.popToolsAndMerge(UnassociatedHitsGetterToolCfg(flags, name="SCTVALID_UnassociatedHitsGetterTool",
123 TrackCollection = "CombinedInDetTracks",
124 PixelClusters = "PixelClusters",
125 SCTClusterContainer = "SCT_Clusters",
126 TRTDriftCircleContainer = "TRT_DriftCircles"))
127
128 from DerivationFrameworkInDet.InDetToolsConfig import UnassociatedHitsDecoratorCfg
129 unassociatedHitsDecorator = acc.getPrimaryAndMerge(UnassociatedHitsDecoratorCfg(flags,
130 name='SCTxAOD_unassociatedHitsDecorator',
131 UnassociatedHitsGetter = unassociatedHitsGetterTool))
132 augmentationTools.append(unassociatedHitsDecorator)
133
134 from DerivationFrameworkJetEtMiss.JetToolConfig import DistanceInTrainToolCfg
135 distanceInTrainTool = acc.getPrimaryAndMerge(DistanceInTrainToolCfg(flags))
136 augmentationTools.append(distanceInTrainTool)
137
138
139 thinningTools=[]
140
141 if flags.InDet.SCTxAODZmumuSkimming:
142 from DerivationFrameworkInDet.InDetToolsConfig import TrackParticleThinningCfg, MuonTrackParticleThinningCfg
143
144
145 thinning_expression = " && ".join(
146 [
147 "(InDetTrackParticles.pt > 10*GeV)",
148 "(abs(InDetTrackParticles.eta) < 2.5)",
149 ]
150 )
151 SCTVALID_TagAndProbeTrackParticleThinningTool = CompFactory.DerivationFramework.TagAndProbeTrackParticleThinning(name = "SCTVALID_TagAndProbeTrackParticleThinningTool",
152 SelectionString = thinning_expression,
153 d0SignifCut = 5.0,
154 z0Cut = 10.0,
155 StreamName = kwargs['StreamName'])
156 acc.addPublicTool(SCTVALID_TagAndProbeTrackParticleThinningTool)
157 thinningTools.append(SCTVALID_TagAndProbeTrackParticleThinningTool)
158
159
160 SCTVALID_DTTrackParticleThinningTool = acc.getPrimaryAndMerge(TrackParticleThinningCfg(flags,
161 name = "SCTVALID_DTTrackParticleThinningTool",
162 StreamName = kwargs['StreamName'],
163 SelectionString = "InDetDisappearingTrackParticles.pt>5*GeV",
164 InDetTrackParticlesKey = "InDetDisappearingTrackParticles"))
165 thinningTools.append(SCTVALID_DTTrackParticleThinningTool)
166
167
168 SCTVALID_MuonTPThinningTool = acc.getPrimaryAndMerge(MuonTrackParticleThinningCfg(flags,
169 name = "SCTVALID_MuonTPThinningTool",
170 StreamName = kwargs['StreamName'],
171 MuonKey = "Muons"))
172 thinningTools.append(SCTVALID_MuonTPThinningTool)
173
174
175 SCTVALIDTriggerSkimmingTool = acc.getPrimaryAndMerge(SCTVALIDTriggerSkimmingToolCfg(flags,
176 name = "SCTVALIDTriggerSkimmingTool"))
177
178 skimmingTools.append(SCTVALIDTriggerSkimmingTool)
179
180
181 muonRequirements = '( Muons.pt > 20*GeV ) && ( Muons.ptvarcone30 / Muons.pt < 0.15 ) && ( Muons.topoetcone20 / Muons.pt < 0.3 )'
182 muonExpression = '( count('+muonRequirements+') >= 1 )'
183 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import xAODStringSkimmingToolCfg
184 SCTVALIDSkimmingTool = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(flags,
185 name = "SCTVALIDSkimmingTool",
186 expression = muonExpression))
187 skimmingTools.append(SCTVALIDSkimmingTool)
188
189 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel(
190 name,
191 AugmentationTools=augmentationTools,
192 SkimmingTools=skimmingTools,
193 ThinningTools=thinningTools,
194 OutputLevel=INFO), sequenceName=SCTVALIDSequenceName)
195 return acc
196
197