5 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
6 from AthenaConfiguration.ComponentFactory
import CompFactory
7 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD, addToESD
8 from JetRecConfig.JetDefinition
import JetInputConstitSeq, JetInputConstit, xAODType, JetDefinition
9 from JetRecConfig.JetDefinition
import JetModifier, JetInputExternal
11 from JetRecConfig.JetRecConfig
import getPseudoJetAlgs
12 from JetRecConfig.StandardJetMods
import stdJetModifiers
13 from JetRecConfig
import JetRecConfig
14 from JetRecConfig.DependencyHelper
import solveDependencies
15 from HIGlobal.HIGlobalConfig
import HIEventShapeMakerCfg, HIEventShapeMapToolCfg
16 from AthenaCommon.Logging
import logging
17 __log = logging.getLogger(
'HIJetRecConfigCA')
21 """Function to equip HI cluster builder from towers and cells, adds to output AOD stream."""
25 kwargs.setdefault(
"CaloCellContainerKey",
"AllCalo")
26 kwargs.setdefault(
"OutputContainerKey", flags.HeavyIon.Jet.Internal.ClusterKey)
29 from CaloRec.CaloRecoConfig
import CaloRecoCfg
31 from CaloRec.CaloTowerMakerConfig
import CaloTowerMakerCfg
33 tower_key = towerMaker.TowerContainerName
35 HIClusterMaker = CompFactory.HIClusterMaker(
"HIClusterMaker",
36 InputTowerKey=tower_key,
40 output = [
"xAOD::CaloClusterContainer#"+kwargs[
"OutputContainerKey"],
41 "xAOD::CaloClusterAuxContainer#"+kwargs[
"OutputContainerKey"]+
"Aux."]
45 acc.addEventAlgo(HIClusterMaker, primary=
True)
49 """Function to copy HI clusters to modify them in derivations."""
53 kwargs.setdefault(
"InputContainerKey",
"HIClusters")
54 kwargs.setdefault(
"OutputContainerKey", flags.HeavyIon.Jet.Internal.ClusterKey)
56 HIClusterCopier = CompFactory.HIClusterCopier(
"HIClusterCopier",
59 acc.addEventAlgo(HIClusterCopier, primary=
True)
63 kwargs.setdefault(
"objtype", xAODType.CaloCluster)
64 kwargs.setdefault(
"modifiers", [])
65 kwargs.setdefault(
"inputname", flags.HeavyIon.Jet.Internal.ClusterKey)
66 kwargs.setdefault(
"outputname", flags.HeavyIon.Jet.Internal.ClusterKey)
67 kwargs.setdefault(
"label",
"HI")
69 jetConstit = JetInputConstitSeq(name, **kwargs)
71 from JetRecConfig.StandardJetConstits
import stdConstitDic
72 stdConstitDic.setdefault(name, jetConstit)
78 """Returns jet definition for calo jets, with already resolved dependencies."""
80 ptmin_dict = {2:7000, 3:7000, 4:7000, 6:7000, 10:50000}
81 if jetradius
not in ptmin_dict
and "ptmin" not in kwargs:
82 __log.warning(
"jetradius "+
str(jetradius)+
" is not in the dictionary for ptmin; setting ptmin to 7000")
83 kwargs.setdefault(
"ptmin", ptmin_dict.get(jetradius, 7000))
84 kwargs.setdefault(
"radius",
float(jetradius)/10.)
86 kwargs.setdefault(
"algorithm",
"AntiKt")
87 kwargs.setdefault(
"prefix",
"")
88 kwargs.setdefault(
"suffix",
"")
94 kwargs.setdefault(
"objtype", xAODType.TrackParticle)
95 kwargs.setdefault(
"containername",
"JetSelectedTracks")
97 jetConstit = JetInputConstit(name, **kwargs)
102 """Returns jet definition for track jets, with already resolved dependencies."""
104 import JetRecTools.JetRecToolsConfig
as jrtcfg
105 JetInputExternal(
"JetSelectedTracks",
106 xAODType.TrackParticle,
108 prereqs=[
"InDetTrackParticles"],
109 algoBuilder=
lambda jdef, _: jrtcfg.getTrackSelAlg(jdef, trackSelOpt=
False))
110 kwargs.setdefault(
"ptmin", 5000)
113 return HICaloJetDef(flags, jetradius=jetradius, **kwargs)
117 """Creates a pseudo jet algorithm"""
120 kwargs.setdefault(
"name",
"pjcs"+flags.HeavyIon.Jet.Internal.ClusterKey)
121 kwargs.setdefault(
"InputContainer", flags.HeavyIon.Jet.Internal.ClusterKey)
122 kwargs.setdefault(
"OutputContainer",
"PseudoJet"+flags.HeavyIon.Jet.Internal.ClusterKey)
123 kwargs.setdefault(
"Label",
"LCTopo")
124 kwargs.setdefault(
"SkipNegativeEnergy",
False)
125 kwargs.setdefault(
"TreatNegativeEnergyAsGhost",
True)
127 acc.addEventAlgo(CompFactory.PseudoJetAlgorithm(**kwargs))
132 """Creates a pseudo track jet algorithm."""
135 kwargs.setdefault(
"InputContainer",
"HIJetTracks")
136 kwargs.setdefault(
"OutputContainer",
"PseudoTracks")
137 kwargs.setdefault(
"Label",
"Tracks")
138 kwargs.setdefault(
"SkipNegativeEnergy",
True)
140 acc.addEventAlgo(CompFactory.PseudoJetAlgorithm(name, **kwargs))
145 """Creates a tool for clustering."""
148 if jetDef
is not None:
149 kwargs.setdefault(
"JetAlgorithm", jetDef.algorithm)
150 kwargs.setdefault(
"JetRadius", jetDef.radius)
151 kwargs.setdefault(
"PtMin", jetDef.ptmin)
152 kwargs.setdefault(
"GhostArea", 0.01)
153 kwargs.setdefault(
"InputPseudoJets",
"PseudoJet"+flags.HeavyIon.Jet.Internal.ClusterKey+
"_GhostTracks")
155 acc.setPrivateTools(CompFactory.JetClusterer(name, **kwargs))
160 """Creates a jet reconstruction algorithm."""
163 if "Provider" not in kwargs:
165 kwargs.setdefault(
"Provider", jclust)
166 if "Modifiers" not in kwargs:
167 kwargs.setdefault(
"Modifiers", JetRecConfig.getJetModifierTools(jetDef))
168 if "OutputContainer" not in kwargs:
169 kwargs.setdefault(
"OutputContainer", jetDef.fullname())
170 kwargs.setdefault(
"name",
"JRA_build"+kwargs[
"OutputContainer"])
172 acc.addEventAlgo(CompFactory.JetRecAlg(**kwargs))
177 """Creates a tool to copy jets."""
180 kwargs.setdefault(
"InputJets",
"")
181 kwargs.setdefault(
"DecorDeps", [])
182 kwargs.setdefault(
"ShallowCopy",
False)
183 kwargs.setdefault(
"ShallowIO",
False)
185 acc.setPrivateTools(CompFactory.JetCopier(name, **kwargs))
190 """Creates an algorithm to copy jets."""
193 if "Provider" not in kwargs:
194 jcopy = acc.popToolsAndMerge(
HIJetCopierCfg(flags, InputJets=jetDef_in.fullname()))
195 kwargs.setdefault(
"Provider", jcopy)
201 """Updates the stdJetModifiers dictionary, based on the provided name.
202 Some of the modifiers expect certain kwargs.
203 Some of the modifiers ignore kwargs which makes the code simpler."""
205 if "Filter:" in name:
208 if "JetDeltaRLabel:" in name:
211 if "JetDeltaRInitialLabel:" in name:
214 if "HIJetCalib:" in name:
216 if "HIJetCalib" not in stdJetModifiers:
219 if name
in stdJetModifiers:
223 if name ==
"HIJetAssoc":
224 stdJetModifiers.update(
225 HIJetAssoc=JetModifier(
"HIJetDRAssociationTool",
226 "HIJetDRAssociation",
227 ContainerKey=flags.HeavyIon.Jet.Internal.ClusterKey,
229 AssociationName=flags.HeavyIon.Jet.Internal.ClusterKey+
"_DR8Assoc"))
232 if name ==
"HIJetMaxOverMean":
233 if "jetDef" not in kwargs:
235 "HIJetMaxOverMean needs 'jetDef' in its kwargs; HIJetMaxOverMean is not added to stdJetModifiers")
237 stdJetModifiers.update(
238 HIJetMaxOverMean=JetModifier(
"HIJetMaxOverMeanTool",
240 JetContainer=kwargs[
"jetDef"].fullname()))
243 if name ==
"HIJetDiscrim":
244 stdJetModifiers.update(
245 HIJetDiscrim=JetModifier(
"HIJetDiscriminatorTool",
246 "HIJetDiscriminator",
248 MinimumETMaxCut=3000))
252 if "Modulator" not in kwargs
or "EventShapeMapTool" not in kwargs
or \
253 "Subtractor" not in kwargs
or "EventShapeKey" not in kwargs:
255 "subtr0 needs 'Modulator', 'EventShapeMapTool', 'Subtractor', and 'EventShapeKey' in its kwargs; subtr0 is not added to stdJetModifiers")
258 stdJetModifiers.update(
259 subtr0=JetModifier(
"HIJetConstituentSubtractionTool",
260 "HICS_HIEventShapeWeighted_iter0",
261 MomentName=
"JetSubtractedScaleMomentum",
263 ApplyOriginCorrection=
True,
267 if name ==
"HIJetCalib":
268 stdJetModifiers.update(
269 HIJetCalib=JetModifier(
"JetCalibrationTool",
270 "HICalibTool_{modspec}",
271 JetCollection=
lambda _, modspec:
"AntiKt{}HI".
format(modspec.split(
'___')[0])
if modspec.split(
'___')[0]
in flags.HeavyIon.Jet.CaliRValues
else "AntiKt4HI",
272 PrimaryVerticesContainerName=
"",
273 ConfigFile=
'JES_MC16_HI_Jan2021_5TeV.config',
274 CalibSequence=
lambda _, modspec: modspec.split(
'___')[1],
275 IsData=
lambda _, modspec: modspec.split(
'___')[2] ==
'True'))
279 if "Modulator" not in kwargs
or "EventShapeMapTool" not in kwargs
or \
280 "Subtractor" not in kwargs
or "EventShapeKey" not in kwargs:
282 "subtr1 needs 'Modulator', 'EventShapeMapTool', 'Subtractor', and 'EventShapeKey' in its kwargs; subtr1 is not added to stdJetModifiers")
285 stdJetModifiers.update(
286 subtr1=JetModifier(
"HIJetConstituentSubtractionTool",
287 "HICS_HIEventShapeWeighted_iter1",
288 MomentName=
"JetSubtractedScaleMomentum",
290 ApplyOriginCorrection=
True,
294 if name ==
"consmod":
295 if "ClusterKey" not in kwargs
or "Subtractor" not in kwargs:
297 "consmod needs 'ClusterKey' and 'Subtractor' in its kwargs; consmod is not added to stdJetModifiers")
300 stdJetModifiers.update(
302 "HIJetConstituentModifierTool",
303 "HIJetConstituentModifierTool_final",
304 ApplyOriginCorrection=
True,
308 __log.warning(
"updateStdJetModifier does not know modifier "+
309 name+
"; it is not added to stdJetModifiers")
314 """Clones jet definitions based on the template.
315 Updates stdJetModifiers if necessary.
316 Overwrites suffix and modifiers, and return jet definition with already resolved dependencies."""
318 jetDef_new = jetDef_in.clone()
320 if "prefix" in kwargs:
321 jetDef_new.prefix = kwargs[
"prefix"]
322 if "suffix" in kwargs:
323 jetDef_new.suffix = kwargs[
"suffix"]
324 if "modifiers" in kwargs:
325 jetDef_new.modifiers = []
326 for modifier
in kwargs[
"modifiers"]:
328 jetDef_new.modifiers.append(modifier)
334 """Provides modulator tool without any modulations."""
336 acc.setPrivateTools(CompFactory.HIUEModulatorTool(
'NullUEModulator',
345 """Provides modulator tool."""
347 kwargs.setdefault(
"harmonics", flags.HeavyIon.Jet.HarmonicsForSubtraction)
348 if len(kwargs[
"harmonics"]) == 0:
351 kwargs.setdefault(
"name",
"Modulator_"+mod_key+
352 "".
join([
"_V"+
str(h)
for h
in kwargs[
"harmonics"]]))
353 if suffix
is not None:
354 kwargs[
"name"] +=
'_'+suffix
355 kwargs.setdefault(
"DoV2", 2
in kwargs[
"harmonics"])
356 kwargs.setdefault(
"DoV3", 3
in kwargs[
"harmonics"])
357 kwargs.setdefault(
"DoV4", 4
in kwargs[
"harmonics"])
358 del kwargs[
"harmonics"]
359 kwargs.setdefault(
"EventShapeKey", mod_key)
361 acc.setPrivateTools(CompFactory.HIUEModulatorTool(**kwargs))
363 if 'label' in kwargs:
364 label = kwargs[
'label']
366 if key
not in [
"name",
"DoV2",
"DoV3",
"DoV4",
"EventShapeKey"]:
369 stdJetModifiers[label] = JetModifier(
"HIUEModulatorTool", **kwargs)
375 """Provides tool for cluster subtraction."""
378 kwargs.setdefault(
"ConfigDir",
"HIJetCorrection/")
379 kwargs.setdefault(
"UseSamplings",
False)
380 if "InputFile" not in kwargs:
381 from HIJetRec.HIJetRecUtilsCA
import getHIClusterGeoWeightFile
384 acc.setPrivateTools(CompFactory.HIJetClusterSubtractorTool(name, **kwargs))
389 """Provides tool for cell subtraction."""
392 acc.setPrivateTools(CompFactory.HIJetCellSubtractorTool(name, **kwargs))
397 """Common function for clsuter and cell subtraction configuration."""
406 """Provides tool for event shape iteration.
407 Also saves some tool, so they can be used later."""
410 kwargs.setdefault(
"InputEventShapeKey",
"HIEventShape_Weighted")
411 kwargs.setdefault(
"CaloJetSeedContainerKey",
"")
413 out_shape_name = kwargs[
"InputEventShapeKey"]
414 if suffix
is not None:
415 out_shape_name +=
'_'+suffix
416 mod_shape_key = out_shape_name+
'_Modulate'
418 if 'Modulator' not in kwargs:
420 flags, mod_key=mod_shape_key, suffix=suffix))
421 kwargs.setdefault(
'Modulator', modulator)
422 if "Subtractor" not in kwargs:
424 kwargs.setdefault(
"Subtractor", sub_tool)
425 if "EventShapeMapTool" not in kwargs:
427 kwargs.setdefault(
"EventShapeMapTool", map_tool)
428 kwargs.setdefault(
"OutputEventShapeKey", out_shape_name)
429 kwargs.setdefault(
"AssociationKey", flags.HeavyIon.Jet.Internal.ClusterKey+
"_DR8Assoc")
430 kwargs.setdefault(
"ModulationScheme", 1)
431 kwargs.setdefault(
"RemodulateUE",
True)
432 kwargs.setdefault(
"ShallowCopy",
False)
433 kwargs.setdefault(
"ModulationEventShapeKey", mod_shape_key)
434 kwargs.setdefault(
"TrackJetSeedContainerKey",
"")
436 acc.setPrivateTools(CompFactory.HIEventShapeJetIteration(
437 "HIJetIteration_"+out_shape_name, **kwargs))
440 jm_dict = {
"Modulator": kwargs[
"Modulator"],
441 "EventShapeMapTool": kwargs[
"EventShapeMapTool"],
442 "Subtractor": kwargs[
"Subtractor"],
443 "EventShapeKey": kwargs[
"OutputEventShapeKey"]}
449 """Provides track selection algorithm for track jet reconstruction."""
452 if "TrackSelector" not in kwargs:
453 from InDetConfig.InDetTrackSelectionToolConfig
import HI_InDetTrackSelectionToolForHITrackJetsCfg
455 kwargs.setdefault(
"TrackSelector", tracksel)
456 kwargs.setdefault(
"InputContainer",
"InDetTrackParticles")
457 kwargs.setdefault(
"OutputContainer",
"HIJetTracks")
458 kwargs.setdefault(
"DecorDeps", [])
460 acc.addEventAlgo(CompFactory.JetTrackSelectionAlg(name, **kwargs))
465 """Provides tool for cluster moments."""
468 kwargs.setdefault(
"MinBadLArQuality", 4000)
469 kwargs.setdefault(
"MomentsNames", [
"CENTER_MAG",
490 acc.setPrivateTools(CompFactory.CaloClusterMomentsMaker(name, **kwargs))
495 """Provides tool for cell subtraction.
496 Re-uses tool for cluster subtraction."""
502 """Provides tool for cluster subtraction."""
505 kwargs.setdefault(
'EventShapeKey',
'EventShapeKey')
506 kwargs.setdefault(
'ClusterKey', flags.HeavyIon.Jet.Internal.ClusterKey)
507 kwargs.setdefault(
'OutClusterKey',
'ClusterKey_deep')
508 kwargs.setdefault(
'UpdateOnly',
False)
509 kwargs.setdefault(
'ApplyOriginCorrection',
True)
510 kwargs.setdefault(
'SetMoments',
False)
511 if 'Modulator' not in kwargs:
513 kwargs.setdefault(
'Modulator', modulator)
514 if "EventShapeMapTool" not in kwargs:
516 kwargs.setdefault(
"EventShapeMapTool", map_tool)
517 if "Subtractor" not in kwargs:
519 kwargs.setdefault(
"Subtractor", sub_tool)
520 if kwargs[
"SetMoments"]
and "ClusterCorrectionTools" not in kwargs:
521 clusterCorrectionTools = acc.popToolsAndMerge(
523 kwargs.setdefault(
"ClusterCorrectionTools", [clusterCorrectionTools])
525 acc.setPrivateTools(CompFactory.HIClusterSubtraction(name, **kwargs))
530 """Configures Heavy Ion Jet reconstruction."""
533 if not flags.HeavyIon.isDerivation:
542 eventshapeKey = flags.HeavyIon.HIJetPrefix+
"HIEventShapeWeighted"
544 name=
"HIEventShapeMaker_Weighted",
546 InputTowerKey=flags.HeavyIon.Jet.Internal.ClusterKey,
547 OutputContainerKey=eventshapeKey))
551 jetDef2 =
HICaloJetDef(flags, jetradius=2, prefix=flags.HeavyIon.HIJetPrefix, suffix=
"_Unsubtracted")
555 jetRlist = flags.HeavyIon.Jet.RValues
556 for jetR
in jetRlist:
557 jetDef.append(
HICaloJetDef(flags, jetradius=jetR, prefix=flags.HeavyIon.HIJetPrefix, suffix=
"_Unsubtracted"))
558 __log.info(
"HI Jet Collection for Reco: "+jetDef[-1].fullname())
564 pseudoTrkJetCont =
"HIJetTracks"
565 pseudoGhostTrks =
"PseudoJetGhostTracks"
569 flags, name=
"GhostTrackPseudoJets", InputContainer=pseudoTrkJetCont, OutputContainer=pseudoGhostTrks, Label=
"GhostTrack"))
573 pjContNames = [
"PseudoJet"+flags.HeavyIon.Jet.Internal.ClusterKey,pseudoGhostTrks]
575 mergeAlg = CompFactory.PseudoJetMerger(
576 "PJmerge_HIGhostTrack",
577 InputPJContainers = pjContNames,
578 OutputContainer =
"PseudoJet"+flags.HeavyIon.Jet.Internal.ClusterKey+
"_GhostTracks"
580 acc.addEventAlgo(mergeAlg)
589 prefix=flags.HeavyIon.HIJetPrefix,
591 modifiers=[
"HIJetAssoc",
"HIJetMaxOverMean",
"HIJetDiscrim",
"Filter:5000"])
597 InputEventShapeKey=eventshapeKey,
598 CaloJetSeedContainerKey=jetDef_seed0.fullname())
599 iter0 = acc.popToolsAndMerge(acc_iter0)
600 acc.addEventAlgo(CompFactory.JetAlgorithm(
"jetalgHI_iter0", Tools=[iter0]))
607 if not flags.Input.isMC:
608 calib_seq +=
"_Insitu"
612 prefix=flags.HeavyIon.HIJetPrefix,
614 modifiers=[
"HIJetAssoc",
"subtr0",
"HIJetCalib:{}___{}___{}".
format(2, calib_seq,
not flags.Input.isMC),
"Filter:{}".
format(flags.HeavyIon.Jet.SeedPtMin)])
618 if flags.HeavyIon.Jet.doTrackJetSeed:
619 pseudoTrks =
"PseudoTracks"
622 flags, InputContainer=pseudoTrkJetCont, OutputContainer=pseudoTrks))
626 modifiers=[
"HIJetAssoc",
"Filter:{}".
format(flags.HeavyIon.Jet.TrackJetPtMin),
"Sort"])
627 trkJetSeedCont = jetDef_trk.fullname()
631 InputPseudoJets=pseudoTrks))
632 acc.merge(
HIJetAlgCfg(flags, jetDef_trk, Provider=trkJetClust))
639 InputEventShapeKey=eventshapeKey,
640 CaloJetSeedContainerKey=jetDef_seed1.fullname(),
641 TrackJetSeedContainerKey=trkJetSeedCont)
642 iter1 = acc.popToolsAndMerge(acc_iter1)
643 acc.addEventAlgo(CompFactory.JetAlgorithm(
"jetalgHI_iter1", Tools=[iter1]))
647 suffix=
"iter_egamma",
649 InputEventShapeKey=flags.HeavyIon.Global.EventShape,
650 OutputEventShapeKey=flags.HeavyIon.Egamma.EventShape,
651 CaloJetSeedContainerKey=jetDef_seed1.fullname())
652 iter1_eg = acc.popToolsAndMerge(acc_iter1_eg)
653 acc.addEventAlgo(CompFactory.JetAlgorithm(
"jetalgHI_iter1_egamma", Tools=[iter1_eg]))
656 cluster_key_eGamma_deep = flags.HeavyIon.Jet.Internal.ClusterKey+
"_eGamma_deep"
657 if not flags.HeavyIon.isDerivation:
658 subtrToCelltool = acc.popToolsAndMerge(
660 name=
"HIClusterSubtraction_egamma",
661 EventShapeKey=jm_dict1_eg[
"EventShapeKey"],
662 OutClusterKey=cluster_key_eGamma_deep,
663 Modulator=jm_dict1[
"Modulator"],
664 EventShapeMapTool=jm_dict1[
"EventShapeMapTool"],
666 ApplyOriginCorrection=
False)
668 acc.addEventAlgo(CompFactory.JetAlgorithm(
"jetalgHI_subtrToCellTool", Tools=[subtrToCelltool]))
674 clusterKey = cluster_key_eGamma_deep
675 if flags.HeavyIon.isDerivation:
676 clusterKey = flags.HeavyIon.Jet.Internal.ClusterKey
677 subtrToClusterTool = acc.popToolsAndMerge(
679 name=
"HIClusterSubtraction_final",
680 EventShapeKey=jm_dict1[
"EventShapeKey"],
681 ClusterKey=clusterKey,
682 OutClusterKey=flags.HeavyIon.Jet.ClusterKey,
683 Modulator=jm_dict1[
"Modulator"],
684 EventShapeMapTool=jm_dict1[
"EventShapeMapTool"],
685 ApplyOriginCorrection=
False)
687 acc.addEventAlgo(CompFactory.JetAlgorithm(
688 "jetalgHI_subtrToClusterTool", Tools=[subtrToClusterTool]))
692 ClusterKey=flags.HeavyIon.Jet.ClusterKey,
693 Subtractor=jm_dict1[
"Subtractor"])
696 if flags.HeavyIon.Jet.WriteHIClusters:
697 output_hicluster = [
"xAOD::CaloClusterContainer#"+flags.HeavyIon.Jet.ClusterKey,
698 "xAOD::CaloClusterAuxContainer#"+flags.HeavyIon.Jet.ClusterKey+
"Aux."]
699 acc.merge(
addToESD(flags, output_hicluster))
700 acc.merge(
addToAOD(flags, output_hicluster))
703 extramods = [
"Sort",
"Width",
"CaloEnergies",
"LArHVCorr",
"CaloQuality",
"TrackMoments",
"JVF",
"JVT"]
705 print(
"Printing flags: isDerivation: ", flags.HeavyIon.isDerivation,
"doHIBTagging: ", flags.HeavyIon.doHIBTagging,
"isMC: ", flags.Input.isMC,
"jet radius: ", jd.radius)
706 if flags.HeavyIon.isDerivation
and flags.HeavyIon.doHIBTagging
and jd.radius==0.4:
707 extramods += flags.HeavyIon.FTagModifiers
709 extramods += flags.HeavyIon.FTagTruthModifiers
712 prefix=flags.HeavyIon.HIJetPrefix,
714 modifiers=[
"subtr1",
"consmod",
"HIJetCalib:{}___{}___{}".
format(
str(
float(jd.radius)*10).
replace(
'.0',
''),calib_seq,
not flags.Input.isMC),
"Filter:{}".
format(flags.HeavyIon.Jet.RecoOutputPtMin)]+extramods)
715 if flags.HeavyIon.isDerivation
and flags.HeavyIon.doHIBTagging
and flags.Input.isMC
and jd.radius==0.4:
716 jetDef_final.ghostdefs += [
"Truth",
"BHadronsInitial",
"BHadronsFinal",
"BQuarksFinal",
"CHadronsInitial",
"CHadronsFinal",
"CQuarksFinal",
"TausFinal",
"TQuarksFinal",
"Partons"]
719 pjaList = pjaList[1:]
720 for pjalg
in pjaList:
721 if pjalg.Label==
'GhostTrack':
723 pjalg.name=
"GhostTrackPseudoJets"
724 pjalg.InputContainer=pseudoTrkJetCont
725 pjalg.OutputContainer=pseudoGhostTrks
726 if pjalg.Label==
'merged':
727 inpjcnt = pjalg.InputPJContainers
728 inpjcnt.remove(
'PseudoJetGhostJetSelectedTracks')
729 inpjcnt.append(pseudoGhostTrks)
730 pjalg.InputPJContainers = inpjcnt
731 acc.addEventAlgo(pjalg)
732 finalpjs =
str(pjalg.OutputContainer)
734 jetDef_final._internalAtt[
'finalPJContainer'] = finalpjs
736 acc.addEventAlgo(jetRecAlg)
740 output = [
"xAOD::JetContainer#"+jetDef_final.fullname(),
741 "xAOD::JetAuxContainer#"+jetDef_final.fullname()+
"Aux.-PseudoJet"]
746 if flags.HeavyIon.Jet.doTrackJetSeed:
747 output = [
"xAOD::JetContainer#"+jetDef_trk.fullname(),
748 "xAOD::JetAuxContainer#"+jetDef_trk.fullname()+
"Aux.-PseudoJet"]
755 """Returns the configured HIJetRecAlg instance corresponding to jetdef
757 IMPORTANT : jetdef must have its dependencies solved (i.e. it must result from solveDependencies() )
759 pjContNames = jetdef._internalAtt[
'finalPJContainer']
760 jclust = CompFactory.JetClusterer(
762 JetAlgorithm = jetdef.algorithm,
763 JetRadius = jetdef.radius,
764 PtMin = jetdef.ptmin,
765 InputPseudoJets = pjContNames,
767 JetInputType =
int(jetdef.inputdef.jetinputtype),
771 mods = JetRecConfig.getJetModifierTools(jetdef)
774 jra = CompFactory.JetRecAlg(
775 "jetrecalg_"+jetname,
778 OutputContainer = jetname,
780 jra.ExtraOutputs = [(
'xAOD::JetContainer',f
'{jetname}.Ghost{ghost}')
for ghost
in jetdef.ghostdefs]
785 if __name__ ==
"__main__":
786 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
787 from AthenaConfiguration.TestDefaults
import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
789 flags.Input.Files = [defaultTestFiles.d +
"/RecJobTransformTests/data18_hi.00367384.physics_HardProbes.daq.RAW._lb0145._SFO-8._0001.data"]
790 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
791 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
792 flags.Exec.MaxEvents = 5
793 flags.Concurrency.NumThreads = 1
798 flags.Jet.strictMode =
False
801 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
803 from InDetConfig.TrackRecoConfig
import InDetTrackRecoCfg
808 from JetRecConfig.JetRecConfig
import JetRecCfg
809 from JetRecConfig.StandardSmallRJets
import AntiKt4EMTopo
810 EMjet = AntiKt4EMTopo.clone()
811 EMjet.ghostdefs = [
"Track"]
814 from HIGlobal.HIGlobalConfig
import HIGlobalRecCfg
819 acc.printConfig(withDetails=
True, summariseProps=
True)
823 sys.exit(acc.run().isFailure())