10 from AthenaConfiguration.ComponentAccumulator 
import ComponentAccumulator
 
   11 from AthenaConfiguration.ComponentFactory 
import CompFactory
 
   12 from AthenaConfiguration.Enums 
import MetadataCategory
 
   16 from DerivationFrameworkEGamma.PhotonsCPDetailedContent 
import (
 
   17     PhotonsCPDetailedContent,
 
   22     """Configure the EGAM8 skimming tool""" 
   25     expression = 
" || ".
join(
 
   27             "(count(EGAM8_DiElectronMass >50.0*GeV) >=1)",
 
   28             "(count(EGAM8_MuonElectronMass >50.0*GeV) >=1)",
 
   31     print(
"EGAM8 skimming expression: ", expression)
 
   34         CompFactory.DerivationFramework.xAODStringSkimmingTool(
 
   35             name=
"EGAM8SkimmingTool", expression=expression
 
   43     """Configure the EGAM8 ee invariant mass augmentation tool""" 
   57     requirement_tag = 
" && ".
join(
 
   58         [
"(Electrons.DFCommonElectronsLHMedium)", 
"(Electrons.pt > 24.5*GeV)"]
 
   60     requirement_probe = 
"ForwardElectrons.pt > 19.5*GeV" 
   63         CompFactory.DerivationFramework.EGInvariantMassTool(
 
   64             name=
"EGAM8_ZEEMassTool",
 
   65             Object1Requirements=requirement_tag,
 
   66             Object2Requirements=requirement_probe,
 
   67             StoreGateEntryName=
"EGAM8_DiElectronMass",
 
   68             Mass1Hypothesis=0.511 * MeV,
 
   69             Mass2Hypothesis=0.511 * MeV,
 
   70             Container1Name=
"Electrons",
 
   71             Container2Name=
"ForwardElectrons",
 
   73             DoTransverseMass=
False,
 
   82     """Configure the EGAM8 mue invariant mass augmentation tool""" 
   95     requirement_muon = 
" && ".
join(
 
   99             "Muons.DFCommonMuonPassPreselection",
 
  102     requirement_electron = 
"ForwardElectrons.pt > 19.5*GeV" 
  105         CompFactory.DerivationFramework.EGInvariantMassTool(
 
  106             name=
"EGAM8_ZMuEMassTool",
 
  107             Object1Requirements=requirement_muon,
 
  108             Object2Requirements=requirement_electron,
 
  109             StoreGateEntryName=
"EGAM8_MuonElectronMass",
 
  110             Mass1Hypothesis=105 * MeV,
 
  111             Mass2Hypothesis=0.511 * MeV,
 
  112             Container1Name=
"Muons",
 
  113             Container2Name=
"ForwardElectrons",
 
  115             DoTransverseMass=
False,
 
  125     """Configure the derivation framework driving algorithm (kernel) 
  130     from DerivationFrameworkPhys.PhysCommonConfig 
import PhysCommonAugmentationsCfg
 
  134             flags, TriggerListsHelper=kwargs[
"TriggerListsHelper"]
 
  139     augmentationTools = []
 
  145     acc.addPublicTool(EGAM8ZeeMassTool)
 
  146     augmentationTools.append(EGAM8ZeeMassTool)
 
  149     acc.addPublicTool(EGAM8ZmueMassTool)
 
  150     augmentationTools.append(EGAM8ZmueMassTool)
 
  155     from DerivationFrameworkCalo.DerivationFrameworkCaloConfig 
import (
 
  156         CaloDecoratorKernelCfg)
 
  159     from DerivationFrameworkEGamma.EGammaToolsConfig 
import (
 
  160         EGammaCookieCutClusterToolCfg)
 
  161     cookieCutTool = acc.popToolsAndMerge(
 
  164                                       StoreInputMoments=
True,
 
  165                                       StoreCookedMoments=
True,
 
  167     acc.addPublicTool(cookieCutTool)
 
  168     augmentationTools.append(cookieCutTool)
 
  172     streamName = kwargs[
"StreamName"]
 
  175     if flags.Derivation.Egamma.doTrackThinning:
 
  176         from DerivationFrameworkInDet.InDetToolsConfig 
import (
 
  177             TrackParticleThinningCfg,
 
  178             MuonTrackParticleThinningCfg,
 
  179             TauTrackParticleThinningCfg,
 
  182         TrackThinningKeepElectronTracks = 
True 
  183         TrackThinningKeepPhotonTracks = 
True 
  184         TrackThinningKeepAllElectronTracks = 
False 
  185         TrackThinningKeepJetTracks = 
False 
  186         TrackThinningKeepMuonTracks = 
True 
  187         TrackThinningKeepTauTracks = 
False 
  188         TrackThinningKeepPVTracks = 
False 
  191         if TrackThinningKeepElectronTracks:
 
  192             EGAM8ElectronTPThinningTool = (
 
  193                 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
 
  194                     name=
"EGAM8ElectronTPThinningTool",
 
  195                     StreamName=streamName,
 
  197                     GSFTrackParticlesKey=
"GSFTrackParticles",
 
  198                     InDetTrackParticlesKey=
"InDetTrackParticles",
 
  199                     SelectionString=
"Electrons.pt > 0*GeV",
 
  204             acc.addPublicTool(EGAM8ElectronTPThinningTool)
 
  205             thinningTools.append(EGAM8ElectronTPThinningTool)
 
  209         if TrackThinningKeepAllElectronTracks:
 
  210             EGAM8ElectronTPThinningTool2 = (
 
  211                 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
 
  212                     name=
"EGAM8ElectronTPThinningTool2",
 
  213                     StreamName=streamName,
 
  215                     GSFTrackParticlesKey=
"GSFTrackParticles",
 
  216                     InDetTrackParticlesKey=
"InDetTrackParticles",
 
  217                     SelectionString=
"Electrons.pt > 4*GeV",
 
  222             acc.addPublicTool(EGAM8ElectronTPThinningTool2)
 
  223             thinningTools.append(EGAM8ElectronTPThinningTool2)
 
  226         if TrackThinningKeepPhotonTracks:
 
  227             EGAM8PhotonTPThinningTool = (
 
  228                 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
 
  229                     name=
"EGAM8PhotonTPThinningTool",
 
  230                     StreamName=streamName,
 
  232                     GSFTrackParticlesKey=
"GSFTrackParticles",
 
  233                     InDetTrackParticlesKey=
"InDetTrackParticles",
 
  234                     GSFConversionVerticesKey=
"GSFConversionVertices",
 
  235                     SelectionString=
"Photons.pt > 0*GeV",
 
  240             acc.addPublicTool(EGAM8PhotonTPThinningTool)
 
  241             thinningTools.append(EGAM8PhotonTPThinningTool)
 
  244         if TrackThinningKeepJetTracks:
 
  245             EGAM8JetTPThinningTool = (
 
  246                 CompFactory.DerivationFramework.JetTrackParticleThinning(
 
  247                     name=
"EGAM8JetTPThinningTool",
 
  248                     StreamName=streamName,
 
  249                     JetKey=
"AntiKt4EMPFlowJets",
 
  250                     InDetTrackParticlesKey=
"InDetTrackParticles",
 
  253             acc.addPublicTool(EGAM8JetTPThinningTool)
 
  254             thinningTools.append(EGAM8JetTPThinningTool)
 
  257         if TrackThinningKeepMuonTracks:
 
  258             EGAM8MuonTPThinningTool = acc.getPrimaryAndMerge(
 
  261                     name=
"EGAM8MuonTPThinningTool",
 
  262                     StreamName=streamName,
 
  264                     InDetTrackParticlesKey=
"InDetTrackParticles",
 
  267             thinningTools.append(EGAM8MuonTPThinningTool)
 
  270         if TrackThinningKeepTauTracks:
 
  271             EGAM8TauTPThinningTool = acc.getPrimaryAndMerge(
 
  274                     name=
"EGAM8TauTPThinningTool",
 
  275                     StreamName=streamName,
 
  278                     InDetTrackParticlesKey=
"InDetTrackParticles",
 
  279                     DoTauTracksThinning=
True,
 
  280                     TauTracksKey=
"TauTracks",
 
  283             thinningTools.append(EGAM8TauTPThinningTool)
 
  286         thinning_expression = 
" && ".
join(
 
  288                 "(InDetTrackParticles.DFCommonTightPrimary)",
 
  289                 "(abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3.0*mm)",
 
  290                 "(InDetTrackParticles.pt>10*GeV)",
 
  293         if TrackThinningKeepPVTracks:
 
  294             EGAM8TPThinningTool = acc.getPrimaryAndMerge(
 
  297                     name=
"EGAM8TPThinningTool",
 
  298                     StreamName=streamName,
 
  299                     SelectionString=thinning_expression,
 
  300                     InDetTrackParticlesKey=
"InDetTrackParticles",
 
  303             thinningTools.append(EGAM8TPThinningTool)
 
  308         truth_cond_WZH = 
" && ".
join(
 
  309             [
"(abs(TruthParticles.pdgId) >= 23)", 
"(abs(TruthParticles.pdgId) <= 25)"]
 
  312         truth_cond_lep = 
" && ".
join(
 
  313             [
"(abs(TruthParticles.pdgId) >= 11)", 
"(abs(TruthParticles.pdgId) <= 16)"]
 
  316         truth_cond_top = 
"(abs(TruthParticles.pdgId) ==  6)" 
  318         truth_cond_gam = 
" && ".
join(
 
  319             [
"(TruthParticles.isPhoton)", 
"(TruthParticles.pt > 1*GeV)"]
 
  322         truth_cond_finalState = 
" && ".
join(
 
  323             [
"(TruthParticles.isGenStable)", 
"(!TruthParticles.isSimulationParticle)"]
 
  339             + truth_cond_finalState
 
  342         print(
"EGAM8 truth thinning expression: ", truth_expression)
 
  344         EGAM8TruthThinningTool = CompFactory.DerivationFramework.GenericTruthThinning(
 
  345             name=
"EGAM8TruthThinningTool",
 
  346             StreamName=streamName,
 
  347             ParticleSelectionString=truth_expression,
 
  348             PreserveDescendants=
False,
 
  349             PreserveGeneratorDescendants=
True,
 
  350             PreserveAncestors=
True,
 
  352         acc.addPublicTool(EGAM8TruthThinningTool)
 
  353         thinningTools.append(EGAM8TruthThinningTool)
 
  357     acc.addPublicTool(skimmingTool)
 
  361         CompFactory.DerivationFramework.DerivationKernel(
 
  363             SkimmingTools=[skimmingTool],
 
  364             AugmentationTools=augmentationTools,
 
  365             ThinningTools=thinningTools,
 
  382     from DerivationFrameworkPhys.TriggerListsHelper 
import TriggerListsHelper
 
  384     EGAM8TriggerListsHelper = TriggerListsHelper(flags)
 
  391             StreamName=
"StreamDAOD_EGAM8",
 
  392             TriggerListsHelper=EGAM8TriggerListsHelper,
 
  397     from OutputStreamAthenaPool.OutputStreamConfig 
import OutputStreamCfg
 
  398     from xAODMetaDataCnv.InfileMetaDataConfig 
import SetupMetaDataForStreamCfg
 
  399     from DerivationFrameworkCore.SlimmingHelper 
import SlimmingHelper
 
  402         "EGAM8SlimmingHelper",
 
  403         NamesAndTypes=flags.Input.TypedCollections,
 
  412     EGAM8SlimmingHelper.AllVariables = [
 
  417         "ForwardElectronClusters",
 
  425         EGAM8SlimmingHelper.AllVariables += [
 
  429             "egammaTruthParticles",
 
  440     EGAM8SlimmingHelper.SmartCollections = [
 
  446         "InDetTrackParticles",
 
  447         "AntiKt4EMPFlowJets",
 
  448         "BTagging_AntiKt4EMPFlow",
 
  449         "MET_Baseline_AntiKt4EMPFlow",
 
  452         EGAM8SlimmingHelper.SmartCollections += [
 
  454             "AntiKt4TruthDressedWZJets",
 
  460     EGAM8SlimmingHelper.ExtraVariables += [
 
  461         "Muons.ptcone20.ptcone30.ptcone40.etcone20.etcone30.etcone40" 
  465     EGAM8SlimmingHelper.ExtraVariables += [
 
  466         "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
 
  467         "GSFConversionVertices.trackParticleLinks",
 
  471     EGAM8SlimmingHelper.ExtraVariables += [
"PrimaryVertices.x.y.sumPt2"]
 
  474     EGAM8SlimmingHelper.ExtraVariables += [
 
  475         "AntiKt4PV0TrackJets.pt.eta.phi.e.m.btaggingLink.constituentLinks" 
  479     EGAM8SlimmingHelper.ExtraVariables += [
 
  480         "TopoClusterIsoCentralEventShape.Density",
 
  481         "TopoClusterIsoForwardEventShape.Density",
 
  482         "NeutralParticleFlowIsoCentralEventShape.Density",
 
  483         "NeutralParticleFlowIsoForwardEventShape.Density",
 
  487     EGAM8SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
 
  490     from DerivationFrameworkCalo.DerivationFrameworkCaloConfig 
import (
 
  492         getClusterEnergyPerLayerDecorations,
 
  496     print(
"EGAM8 gain decorations: ", gainDecorations)
 
  497     EGAM8SlimmingHelper.ExtraVariables.extend(gainDecorations)
 
  499     print(
"EGAM8 cluster energy decorations: ", clusterEnergyDecorations)
 
  500     EGAM8SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
 
  504         EGAM8SlimmingHelper.ExtraVariables += [
 
  505             "MuonTruthParticles.e.px.py.pz.status.pdgId.truthOrigin.truthType" 
  508         EGAM8SlimmingHelper.ExtraVariables += [
 
  509             "Photons.truthOrigin.truthType.truthParticleLink" 
  513     if flags.Derivation.Egamma.doEventInfoSlimming:
 
  514         EGAM8SlimmingHelper.SmartCollections.append(
"EventInfo")
 
  516         EGAM8SlimmingHelper.AllVariables += [
"EventInfo"]
 
  519     EGAM8SlimmingHelper.IncludeEGammaTriggerContent = 
True 
  520     EGAM8SlimmingHelper.IncludeMuonTriggerContent = 
True 
  524     if flags.Trigger.EDMVersion == 2:
 
  525         from DerivationFrameworkPhys.TriggerMatchingCommonConfig 
import AddRun2TriggerMatchingToSlimmingHelper
 
  527                                                OutputContainerPrefix = 
"TrigMatch_",
 
  528                                                TriggerList = EGAM8TriggerListsHelper.Run2TriggerNamesNoTau)
 
  530     if flags.Trigger.EDMVersion == 3 
or (flags.Trigger.EDMVersion == 2 
and flags.Trigger.doEDMVersionConversion):
 
  531         from TrigNavSlimmingMT.TrigNavSlimmingMTConfig 
import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
 
  535     EGAM8SlimmingHelper.StaticContent = [
 
  536         "CaloCellContainer#AllCalo",
 
  537         "CaloClusterCellLinkContainer#egammaClusters_links",
 
  538         "CaloClusterCellLinkContainer#ForwardElectronClusters_links",
 
  539         "xAOD::CaloClusterContainer#ForwardElectronCookieCutClusters",
 
  540         "xAOD::CaloClusterAuxContainer#ForwardElectronCookieCutClustersAux.",
 
  543     EGAM8ItemList = EGAM8SlimmingHelper.GetItemList()
 
  548             ItemList=EGAM8ItemList,
 
  549             AcceptAlgs=[
"EGAM8Kernel"],
 
  556             AcceptAlgs=[
"EGAM8Kernel"],
 
  558                 MetadataCategory.CutFlowMetaData,
 
  559                 MetadataCategory.TruthMetaData,