Solutions to the tutorial on configurables

From ATLAS-TRIUMF

Jump to: navigation, search
# 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
Personal tools