From ATLAS-TRIUMF
# files necessary to setup EventView environment
include("EventViewConfiguration/EventViewFullInclude_jobOptions.py")
from EventViewConfiguration import *
# instantiate the top alg sequence for athena, only one is required
theJob = AlgSequence()
# instantiate one tool looper for reconstructed
defaultEVLooper = EVMultipleOutputToolLooper("defaultEVLooper")
# the name of the EventView (in StoreGate) created by this tool looper
defaultEVLooper.EventViewCollectionOutputName="defaultEventView"
# schedule EVMultipleOutputToolLoopers to athena top sequencer
theJob += defaultEVLooper
# and similarly for truth...
truthEVLooper = EVMultipleOutputToolLooper("truthEVLooper")
truthEVLooper.EventViewCollectionOutputName="truthEventView"
theJob += truthEVLooper
# define insertion order, you may want to play with this order
toInsert=["Electron", "Photon", "Muon","TauJet","JetTag", "ParticleJet", "MissingEt", "EventInfo"]
# schedule the default inserter module with the insertion order as defined above
# Leave out ",toDo=toInsert" for default configuration
defaultEVLooper += DefaultEventView("Inserters", toDo=toInsert)
truthEVLooper += TruthEventView("TruthInserters")
# and this should do truth matching for the reconstructed particles:
defaultEVLooper += TruthEventView("TruthMatchInserters", insert=False)
#
# you can override default preselection parameters, for example (uncomment if you want to try this)
defaultEVLooper.Inserters.ElectronInserter.etCut=15*GeV
#defaultEVLooper.Inserters.JetTagInserter.weightCut=3
# try the SUSYview job options:
theApp.Dlls+=["SUSYView"]
from SUSYView.SUSYVarCalc_module import *
# these really do get into the ntuple, so something works...
defaultEVLooper += SUSYVarCalc("RecoSUSYVarCalc","MissingEt")
# add some susy truth inserters:
from SUSYView.TruthNeutrinoView_module import *
truthEVLooper += TruthNeutrinoView("SUSYTruthNeutrino",TruthNeutrinoEtCut=10)
# schedule labeller module from EventViewConfiguration
defaultEVLooper += DefaultEventViewLabels("Labeler", defaultEVLooper.Inserters)
truthEVLooper += TruthEventViewLabels("TrueLabeler", truthEVLooper.TruthInserters)
defaultEVLooper += TruthEventViewLabels("TruthLabeler", defaultEVLooper.Inserters)
# a bit desperate - may even work, but we still need a dumper to put it in the ntuple...
truthEVLooper += TruthEventViewLabels("AnotherTrueLabeler", truthEVLooper.SUSYTruthNeutrino)
# Try to use normal dumpers:
#defaultEVLooper += UserDataDump("UserDataDump", Labels=defaultEVLooper['Labeler']._Labels + defaultEVLooper['TruthLabeler']._Labels)
#truthEVLooper += TruthUserDataDump("UserDataDump", Labels=truthEVLooper['TrueLabeler']._Labels + truthEVLooper['AnotherTrueLabeler']._Labels)
#truthEVLooper += TruthUserDataDump("TruthUserDataDump", Labels=truthEVLooper['TruthLabeler']._Labels, inferred=false)
## Get ALL electron info from AOD:
#from UserAnalysis.DetailElectronInfo import *
#defaultEVLooper += DetailElectronInfo("ElectronInfo",ClusterMatch=True)
#
# Or be a bit fancier?
defaultEVLooper += anEVTool("EVUDFinalStateLooper/EVUDFSLAll")
defaultEVLooper.EVUDFSLAll+= anEVTool("EVUDKinCalc")
defaultEVLooper.EVUDFSLAll.setProperties(Prefix= "All_")
# and try the nearest jet associator:
defaultEVLooper.EVUDFSLAll+= anEVTool("EVUDToParticleJetAssociator/PJAssoc" )
defaultEVLooper.EVUDFSLAll.PJAssoc.Prefix= "JetM_" #JetM for JetMatched
defaultEVLooper.EVUDFSLAll.PJAssoc.ContainerKey = "ConeTowerParticleJets"
defaultEVLooper.EVUDFSLAll.PJAssoc.deltaRmatch = 1
# try the nearest true electron associator:
defaultEVLooper.EVUDFSLAll+= anEVTool("EVUDToTruthParticleAssociator/TrueEAssoc" )
defaultEVLooper.EVUDFSLAll.TrueEAssoc.Prefix= "TrueE_"
defaultEVLooper.EVUDFSLAll.TrueEAssoc.ContainerKey = "SpclMC"
defaultEVLooper.EVUDFSLAll.TrueEAssoc.deltaRmatch = 1
defaultEVLooper.EVUDFSLAll.TrueEAssoc.usePdgID = True
defaultEVLooper.EVUDFSLAll.TrueEAssoc.pdgID = 11
# try my own associator:
defaultEVLooper.EVUDFSLAll+= anEVTool("EVUDToOppositeParticle/OppZAssoc" )
defaultEVLooper.EVUDFSLAll.OppZAssoc.Prefix= "OppZ_"
defaultEVLooper.EVUDFSLAll.OppZAssoc.TransversePlane = True
# Get some electron info by normal tools:
defaultEVLooper += [ anEVTool("EVUDFinalStateLooper/EVUDFSLElectron") ]
defaultEVLooper.EVUDFSLElectron+= anEVTool("EVUDKinCalc")
defaultEVLooper.EVUDFSLElectron+= anEVTool("EVUDElectronAll")
defaultEVLooper.EVUDFSLElectron.setProperties( Labels= [ "Electron" ],
Prefix= "El_",
SortParticles= True) # Decending p_T sort
# Get some jet info too:
defaultEVLooper += [ anEVTool("EVUDFinalStateLooper/EVUDFSLJets") ]
defaultEVLooper.EVUDFSLJets+= anEVTool("EVUDKinCalc")
#defaultEVLooper.EVUDFSLJets+= anEVTool("EVUDParticleJetAll") # this one seems to seg fault...
defaultEVLooper.EVUDFSLJets.setProperties(Labels= [ "ParticleJet" ],
Prefix= "PJet_",
SortParticles= True)
# and some Muon info:
defaultEVLooper += anEVTool("EVUDFinalStateLooper/EVUDFSLMuons")
defaultEVLooper.EVUDFSLMuons+= anEVTool("EVUDKinCalc")
defaultEVLooper.EVUDFSLMuons+= anEVTool("EVUDMuonAll")
defaultEVLooper.EVUDFSLMuons.setProperties(Labels= [ "Muon" ],
Prefix= "Muon_",
SortParticles= True)
# and label:
defaultEVLooper.EVUDFSLAll+= anEVTool("EVUDLabelCalc/LabelDumper")
defaultEVLooper.EVUDFSLAll.LabelDumper.setProperties(Labels= defaultEVLooper['Labeler']._Labels + defaultEVLooper['TruthLabeler']._Labels)
defaultEVLooper.EVUDFSLJets+= anEVTool("EVUDLabelCalc/JetLabelDumper")
defaultEVLooper.EVUDFSLJets.JetLabelDumper.setProperties(Labels= defaultEVLooper['Labeler']._Labels + defaultEVLooper['TruthLabeler']._Labels)
#defaultEVLooper.EVUDFSLMuons+= anEVTool("EVUDLabelCalc/MuonLabelDumper")
#defaultEVLooper.EVUDFSLMuons.MuonLabelDumper.setProperties(Labels= defaultEVLooper['Labeler']._Labels + defaultEVLooper['TruthLabeler']._Labels)
#
# Look for true Z->ee, mumu decays (ideally insert them somehow!!!) this doesn't seem to produce errors, or any visible effect at all...
truthEVLooper += [ anEVTool("EVTruthVtxFilter/VtxFilter") ]
truthEVLooper["VtxFilter"].setProperties(DecayPatterns = [ "23 -> -11|-13 + 11|13" ])
#truthEVLooper.OutputLevel=DEBUG
# and same for truth: Why doesn't this dump ALL the FS objects (ENeutrino, MNeutrino etc.) into user data???
truthEVLooper += anEVTool("EVUDFinalStateLooper/EVUDFSTrue")
truthEVLooper.EVUDFSTrue+= anEVTool("EVUDKinCalc")
truthEVLooper.EVUDFSTrue+= anEVTool("EVUDTruthParticleAll")
truthEVLooper.EVUDFSTrue.setProperties(Prefix= "Truth_")
truthEVLooper.EVUDFSTrue+= anEVTool("EVUDLabelCalc/TruthLabelDumper")
print truthEVLooper.EVUDFSTrue.TruthLabelDumper.Labels
truthEVLooper.EVUDFSTrue.TruthLabelDumper.setProperties(Labels= truthEVLooper['TrueLabeler']._Labels + truthEVLooper['AnotherTrueLabeler']._Labels)
print truthEVLooper.EVUDFSTrue.TruthLabelDumper.Labels
##
defaultEVLooper += [anEVTool("EVUDSimpleCut/Cuts")]
#
## list of cuts
defaultEVLooper["Cuts"].setProperties(cutList=["int PJet_N==1"
#,"double MET_Final_et>5GeV"
#,"int El_N==2",
],
filterMOEV=False, # option NOT to filter out EventView not passing cuts
saveResult=True, # save the result of this cut in UD
cutName='OneJetCut') # name variable containing result of this cut
# now try to do Z->ee reco:
defaultEVLooper+=anEVTool("EVSimpleCombo/ZeeCombo")
#Combinations
defaultEVLooper["ZeeCombo"].setProperties(Labels=["Electron"], # input particle label
OutputLabel= "ElectronPair", # output particle label
LowMass = 50*GeV, # mass window
HighMass = 110*GeV,
NDaughters = 2, # Number of daughters
PDGID = 23, # PDG id of Z... not really necessary
PassOnNoCombo = True )
# and add to UserData:
defaultEVLooper += [ anEVTool("EVUDInferredObjectLooper/EVUDIOLZee") ]
defaultEVLooper.EVUDIOLZee+= anEVTool("EVUDKinCalc")
defaultEVLooper.EVUDIOLZee.setProperties( Labels= [ "ElectronPair" ],
Prefix= "Zee_",
SortParticles= True) # Decending p_T sort
print defaultEVLooper.EVUDIOLZee.Labels
# now try to do Z->mumu reco:
defaultEVLooper+=anEVTool("EVSimpleCombo/ZmmCombo")
#Combinations
defaultEVLooper["ZmmCombo"].setProperties(Labels=["Muon"], # input particle label
OutputLabel= "MuonPair", # output particle label
LowMass = 50*GeV, # mass window
HighMass = 110*GeV,
NDaughters = 2, # Number of daughters
PDGID = 23, # PDG id of Z... not really necessary
PassOnNoCombo = True )
# and add to UserData:
defaultEVLooper += [ anEVTool("EVUDInferredObjectLooper/EVUDIOLZmm") ]
defaultEVLooper.EVUDIOLZmm+= anEVTool("EVUDKinCalc")
defaultEVLooper.EVUDIOLZmm.setProperties( Labels= [ "MuonPair" ],
Prefix= "Zmm_",
SortParticles= True) # Decending p_T sort
print defaultEVLooper.EVUDIOLZmm.Labels
# add some user analysis (an example from the tutorial)
theApp.Dlls+=["UserAnalysis"]
#defaultEVLooper += [anEVTool("EVSumCalculator/SumAll"),
# anEVTool("EVSumCalculator/SumElectron")]
#defaultEVLooper.SumAll.setProperties(Prefix="NewAll_")
#defaultEVLooper.SumElectron.setProperties(Prefix="NewEL_", Label="Electron")
theApp.Dlls+=["UserAnalysis"]
from UserAnalysis.TutorialAnalysis_module import *
defaultEVLooper += MyEventVariables("EventVarsAll")
defaultEVLooper += MyEventVariables("EventVarsEl",Prefix="NewEl_",Label="Electron")
defaultEVLooper += MyEventVariables("EventVarsMu",Prefix="NewMu_",Label="Muon")
defaultEVLooper += MyEventVariables("EventVarsPh",Prefix="NewPh_",Label="Photon")
defaultEVLooper += MyEventVariables("EventVarsPJet",Prefix="NewPJet_",Label="ParticleJet")
defaultEVLooper += MyEventVariables("EventVarsJetT",Prefix="NewJetT_",Label="JetTag")
defaultEVLooper += MyEventVariables("EventVarsTJet",Prefix="NewTJet_",Label="TauJet")
# Write UserData to AANtuple
defaultEVLooper+=AANtupleFromUserData("defaultAADumper", filename="Exercise1.AAN.root")
truthEVLooper+=AANtupleFromUserData("truthAADumper", filename="Exercise1.truthAAN.root")
# schedule screen dumper, printUD=True to see UserData contents
defaultEVLooper+=EVScreenDump("defaultScreenDumper", printUD=True)
truthEVLooper+=EVScreenDump("truthScreenDumper", printUD=True)
# print the whole job schedule
print theJob
# my collections:
EventSelector.InputCollections=[
#"/data/Simfiles/Special12.0.1/csc11.005115.JimmyZmumuM150.recon.AOD.v11004205_with12.0.1._00001.pool.root",
"/data/Simfiles/Special12.0.1/mc11.004201.ZeeJimmy.recon.AOD.v11000401._00001.pool.root"
#"/data/Simfiles/mc11.004201.ZeeJimmy.recon.AOD.v11004101._00001.pool.root"
]
# specify the number of events you want to run
theApp.EvtMax = 100