""" putype is expected to be a string ! """ builder = createMcAodBuilder( name = "McAodBuilder"+putype, outMcEvtCollection = "GEN_AOD", # this is the input to the CnvTool outTruthParticles = "SpclMC"+putype, ) builder.CnvTool.SelectSignalType = PileUpClassification.fromString(putype) # min bias only objKeyStore.addStreamAOD("TruthParticleContainer","SpclMC"+putype) return builder # below, build a new TruthParticleContainer for each type of pile-up. # we get the list of existing ESD TruthParticleContainer, and guess its pile-up type # according to its suffix. inputTPContainer = objKeyStore['inputFile'].list("TruthParticleContainer") prefix = "TruthParticleContainer#INav4MomTruthEvent" for cont in inputTPContainer: suffix = cont[len(prefix):] if suffix == "": # the truth SIGNAL has already been scheduled above continue builder = getMcAODBuilder(suffix) builder.DoFiltering = False job += builder if rec.doWritexAOD(): from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg job += xAODMaker__xAODTruthCnvAlg(name = "GEN_AOD2xAOD", xAODTruthEventContainerName = "TruthEvent")
printMCOutput = False import AthenaPoolCnvSvc.ReadAthenaPool svcMgr.EventSelector.InputCollections = ["evnt.pool.root"] # Access the algorithm sequence: from AthenaCommon.AlgSequence import AlgSequence theJob = AlgSequence() # Create the xAOD::EventInfo object: theJob += CfgMgr.xAODMaker__EventInfoCnvAlg("EventInfoCnvAlg") # Run the xAOD truth builder from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg alg = xAODMaker__xAODTruthCnvAlg() # Pile up options... default is no pile-up alg.WriteInTimePileUpTruth = False alg.WriteAllPileUpTruth = False alg.AODContainerName = "GEN_EVENT" alg.OutputLevel = INFO theJob += alg # Output from OutputStreamAthenaPool.MultipleStreamManager import MSMgr xaodStream = MSMgr.NewPoolRootStream("StreamAOD", "xAOD.pool.root") # Additional type(s) created automatically by RecExCommon: xaodStream.AddItem("xAOD::EventInfo#EventInfo") xaodStream.AddItem("xAOD::EventAuxInfo#EventInfoAux.") # The types created explicitly by this job:
include.block("RecExCommon/AOD2xAOD.py") from MuonCombinedRecExample.MuonCombinedKeys import MuonCombinedKeys as MuonCbKeys from xAODTrackingCnv.xAODTrackingCnvConf import xAODMaker__TrackParticleCnvAlg if (objKeyStore.isInInput("<McEventCollection", "TruthEvent")): from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg topSequence += xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD") #EventInfo: if (objKeyStore.isInInput("EventInfo") and not objKeyStore.isInInput("xAOD::EventInfo")): from xAODEventInfoCnv.xAODEventInfoCreator import xAODMaker__EventInfoCnvAlg topSequence += xAODMaker__EventInfoCnvAlg() #CaloClusters: if (objKeyStore.isInInput("CaloClusterContainer")): from xAODCaloEventCnv.xAODCaloEventCnvConf import ClusterCreator topSequence += ClusterCreator( ) #Converts all CaloClusterContainers it finds in SG to xAOD pass #SA if objKeyStore.isInInput("Rec::TrackParticleContainer", MuonCbKeys.ExtrapolatedMSParticles()): from xAODTrackingCnv.xAODTrackingCnvConf import xAODMaker__TrackParticleCnvAlg alg1 = xAODMaker__TrackParticleCnvAlg("TrackParticleCnvAlg_ExtrapolatedMS") alg1.AODContainerName = MuonCbKeys.ExtrapolatedMSParticles( ) #ExtrapolatedMuonSpectrometerParticles alg1.xAODContainerName = MuonCbKeys.ExtrapolatedMSParticles() #alg1.OutputLevel = VERBOSE
#============================================================================== # Set up common services and job object. # This should appear in ALL derivation job options #============================================================================== from DerivationFrameworkCore.DerivationFrameworkMaster import * #==================================================================== # ATTACH THE RECONSTRUCTION TO THE SEQUENCER #==================================================================== # Add translator from EVGEN input to xAOD-like truth here from RecExConfig.ObjKeyStore import objKeyStore from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg if objKeyStore.isInInput("McEventCollection", "GEN_EVENT"): DerivationFrameworkJob += xAODMaker__xAODTruthCnvAlg( "GEN_EVNT2xAOD", AODContainerName="GEN_EVENT") #==================================================================== # JET/MET #==================================================================== # Set jet flags from JetRec.JetRecFlags import jetFlags jetFlags.useTruth = True jetFlags.useTracks = False # Add jet algorithms from JetRec.JetAlgorithm import addJetRecoToAlgSequence addJetRecoToAlgSequence(DerivationFrameworkJob, eventShapeTools=None) from JetRec.JetRecStandard import jtm from JetRec.JetRecConf import JetAlgorithm jetFlags.truthFlavorTags = [ "BHadronsInitial",
# Build compact hard truth object from DerivationFrameworkMCTruth.DerivationFrameworkMCTruthConf import DerivationFramework__CompactHardTruth makeHard = DerivationFramework__CompactHardTruth(McEvent="GEN_EVENT", McEventOut="GEN_HARD", MaxCount=0, OutputLevel=Lvl.INFO) AST99Job += makeHard # Convert GEN_HARD to TruthEvent with new names # Need to set TruthLinks to avoid conflict with standard name?! from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg AST99Job += xAODMaker__xAODTruthCnvAlg( "GEN_HARD2xAOD", AODContainerName="GEN_HARD", xAODTruthEventContainerName="TruthHardEvents", xAODTruthParticleContainerName="TruthHardParticles", xAODTruthVertexContainerName="TruthHardVertices", TruthLinks="TruthHardLinks", OutputLevel=Lvl.INFO) # Set up HardTruthThinning tool from DerivationFrameworkMCTruth.DerivationFrameworkMCTruthConf import DerivationFramework__HardTruthThinning # Keep B,D,tau decays cHadrons = [411, 421, 431, 4122, 4132, 4232, 4332] bHadrons = [511, 521, 531, 5122, 5132, 5232, 5332] tau = [15] keepers = cHadrons + bHadrons + tau # Keep particles in jets and around hard leptons TruthThinningTool = DerivationFramework__HardTruthThinning( name="TruthThinningTool", ThinningService="AST99ThinningSvc",
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration ## Configure and schedule jet finding algorithms for the jet ## containers defined in the user's JO fragment ## ## These algorithms must be scheduled *after* event generation and ## any corrections, but *before* the sequence of generator filters # Convert HepMC event record to xAODTruth for use by jet tools print 'bedzie konwersja !!' from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg if not hasattr(prefiltSeq, 'xAODCnv'): prefiltSeq += xAODMaker__xAODTruthCnvAlg('xAODCnv', WriteTruthMetaData=False) prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT' # Turn off jet tools specific to detector-level jets print 'bedzie wylaczenie !!' from JetRec.JetRecFlags import jetFlags jetFlags.useTracks = False jetFlags.eventShapeTools = [] jetFlags.useTopo = False jetFlags.useMuonSegments = False if hasattr(jetFlags, 'usePFlow'): jetFlags.usePFlow = False elif hasattr(jetFlags, 'usePflow'): jetFlags.usePflow = False else: raise NameError('jetFlags has no attribute usePflow or usePFlow') jetFlags.useCaloQualityTool = False # Attach jet algorithms print 'podlacz algorytmy jetowe !!' from JetRec.JetAlgorithm import addJetRecoToAlgSequence
name="McAodBuilder" + putype, outMcEvtCollection="GEN_AOD", # this is the input to the CnvTool outTruthParticles="SpclMC" + putype, ) builder.CnvTool.SelectSignalType = PileUpClassification.fromString( putype) # min bias only objKeyStore.addStreamAOD("TruthParticleContainer", "SpclMC" + putype) return builder # below, build a new TruthParticleContainer for each type of pile-up. # we get the list of existing ESD TruthParticleContainer, and guess its pile-up type # according to its suffix. inputTPContainer = objKeyStore['inputFile'].list("TruthParticleContainer") prefix = "TruthParticleContainer#INav4MomTruthEvent" for cont in inputTPContainer: suffix = cont[len(prefix):] if suffix == "": # the truth SIGNAL has already been scheduled above continue builder = getMcAODBuilder(suffix) builder.DoFiltering = False job += builder if ((objKeyStore.isInInput("McEventCollection", "GEN_AOD") or objKeyStore.isInInput("McEventCollection", "TruthEvent")) and not objKeyStore.isInInput("xAOD::TruthEventContainer", "TruthEvents")): from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg job += xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD")
from DerivationFrameworkMCTruth.TruthDerivationTools import * from AthenaCommon import Logging dfcommontruthlog = Logging.logging.getLogger('DFCommonTruth') # Execute this only for MC from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkIsMonteCarlo if DerivationFrameworkIsMonteCarlo: dfInputIsEVNT = False # Flag to distinguish EVNT from AOD input # Build truth collection if input is HepMC. Must be scheduled first to allow slimming. # Input file is EVNT if objKeyStore.isInInput("McEventCollection", "GEN_EVENT"): if not hasattr(DerivationFrameworkJob, 'GEN_EVNT2xAOD'): DerivationFrameworkJob.insert( 0, xAODMaker__xAODTruthCnvAlg("GEN_EVNT2xAOD", AODContainerName="GEN_EVENT")) dfInputIsEVNT = True # Input file is HITS and translation hasn't been scheduled - careful with the name difference! elif objKeyStore.isInInput("McEventCollection", "TruthEvent"): if not hasattr(DerivationFrameworkJob, 'GEN_AOD2xAOD'): DerivationFrameworkJob.insert( 0, xAODMaker__xAODTruthCnvAlg("GEN_EVNT2xAOD", AODContainerName="TruthEvent")) dfInputIsEVNT = True # If it isn't available, make a truth meta data object (will hold MC Event Weights) #if not objKeyStore.isInInput( "xAOD::TruthMetaDataContainer", "TruthMetaData" ) and not dfInputIsEVNT: # # If we are going to be making the truth collection (dfInputIsEVNT) then this will be made elsewhere # from AthenaCommon.AppMgr import ToolSvc # ToolSvc += CfgMgr.DerivationFramework__TruthMetaDataWriter(name='DFCommonTruthMetaDataWriter') # from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation
is_mc = (globalflags.DataSource == 'geant4') doCreation = ( InDetFlags.doNewTracking() or InDetFlags.doPseudoTracking() or InDetFlags.doLargeD0() or InDetFlags.doR3LargeD0() \ or InDetFlags.doLowPtLargeD0() ) and InDetFlags.doParticleCreation() doConversion = not InDetFlags.doNewTracking() and not InDetFlags.doPseudoTracking() and not InDetFlags.doLargeD0() and not InDetFlags.doR3LargeD0()\ and not InDetFlags.doLowPtLargeD0() and InDetFlags.doParticleConversion() if doCreation: printfunc("Creating xAOD::TrackParticles from Trk::Tracks") if doConversion: printfunc("Converting Rec::TrackParticles to xAOD::TrackParticles") # Run the xAOD truth builder for PU if needed if InDetFlags.doSplitReco() and is_mc: from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg xAODTruthCnvPU = xAODMaker__xAODTruthCnvAlg("xAODTruthCnvPU") xAODTruthCnvPU.WriteInTimePileUpTruth = False xAODTruthCnvPU.WriteAllPileUpTruth = True xAODTruthCnvPU.AODContainerName = "GEN_EVENT_PU" xAODTruthCnvPU.xAODTruthEventContainerName = "TruthEvents_PU" #output xAODTruthCnvPU.xAODTruthPileupEventContainerName = "TruthPileupEvents_PU" #output xAODTruthCnvPU.xAODTruthParticleContainerName = "TruthParticles_PU" #output xAODTruthCnvPU.xAODTruthVertexContainerName = "TruthVertices_PU" #output xAODTruthCnvPU.TruthLinks = "xAODTruthLinks_PU" #output/intermediate xAODTruthCnvPU.MetaObjectName = "TruthMetaData_PU" #output topSequence += xAODTruthCnvPU def getInDetxAODParticleCreatorTool(prd_to_track_map=None, suffix=""): from AthenaCommon.AppMgr import ToolSvc if hasattr(ToolSvc, 'InDetxAODParticleCreatorTool' + suffix):
from DerivationFrameworkCore.DerivationFrameworkMaster import * #==================================================================== # ATTACH THE RECONSTRUCTION TO THE SEQUENCER #==================================================================== # Flag to distinguish EVNT/xAOD input isEVNT = True # Add translator from EVGEN input to xAOD-like truth here from RecExConfig.ObjKeyStore import objKeyStore from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg from DerivationFrameworkMCTruth.DerivationFrameworkMCTruthConf import DerivationFramework__xAODtoHepMCCnvAlg if objKeyStore.isInInput("McEventCollection", "GEN_EVENT"): DerivationFrameworkJob += xAODMaker__xAODTruthCnvAlg( "GEN_EVNT2xAOD", AODContainerName="GEN_EVENT") isEVNT = True else: # Add back-translator from xAOD::TruthEvent to HepMC for xAOD input # Needed to run hard truth on xAOD input files # Use GEN_EVENT name for output DerivationFrameworkJob += DerivationFramework__xAODtoHepMCCnvAlg( "xAOD2GEN_EVENT", xAODTruthEventKey="TruthEvents", HepMCTruthEventKey="GEN_EVENT", MaxCount=5, OutputLevel=Lvl.INFO) isEVNT = False #============================================================================== # Make truth jets and MET
# Not GEN stuff in data if not globalflags.DataSource() == 'data': # --- Not sure if there is another quickest way to create the # MC Truth info needed by the xAODMaker::TrackParticleCnv # than going through the creation of the AOD ?? # -- create MC-truth particle info #from McParticleAlgs.JobOptCfg import McAodBuilder #from RecExConfig.ObjKeyStore import objKeyStore #if (cfgKeyStore.isInInput( "McEventCollection", "TruthEvent" ) and \ # not objKeyStore.isInInput( "McEventCollection", "GEN_AOD" )): #if (objKeyStore.isInInput( "McEventCollection", "TruthEvent" ) and \ # not objKeyStore.isInInput( "McEventCollection", "GEN_AOD" )): #topSequence.insert(0,McAodBuilder()) from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg GEN_AOD2xAOD = xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD") GEN_AOD2xAOD.AODContainerName = "TruthEvent" GEN_AOD2xAOD.WriteInTimePileUpTruth = True topSequence.insert(0,GEN_AOD2xAOD) # Fix the bug comented in https://its.cern.ch/jira/browse/ATLASRECTS-2062 topSequence.GEN_AOD2xAOD.ForceRerun=True # Set to True if you want to write out all input data ("pass-through" mode) if doWriteESD: StreamESD.TakeItemsFromInput = False if doWriteAOD: StreamAOD.TakeItemsFromInput = False # JCD ADDED #--------------------------------------------------------------
ToolSvc += InDetTruthToTrack InDetTruthToTrack.OutputLevel = OutputLevel #VERBOSE # track collection keys for statistics if not 'TrackCollectionKeys' in dir(): TrackCollectionKeys = [] if not 'TrackCollectionTruthKeys' in dir(): TrackCollectionTruthKeys = [] TrackCollectionKeys += [InDetKeys.PseudoTracks()] TrackCollectionTruthKeys += [InDetKeys.PseudoTracksTruth()] from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg xAODTruthCnvAlg = xAODMaker__xAODTruthCnvAlg(name="xAODTruthCnvAlg", AODContainerName="TruthEvent", WriteInTimePileUpTruth=False, WriteAllPileUpTruth=False) xAODTruthCnvAlg.OutputLevel = OutputLevel #VERBOSE topSequence += xAODTruthCnvAlg print xAODTruthCnvAlg # register internally used track summary tool from TrkTrackSummaryTool.AtlasTrackSummaryTool import AtlasTrackSummaryTool AtlasTrackSummaryTool = AtlasTrackSummaryTool() ToolSvc += AtlasTrackSummaryTool include("InDetRecExample/InDetxAODCreator.py") public_InDetxAODParticleCreatorTool = getInDetxAODParticleCreatorTool() public_InDetxAODParticleCreatorTool.TrackSummaryTool = InDetTrackSummaryTool
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration # Add translator from EVGEN input to xAOD-like truth here from DerivationFrameworkCore.DerivationFrameworkMaster import * from RecExConfig.ObjKeyStore import objKeyStore from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg from DerivationFrameworkMCTruth.TruthDerivationTools import * dfInputIsEVNT = False # Flag to distinguish EVNT from AOD input # Build truth collection if input is HepMC. Must be scheduled first to allow slimming. # Input file is EVNT if objKeyStore.isInInput( "McEventCollection", "GEN_EVENT" ): DerivationFrameworkJob.insert(0,xAODMaker__xAODTruthCnvAlg("GEN_EVNT2xAOD",AODContainerName="GEN_EVENT")) dfInputIsEVNT = True # Input file is HITS elif objKeyStore.isInInput( "McEventCollection", "TruthEvent"): DerivationFrameworkJob.insert(0,xAODMaker__xAODTruthCnvAlg("GEN_EVNT2xAOD",AODContainerName="TruthEvent")) dfInputIsEVNT = True # Input file must be xAOD if (dfInputIsEVNT==False): # xAOD input so we need to schedule the special truth building tools and add them to a common augmentation augmentationToolsList = [ DFCommonTruthClassificationTool, DFCommonTruthMuonTool,DFCommonTruthElectronTool, DFCommonTruthPhotonToolSim, #DFCommonTruthTauTool, DFCommonTruthNeutrinoTool, TRUTH3TopTool, TRUTH3BosonTool, TRUTH3BSMTool, DFCommonTruthElectronDressingTool, DFCommonTruthMuonDressingTool, DFCommonTruthElectronIsolationTool1, DFCommonTruthElectronIsolationTool2,